summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2014-04-18 15:59:24 +0400
committerIgor Pashev <pashev.igor@gmail.com>2014-04-18 15:59:24 +0400
commit31d45d9b02af08ddbd40032fd8814ddf43b4e5d0 (patch)
tree00658d8b610669a0e69b906645979f782cbbe288
parent1fed3f86311b1f83a47f66ac9e8a0a14d0b0abcd (diff)
parentf4b479d67b6cfb4a5c7c0c378c7367deb0cd20b0 (diff)
downloadgcc-47-31d45d9b02af08ddbd40032fd8814ddf43b4e5d0.tar.gz
Merge svn://svn.debian.org/svn/gcccvs/branches/sid/gcc-4.7
Conflicts: debian/changelog debian/control debian/patches/hjl-x32-gcc-4_7-branch.diff debian/rules.defs
-rw-r--r--debian/changelog105
-rw-r--r--debian/control868
-rw-r--r--debian/control.m46
-rwxr-xr-xdebian/locale-gen2
-rw-r--r--debian/patches/arm-multilib-soft-cross.diff27
-rw-r--r--debian/patches/arm-multilib-softfp-cross.diff27
-rw-r--r--debian/patches/gcc-linaro-doc.diff216
-rw-r--r--debian/patches/gcc-linaro.diff28404
-rw-r--r--debian/patches/gcc-multiarch.diff17
-rw-r--r--debian/patches/hjl-x32-gcc-4_7-branch-doc.diff10
-rw-r--r--debian/patches/hjl-x32-gcc-4_7-branch.diff1464
-rw-r--r--debian/patches/libstdc++-python3.diff167
-rw-r--r--debian/patches/note-gnu-stack.diff77
-rw-r--r--debian/patches/pr50043.diff297
-rw-r--r--debian/patches/pr59695.diff156
-rw-r--r--debian/patches/rename-info-files.diff48
-rw-r--r--debian/patches/svn-updates-linaro.diff4313
-rw-r--r--debian/patches/svn-updates.diff20541
-rw-r--r--debian/rules.conf35
-rw-r--r--debian/rules.d/binary-libstdcxx.mk4
-rw-r--r--debian/rules.defs19
-rw-r--r--debian/rules.patch13
-rw-r--r--debian/rules286
23 files changed, 48229 insertions, 8673 deletions
diff --git a/debian/changelog b/debian/changelog
index 356c8bb..3041e27 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-gcc-4.7 (4.7.3-5~dyson3) UNRELEASED; urgency=medium
+gcc-4.7 (4.7.3-12+dyson1) UNRELEASED; urgency=medium
* Install only fixed sys/nsctl/nsctl.h sys/feature_tests.h sys/int_const.h
sys/int_limits.h; e. i. not sys/varargs.h, cause it breaks building
@@ -6,6 +6,107 @@ gcc-4.7 (4.7.3-5~dyson3) UNRELEASED; urgency=medium
-- Igor Pashev <pashev.igor@gmail.com> Fri, 18 Apr 2014 15:17:55 +0400
+gcc-4.7 (4.7.3-12) unstable; urgency=medium
+
+ * Update to SVN 20140320 (r208693) from the gcc-4_7-branch.
+
+ -- Matthias Klose <doko@debian.org> Thu, 20 Mar 2014 16:22:37 +0100
+
+gcc-4.7 (4.7.3-11) unstable; urgency=medium
+
+ * Update to SVN 20140222 (r208044) from the gcc-4_7-branch.
+ * Update the x32 support from the branch.
+ * Update the Linaro support to the 4.7-2014.01 release.
+
+ -- Matthias Klose <doko@debian.org> Sat, 22 Feb 2014 18:04:50 +0100
+
+gcc-4.7 (4.7.3-10) unstable; urgency=medium
+
+ * Update to SVN 20140112 (r206563) from the gcc-4_7-branch.
+
+ [ Matthias Klose ]
+ * Configure --with-long-double-128 on powerpcspe. Closes: #731141.
+ * Stop building the spu cross compiler, apparently newlib is now
+ maintained by an ARM only maintainer. Closes: #734002.
+ * Update the x32 support from the branch.
+ * Update the Linaro support to the 4.7-2013.12 release.
+ * Fix PR target/59588 (AArch64), backport proposed patch.
+
+ [ Aurelien Jarno ]
+ * patches/note-gnu-stack.diff: restore and rebase lost parts.
+
+ -- Matthias Klose <doko@debian.org> Sun, 12 Jan 2014 12:59:20 +0100
+
+gcc-4.7 (4.7.3-9) unstable; urgency=low
+
+ * Update to SVN 20131109 (r204613) from the gcc-4_7-branch.
+ * Stop building libmudflap (removed in GCC 4.9).
+
+ -- Matthias Klose <doko@debian.org> Sat, 09 Nov 2013 12:33:32 +0100
+
+gcc-4.7 (4.7.3-8) unstable; urgency=low
+
+ * Update to SVN 20131020 (r203880) from the gcc-4_7-branch.
+ * Update the Linaro support to the 4.7-2013.10 release.
+ * Fix bootstrap of native aarch64 build.
+ * Make the libstdc++ pretty printers compatible with Python3, if
+ gdb is built with Python3 support.
+ * Fix loading of libstdc++ pretty printers. Addresses: #701935.
+ * Don't run the tests against the installed runtime libraries.
+
+ -- Matthias Klose <doko@debian.org> Mon, 21 Oct 2013 14:02:04 +0200
+
+gcc-4.7 (4.7.3-7) unstable; urgency=low
+
+ * Update to SVN 20130821 (r201895) from the gcc-4_7-branch.
+ * Update the Linaro support to the 4.7-2013.08 release.
+ * Tighten the build conflict with binutils-gold (closes: #720264).
+ * Update Debian release names (Stephen Kitt). Closes: #720263.
+ * On alpha, link with --no-relax. Update libgcc1 symbols files (Michael
+ Cree). Closes: #719672.
+
+ -- Matthias Klose <doko@debian.org> Wed, 21 Aug 2013 11:40:56 +0200
+
+gcc-4.7 (4.7.3-6) unstable; urgency=low
+
+ * Update to SVN 20130715 (r200955) from the gcc-4_7-branch.
+
+ [ Matthias Klose ]
+ * Fall back to the binutils version of the binutils build dependency
+ if the binutils version used for the build cannot be determined.
+ * For ARM multilib builds, use libsf/libhf system directories to lookup
+ files for the non-default multilib (for now, only for the cross compilers).
+ * Fix documentation builds with texinfo-5.1.
+ * Update the Linaro support to the 4.7-2013.07 release.
+ * Backport PR c++/50043 from the 4.8 branch. LP: #1201246.
+
+ [ Aurelien Jarno ]
+ * Don't pass --with-mips-plt on mips/mipsel.
+ * Add 32-bit biarch packages on sparc64.
+
+ -- Matthias Klose <doko@debian.org> Mon, 15 Jul 2013 11:40:45 +0200
+
+gcc-4.7 (4.7.3-5) unstable; urgency=low
+
+ * Update to SVN 20130614 (r200084) from the gcc-4_7-branch.
+
+ [ Matthias Klose ]
+ * Update the Linaro support to the 4.7-2013.06 release.
+ * libgo: Overwrite the setcontext_clobbers_tls check on mips*, fails
+ on some buildds.
+ * Build zh_TW.UTF-8 locale to fix libstdc++ test failures.
+ * Keep prev-* symlinks to fix plugin.exp test failures.
+ * Don't configure anymore with --enable-libstdcxx-time=yes.
+ Addresses: #710220.
+ * Drop build dependency on automake, not used anymore.
+ * Let gcc depend on the binutils upstream version it was built with.
+ Addresses #710142.
+
+ [ Daniel Schepler ]
+ * Update the x32 support from the branch.
+
+ -- Matthias Klose <doko@debian.org> Fri, 14 Jun 2013 11:46:15 +0200
+
gcc-4.7 (4.7.3-5~dyson2) unstable; urgency=low
* Install fixed complex.h
@@ -17,8 +118,6 @@ gcc-4.7 (4.7.3-5~dyson1) unstable; urgency=low
[ Matthias Klose ]
* Update to SVN 20130517 (r199025) from the gcc-4_7-branch.
* Update the Linaro support to the 4.7-2013.05 release.
- * libgo: Overwrite the setcontext_clobbers_tls check on mips*, fails
- on some buildds.
[ Igor Pashev ]
* Package for Dyson
diff --git a/debian/control b/debian/control
index 2cd9540..dfa0c82 100644
--- a/debian/control
+++ b/debian/control
@@ -3,20 +3,20 @@ Section: devel
Priority: optional
Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org>
Uploaders: Matthias Klose <doko@debian.org>
-Standards-Version: 3.9.4
-Build-Depends: debhelper (>= 5.0.62), gcc-4.8-base | gcc-4.7-base,
- libc1-dev (>= 2.10-13) [illumos-amd64], libc1-dev-illumos-i386 (>= 2.10-13) [illumos-amd64],
- m4, libtool, autoconf2.64, automake (>= 1:1.11), automake (<< 1:1.12),
+Standards-Version: 3.9.5
+Build-Depends: debhelper (>= 5.0.62), gcc-4.8-base,
+ libc6.1-dev (>= 2.13-5) [alpha ia64] | libc0.3-dev (>= 2.13-5) [hurd-i386] | libc0.1-dev (>= 2.13-5) [kfreebsd-i386 kfreebsd-amd64] | libc6-dev (>= 2.13-5) , libc6-dev (>= 2.13-31) [armel armhf], libc6-dev-amd64 [i386 x32], libc6-dev-sparc64 [sparc], libc6-dev-sparc [sparc64], libc6-dev-s390 [s390x], libc6-dev-s390x [s390], libc6-dev-i386 [amd64 x32], libc6-dev-powerpc [ppc64], libc6-dev-ppc64 [powerpc], libc0.1-dev-i386 [kfreebsd-amd64], lib32gcc1 [amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32], libn32gcc1 [mips mipsel], lib64gcc1 [i386 mips mipsel powerpc sparc s390 x32], libc6-dev-mips64 [mips mipsel], libc6-dev-mipsn32 [mips mipsel], libc6-dev-x32 [amd64 i386], libx32gcc1 [amd64 i386],
+ m4, libtool, autoconf2.64,
libunwind7-dev (>= 0.98.5-6) [ia64], libatomic-ops-dev [ia64],
zlib1g-dev, gawk, lzma, xz-utils, patchutils,
binutils-hppa64 (>= 2.22) [hppa],
gperf (>= 3.0.1), bison (>= 1:2.3), flex, gettext,
texinfo (>= 4.3), sharutils,
- procps, netbase, binutils-spu (>= 2.22) [powerpc ppc64], newlib-spu (>= 1.16.0) [powerpc ppc64],
- libcloog-ppl-dev (>= 0.16), libmpc-dev (>= 1.0), libmpfr-dev (>= 3.0.0-9~), libgmp-dev (>= 2:5.0.1~),
- dejagnu [!m68k !hurd-i386 !hurd-alpha], autogen, realpath (>= 1.9.12) | coreutils (>= 8.15), chrpath, lsb-release, quilt
+ procps, netbase,
+ libcloog-ppl-dev (>= 0.15.11), libmpc-dev (>= 1.0), libmpfr-dev (>= 3.0.0-9~), libgmp-dev (>= 2:5.0.1~),
+ dejagnu [!m68k !hurd-i386 !hurd-alpha], autogen, realpath (>= 1.9.12), chrpath, lsb-release, quilt
Build-Depends-Indep: doxygen (>= 1.7.2), graphviz (>= 2.2), ghostscript, texlive-latex-base, xsltproc, libxml2-utils, docbook-xsl-ns,
-Build-Conflicts: binutils-gold
+Build-Conflicts: binutils-gold (<< 2.23.52.20130727)
Homepage: http://gcc.gnu.org/
XS-Vcs-Browser: http://svn.debian.org/viewsvn/gcccvs/branches/sid/gcc-4.7/
XS-Vcs-Svn: svn://svn.debian.org/svn/gcccvs/branches/sid/gcc-4.7
@@ -33,52 +33,6 @@ Description: GCC, the GNU Compiler Collection (base package)
This package contains files common to all languages and libraries
contained in the GNU Compiler Collection (GCC).
-Package: libgcc1
-Architecture: any
-Section: libs
-Priority: required
-Depends: gcc-4.7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
-Multi-Arch: same
-Pre-Depends: multiarch-support
-Breaks: ${multiarch:breaks}
-Provides: libgcc1-armel [armel], libgcc1-armhf [armhf]
-Description: GCC support library
- Shared version of the support library, a library of internal subroutines
- that GCC uses to overcome shortcomings of particular machines, or
- special needs for some languages.
-
-Package: libgcc1-dbg
-Architecture: any
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libgcc1 (= ${gcc:EpochVersion}), ${misc:Depends}
-Multi-Arch: same
-Provides: libgcc1-dbg-armel [armel], libgcc1-dbg-armhf [armhf]
-Description: GCC support library (debug symbols)
- Debug symbols for the GCC support library.
-
-Package: libgcc2
-Architecture: m68k
-Section: libs
-Priority: required
-Depends: gcc-4.7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
-Multi-Arch: same
-Pre-Depends: multiarch-support
-Breaks: ${multiarch:breaks}
-Description: GCC support library
- Shared version of the support library, a library of internal subroutines
- that GCC uses to overcome shortcomings of particular machines, or
- special needs for some languages.
-
-Package: libgcc2-dbg
-Architecture: m68k
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libgcc2 (= ${gcc:EpochVersion}), ${misc:Depends}
-Multi-Arch: same
-Description: GCC support library (debug symbols)
- Debug symbols for the GCC support library.
-
Package: libgcc-4.7-dev
Architecture: any
Section: libdevel
@@ -91,47 +45,6 @@ Description: GCC support library (development files)
This package contains the headers and static library files necessary for
building C programs which use libgcc, libgomp, libquadmath, libssp or libitm.
-Package: libgcc4
-Architecture: hppa
-Multi-Arch: same
-Pre-Depends: multiarch-support
-Breaks: ${multiarch:breaks}
-Section: libs
-Priority: required
-Depends: gcc-4.7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
-Description: GCC support library
- Shared version of the support library, a library of internal subroutines
- that GCC uses to overcome shortcomings of particular machines, or
- special needs for some languages.
-
-Package: libgcc4-dbg
-Architecture: hppa
-Multi-Arch: same
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libgcc4 (= ${gcc:EpochVersion}), ${misc:Depends}
-Description: GCC support library (debug symbols)
- Debug symbols for the GCC support library.
-
-Package: lib64gcc1
-Architecture: i386 powerpc sparc s390 mips mipsel x32
-Section: libs
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${misc:Depends}
-Conflicts: libgcc1 (<= 1:3.3-0pre9)
-Description: GCC support library (64bit)
- Shared version of the support library, a library of internal subroutines
- that GCC uses to overcome shortcomings of particular machines, or
- special needs for some languages.
-
-Package: lib64gcc1-dbg
-Architecture: i386 powerpc sparc s390 mips mipsel x32
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), lib64gcc1 (= ${gcc:EpochVersion}), ${misc:Depends}
-Description: GCC support library (debug symbols)
- Debug symbols for the GCC support library.
-
Package: lib64gcc-4.7-dev
Architecture: i386 powerpc sparc s390 mips mipsel x32
Section: libdevel
@@ -143,27 +56,8 @@ Description: GCC support library (64bit development files)
This package contains the headers and static library files necessary for
building C programs which use libgcc, libgomp, libquadmath, libssp or libitm.
-Package: lib32gcc1
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
-Section: libs
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${misc:Depends}
-Conflicts: ${confl:lib32}
-Description: GCC support library (32 bit Version)
- Shared version of the support library, a library of internal subroutines
- that GCC uses to overcome shortcomings of particular machines, or
- special needs for some languages.
-
-Package: lib32gcc1-dbg
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), lib32gcc1 (= ${gcc:EpochVersion}), ${misc:Depends}
-Description: GCC support library (debug symbols)
- Debug symbols for the GCC support library.
-
Package: lib32gcc-4.7-dev
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32
Section: libdevel
Priority: optional
Recommends: ${dep:libcdev}
@@ -173,25 +67,6 @@ Description: GCC support library (32 bit development files)
This package contains the headers and static library files necessary for
building C programs which use libgcc, libgomp, libquadmath, libssp or libitm.
-Package: libn32gcc1
-Architecture: mips mipsel
-Section: libs
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${misc:Depends}
-Conflicts: libgcc1 (<= 1:3.3-0pre9)
-Description: GCC support library (n32)
- Shared version of the support library, a library of internal subroutines
- that GCC uses to overcome shortcomings of particular machines, or
- special needs for some languages.
-
-Package: libn32gcc1-dbg
-Architecture: mips mipsel
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libn32gcc1 (= ${gcc:EpochVersion}), ${misc:Depends}
-Description: GCC support library (debug symbols)
- Debug symbols for the GCC support library.
-
Package: libn32gcc-4.7-dev
Architecture: mips mipsel
Section: libdevel
@@ -203,24 +78,6 @@ Description: GCC support library (n32 development files)
This package contains the headers and static library files necessary for
building C programs which use libgcc, libgomp, libquadmath, libssp or libitm.
-Package: libx32gcc1
-Architecture: amd64 i386
-Section: libs
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${misc:Depends}
-Description: GCC support library (x32)
- Shared version of the support library, a library of internal subroutines
- that GCC uses to overcome shortcomings of particular machines, or
- special needs for some languages.
-
-Package: libx32gcc1-dbg
-Architecture: amd64 i386
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libx32gcc1 (= ${gcc:EpochVersion}), ${misc:Depends}
-Description: GCC support library (debug symbols)
- Debug symbols for the GCC support library.
-
Package: libx32gcc-4.7-dev
Architecture: amd64 i386
Section: libdevel
@@ -244,7 +101,7 @@ Description: GNU C compiler
This is the GNU C compiler, a fairly portable optimizing compiler for C.
Package: gcc-4.7-multilib
-Architecture: amd64 i386 illumos-amd64 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc x32
+Architecture: amd64 i386 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc sparc64 x32
Section: devel
Priority: optional
Depends: gcc-4.7-base (= ${gcc:Version}), gcc-4.7 (= ${gcc:Version}), ${dep:libcbiarchdev}, ${dep:libgccbiarchdev}, ${shlibs:Depends}, ${misc:Depends}
@@ -316,14 +173,6 @@ Description: GNU C preprocessor
This package has been separated from gcc for the benefit of those who
require the preprocessor but not the compiler.
-Package: cpp-4.7-doc
-Architecture: all
-Section: doc
-Priority: optional
-Depends: gcc-4.7-base (>= ${gcc:SoftVersion}), dpkg (>= 1.15.4) | install-info, ${misc:Depends}
-Description: Documentation for the GNU C preprocessor (cpp)
- Documentation for the GNU C preprocessor in info format.
-
Package: gcc-4.7-locales
Architecture: all
Section: devel
@@ -348,7 +197,7 @@ Description: GNU C++ compiler
This is the GNU C++ compiler, a fairly portable optimizing compiler for C++.
Package: g++-4.7-multilib
-Architecture: amd64 i386 illumos-amd64 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc x32
+Architecture: amd64 i386 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc sparc64 x32
Section: devel
Priority: optional
Depends: gcc-4.7-base (= ${gcc:Version}), g++-4.7 (= ${gcc:Version}), gcc-4.7-multilib (= ${gcc:Version}), ${dep:libcxxbiarchdev}, ${shlibs:Depends}, ${misc:Depends}
@@ -359,391 +208,6 @@ Description: GNU C++ compiler (multilib files)
On architectures with multilib support, the package contains files
and dependencies for the non-default multilib architecture(s).
-Package: libmudflap0
-Architecture: any
-Multi-Arch: same
-Pre-Depends: multiarch-support
-Breaks: ${multiarch:breaks}
-Provides: libmudflap0-armel [armel], libmudflap0-armhf [armhf]
-Section: libs
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
-Description: GCC mudflap shared support libraries
- The libmudflap libraries are used by GCC for instrumenting pointer and array
- dereferencing operations.
-
-Package: libmudflap0-dbg
-Architecture: any
-Multi-Arch: same
-Provides: libmudflap0-dbg-armel [armel], libmudflap0-dbg-armhf [armhf]
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libmudflap0 (= ${gcc:Version}), ${misc:Depends}
-Description: GCC mudflap shared support libraries (debug symbols)
- The libmudflap libraries are used by GCC for instrumenting pointer and array
- dereferencing operations.
-
-Package: lib32mudflap0
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
-Section: libs
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Replaces: libmudflap0 (<< 4.1)
-Conflicts: ${confl:lib32}
-Description: GCC mudflap shared support libraries (32bit)
- The libmudflap libraries are used by GCC for instrumenting pointer and array
- dereferencing operations.
-
-Package: lib32mudflap0-dbg
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), lib32mudflap0 (= ${gcc:Version}), ${misc:Depends}
-Description: GCC mudflap shared support libraries (32 bit debug symbols)
- The libmudflap libraries are used by GCC for instrumenting pointer and array
- dereferencing operations.
-
-Package: lib64mudflap0
-Architecture: i386 powerpc sparc s390 mips mipsel x32
-Section: libs
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Replaces: libmudflap0 (<< 4.1)
-Description: GCC mudflap shared support libraries (64bit)
- The libmudflap libraries are used by GCC for instrumenting pointer and array
- dereferencing operations.
-
-Package: lib64mudflap0-dbg
-Architecture: i386 powerpc sparc s390 mips mipsel x32
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), lib64mudflap0 (= ${gcc:Version}), ${misc:Depends}
-Description: GCC mudflap shared support libraries (64 bit debug symbols)
- The libmudflap libraries are used by GCC for instrumenting pointer and array
- dereferencing operations.
-
-Package: libn32mudflap0
-Architecture: mips mipsel
-Section: libs
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Replaces: libmudflap0 (<< 4.1)
-Description: GCC mudflap shared support libraries (n32)
- The libmudflap libraries are used by GCC for instrumenting pointer and array
- dereferencing operations.
-
-Package: libn32mudflap0-dbg
-Architecture: mips mipsel
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libn32mudflap0 (= ${gcc:Version}), ${misc:Depends}
-Description: GCC mudflap shared support libraries (n32 debug symbols)
- The libmudflap libraries are used by GCC for instrumenting pointer and array
- dereferencing operations.
-
-Package: libx32mudflap0
-Architecture: amd64 i386
-Section: libs
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Replaces: libmudflap0 (<< 4.1)
-Description: GCC mudflap shared support libraries (x32)
- The libmudflap libraries are used by GCC for instrumenting pointer and array
- dereferencing operations.
-
-Package: libx32mudflap0-dbg
-Architecture: amd64 i386
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libx32mudflap0 (= ${gcc:Version}), ${misc:Depends}
-Description: GCC mudflap shared support libraries (x32 debug symbols)
- The libmudflap libraries are used by GCC for instrumenting pointer and array
- dereferencing operations.
-
-Package: libmudflap0-4.7-dev
-Architecture: any
-Section: libdevel
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), libmudflap0 (>= ${gcc:Version}), ${dep:libcdev}, ${shlibs:Depends}, ${misc:Depends}
-Suggests: ${sug:libmudflapdev}
-Conflicts: libmudflap0-dev
-Description: GCC mudflap support libraries (development files)
- The libmudflap libraries are used by GCC for instrumenting pointer and array
- dereferencing operations.
- .
- This package contains the headers and the static libraries.
-
-Package: libssp0
-Architecture: any
-Multi-Arch: same
-Pre-Depends: multiarch-support
-Section: libs
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
-Description: GCC stack smashing protection library
- GCC can now emit code for protecting applications from stack-smashing attacks.
- The protection is realized by buffer overflow detection and reordering of
- stack variables to avoid pointer corruption.
-
-Package: lib32ssp0
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
-Section: libs
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Replaces: libssp0 (<< 4.1)
-Conflicts: ${confl:lib32}
-Description: GCC stack smashing protection library (32bit)
- GCC can now emit code for protecting applications from stack-smashing attacks.
- The protection is realized by buffer overflow detection and reordering of
- stack variables to avoid pointer corruption.
-
-Package: lib64ssp0
-Architecture: i386 powerpc sparc s390 mips mipsel x32
-Section: libs
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Replaces: libssp0 (<< 4.1)
-Description: GCC stack smashing protection library (64bit)
- GCC can now emit code for protecting applications from stack-smashing attacks.
- The protection is realized by buffer overflow detection and reordering of
- stack variables to avoid pointer corruption.
-
-Package: libn32ssp0
-Architecture: mips mipsel
-Section: libs
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Replaces: libssp0 (<< 4.1)
-Description: GCC stack smashing protection library (n32)
- GCC can now emit code for protecting applications from stack-smashing attacks.
- The protection is realized by buffer overflow detection and reordering of
- stack variables to avoid pointer corruption.
-
-Package: libx32ssp0
-Architecture: amd64 i386
-Section: libs
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Replaces: libssp0 (<< 4.1)
-Description: GCC stack smashing protection library (x32)
- GCC can now emit code for protecting applications from stack-smashing attacks.
- The protection is realized by buffer overflow detection and reordering of
- stack variables to avoid pointer corruption.
-
-Package: libhfssp0
-Architecture:
-Section: libs
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Description: GCC stack smashing protection library (hard float ABI)
- GCC can now emit code for protecting applications from stack-smashing attacks.
- The protection is realized by buffer overflow detection and reordering of
- stack variables to avoid pointer corruption.
-
-Package: libsfssp0
-Architecture:
-Section: libs
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Description: GCC stack smashing protection library (soft float ABI)
- GCC can now emit code for protecting applications from stack-smashing attacks.
- The protection is realized by buffer overflow detection and reordering of
- stack variables to avoid pointer corruption.
-
-Package: libgomp1
-Section: libs
-Architecture: any
-Multi-Arch: same
-Pre-Depends: multiarch-support
-Breaks: ${multiarch:breaks}
-Provides: libgomp1-armel [armel], libgomp1-armhf [armhf]
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
-Description: GCC OpenMP (GOMP) support library
- GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers
- in the GNU Compiler Collection.
-
-Package: libgomp1-dbg
-Architecture: any
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libgomp1 (= ${gcc:Version}), ${misc:Depends}
-Multi-Arch: same
-Provides: libgomp1-dbg-armel [armel], libgomp1-dbg-armhf [armhf]
-Description: GCC OpenMP (GOMP) support library (debug symbols)
- GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers
- in the GNU Compiler Collection.
-
-Package: lib32gomp1
-Section: libs
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Conflicts: ${confl:lib32}
-Description: GCC OpenMP (GOMP) support library (32bit)
- GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers
- in the GNU Compiler Collection.
-
-Package: lib32gomp1-dbg
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), lib32gomp1 (= ${gcc:Version}), ${misc:Depends}
-Description: GCC OpenMP (GOMP) support library (32 bit debug symbols)
- GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers
- in the GNU Compiler Collection.
-
-Package: lib64gomp1
-Section: libs
-Architecture: i386 powerpc sparc s390 mips mipsel x32
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Description: GCC OpenMP (GOMP) support library (64bit)
- GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers
- in the GNU Compiler Collection.
-
-Package: lib64gomp1-dbg
-Architecture: i386 powerpc sparc s390 mips mipsel x32
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), lib64gomp1 (= ${gcc:Version}), ${misc:Depends}
-Description: GCC OpenMP (GOMP) support library (64bit debug symbols)
- GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers
- in the GNU Compiler Collection.
-
-Package: libn32gomp1
-Section: libs
-Architecture: mips mipsel
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Description: GCC OpenMP (GOMP) support library (n32)
- GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers
- in the GNU Compiler Collection.
-
-Package: libn32gomp1-dbg
-Architecture: mips mipsel
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libn32gomp1 (= ${gcc:Version}), ${misc:Depends}
-Description: GCC OpenMP (GOMP) support library (n32 debug symbols)
- GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers
-
-Package: libx32gomp1
-Section: libs
-Architecture: amd64 i386
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Description: GCC OpenMP (GOMP) support library (x32)
- GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers
- in the GNU Compiler Collection.
-
-Package: libx32gomp1-dbg
-Architecture: amd64 i386
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libx32gomp1 (= ${gcc:Version}), ${misc:Depends}
-Description: GCC OpenMP (GOMP) support library (x32 debug symbols)
- GOMP is an implementation of OpenMP for the C, C++, and Fortran compilers
-
-Package: libquadmath0
-Section: libs
-Architecture: any
-Multi-Arch: same
-Pre-Depends: multiarch-support
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
-Description: GCC Quad-Precision Math Library
- A library, which provides quad-precision mathematical functions on targets
- supporting the __float128 datatype. The library is used to provide on such
- targets the REAL(16) type in the GNU Fortran compiler.
-
-Package: libquadmath0-dbg
-Architecture: any
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libquadmath0 (= ${gcc:Version}), ${misc:Depends}
-Multi-Arch: same
-Description: GCC Quad-Precision Math Library (debug symbols)
- A library, which provides quad-precision mathematical functions on targets
- supporting the __float128 datatype.
-
-Package: lib32quadmath0
-Section: libs
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Conflicts: ${confl:lib32}
-Description: GCC Quad-Precision Math Library (32bit)
- A library, which provides quad-precision mathematical functions on targets
- supporting the __float128 datatype. The library is used to provide on such
- targets the REAL(16) type in the GNU Fortran compiler.
-
-Package: lib32quadmath0-dbg
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), lib32quadmath0 (= ${gcc:Version}), ${misc:Depends}
-Description: GCC Quad-Precision Math Library (32 bit debug symbols)
- A library, which provides quad-precision mathematical functions on targets
- supporting the __float128 datatype.
-
-Package: lib64quadmath0
-Section: libs
-Architecture: i386 powerpc sparc s390 mips mipsel x32
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Description: GCC Quad-Precision Math Library (64bit)
- A library, which provides quad-precision mathematical functions on targets
- supporting the __float128 datatype. The library is used to provide on such
- targets the REAL(16) type in the GNU Fortran compiler.
-
-Package: lib64quadmath0-dbg
-Architecture: i386 powerpc sparc s390 mips mipsel x32
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), lib64quadmath0 (= ${gcc:Version}), ${misc:Depends}
-Description: GCC Quad-Precision Math Library (64bit debug symbols)
- A library, which provides quad-precision mathematical functions on targets
- supporting the __float128 datatype.
-
-Package: libn32quadmath0
-Section: libs
-Architecture: mips mipsel
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Description: GCC Quad-Precision Math Library (n32)
- A library, which provides quad-precision mathematical functions on targets
- supporting the __float128 datatype. The library is used to provide on such
- targets the REAL(16) type in the GNU Fortran compiler.
-
-Package: libn32quadmath0-dbg
-Architecture: mips mipsel
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libn32quadmath0 (= ${gcc:Version}), ${misc:Depends}
-Description: GCC Quad-Precision Math Library (n32 debug symbols)
- A library, which provides quad-precision mathematical functions on targets
- supporting the __float128 datatype.
-
-Package: libx32quadmath0
-Section: libs
-Architecture: amd64 i386
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Description: GCC Quad-Precision Math Library (x32)
- A library, which provides quad-precision mathematical functions on targets
- supporting the __float128 datatype. The library is used to provide on such
- targets the REAL(16) type in the GNU Fortran compiler.
-
-Package: libx32quadmath0-dbg
-Architecture: amd64 i386
-Section: debug
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libx32quadmath0 (= ${gcc:Version}), ${misc:Depends}
-Description: GCC Quad-Precision Math Library (x32 debug symbols)
- A library, which provides quad-precision mathematical functions on targets
- supporting the __float128 datatype.
-
Package: gobjc++-4.7
Architecture: any
Priority: optional
@@ -756,7 +220,7 @@ Description: GNU Objective-C++ compiler
gcc backend to generate optimized code.
Package: gobjc++-4.7-multilib
-Architecture: amd64 i386 illumos-amd64 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc x32
+Architecture: amd64 i386 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc sparc64 x32
Section: devel
Priority: optional
Depends: gcc-4.7-base (= ${gcc:Version}), gobjc++-4.7 (= ${gcc:Version}), g++-4.7-multilib (= ${gcc:Version}), gobjc-4.7-multilib (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
@@ -779,7 +243,7 @@ Description: GNU Objective-C compiler
gcc backend to generate optimized code.
Package: gobjc-4.7-multilib
-Architecture: amd64 i386 illumos-amd64 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc x32
+Architecture: amd64 i386 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc sparc64 x32
Section: devel
Priority: optional
Depends: gcc-4.7-base (= ${gcc:Version}), gobjc-4.7 (= ${gcc:Version}), gcc-4.7-multilib (= ${gcc:Version}), ${dep:libobjcbiarchdev}, ${shlibs:Depends}, ${misc:Depends}
@@ -812,7 +276,7 @@ Description: Runtime library for GNU Objective-C applications (64bit development
GNU ObjC applications.
Package: lib32objc-4.7-dev
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32
Section: libdevel
Priority: optional
Depends: gcc-4.7-base (= ${gcc:Version}), lib32gcc-4.7-dev (= ${gcc:Version}), lib32objc4 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
@@ -841,92 +305,6 @@ Description: Runtime library for GNU Objective-C applications (x32 development f
This package contains the headers and static library files needed to build
GNU ObjC applications.
-Package: libobjc4
-Section: libs
-Architecture: any
-Multi-Arch: same
-Pre-Depends: multiarch-support
-Provides: libobjc4-armel [armel], libobjc4-armhf [armhf]
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
-Description: Runtime library for GNU Objective-C applications
- Library needed for GNU ObjC applications linked against the shared library.
-
-Package: libobjc4-dbg
-Section: debug
-Architecture: any
-Multi-Arch: same
-Provides: libobjc4-dbg-armel [armel], libobjc4-dbg-armhf [armhf]
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libobjc4 (= ${gcc:Version}), libgcc1-dbg (>= ${libgcc:Version}), ${misc:Depends}
-Description: Runtime library for GNU Objective-C applications (debug symbols)
- Library needed for GNU ObjC applications linked against the shared library.
-
-Package: lib64objc4
-Section: libs
-Architecture: i386 powerpc sparc s390 mips mipsel x32
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Description: Runtime library for GNU Objective-C applications (64bit)
- Library needed for GNU ObjC applications linked against the shared library.
-
-Package: lib64objc4-dbg
-Section: debug
-Architecture: i386 powerpc sparc s390 mips mipsel x32
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), lib64objc4 (= ${gcc:Version}), lib64gcc1-dbg (>= ${gcc:EpochVersion}), ${misc:Depends}
-Description: Runtime library for GNU Objective-C applications (64 bit debug symbols)
- Library needed for GNU ObjC applications linked against the shared library.
-
-Package: lib32objc4
-Section: libs
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Conflicts: ${confl:lib32}
-Description: Runtime library for GNU Objective-C applications (32bit)
- Library needed for GNU ObjC applications linked against the shared library.
-
-Package: lib32objc4-dbg
-Section: debug
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), lib32objc4 (= ${gcc:Version}), lib32gcc1-dbg (>= ${gcc:EpochVersion}), ${misc:Depends}
-Description: Runtime library for GNU Objective-C applications (32 bit debug symbols)
- Library needed for GNU ObjC applications linked against the shared library.
-
-Package: libn32objc4
-Section: libs
-Architecture: mips mipsel
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Description: Runtime library for GNU Objective-C applications (n32)
- Library needed for GNU ObjC applications linked against the shared library.
-
-Package: libn32objc4-dbg
-Section: debug
-Architecture: mips mipsel
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libn32objc4 (= ${gcc:Version}), libn32gcc1-dbg (>= ${gcc:EpochVersion}), ${misc:Depends}
-Description: Runtime library for GNU Objective-C applications (n32 debug symbols)
- Library needed for GNU ObjC applications linked against the shared library.
-
-Package: libx32objc4
-Section: libs
-Architecture: amd64 i386
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Description: Runtime library for GNU Objective-C applications (x32)
- Library needed for GNU ObjC applications linked against the shared library.
-
-Package: libx32objc4-dbg
-Section: debug
-Architecture: amd64 i386
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libx32objc4 (= ${gcc:Version}), libx32gcc1-dbg (>= ${gcc:EpochVersion}), ${misc:Depends}
-Description: Runtime library for GNU Objective-C applications (x32 debug symbols)
- Library needed for GNU ObjC applications linked against the shared library.
-
Package: gfortran-4.7
Architecture: any
Priority: optional
@@ -939,7 +317,7 @@ Description: GNU Fortran compiler
gcc backend to generate optimized code.
Package: gfortran-4.7-multilib
-Architecture: amd64 i386 illumos-amd64 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc x32
+Architecture: amd64 i386 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc sparc64 x32
Section: devel
Priority: optional
Depends: gcc-4.7-base (= ${gcc:Version}), gfortran-4.7 (= ${gcc:Version}), gcc-4.7-multilib (= ${gcc:Version}), ${dep:libgfortranbiarchdev}, ${shlibs:Depends}, ${misc:Depends}
@@ -950,14 +328,6 @@ Description: GNU Fortran compiler (multilib files)
On architectures with multilib support, the package contains files
and dependencies for the non-default multilib architecture(s).
-Package: gfortran-4.7-doc
-Architecture: all
-Section: doc
-Priority: optional
-Depends: gcc-4.7-base (>= ${gcc:SoftVersion}), dpkg (>= 1.15.4) | install-info, ${misc:Depends}
-Description: Documentation for the GNU Fortran compiler (gfortran)
- Documentation for the GNU Fortran compiler in info format.
-
Package: libgfortran-4.7-dev
Architecture: any
Section: libdevel
@@ -982,7 +352,7 @@ Description: Runtime library for GNU Fortran applications (64bit development fil
GNU Fortran applications.
Package: lib32gfortran-4.7-dev
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32
Section: libdevel
Priority: optional
Depends: gcc-4.7-base (= ${gcc:Version}), lib32gfortran3 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
@@ -1014,103 +384,6 @@ Description: Runtime library for GNU Fortran applications (x32 development files
This package contains the headers and static library files needed to build
GNU Fortran applications.
-Package: libgfortran3
-Section: libs
-Architecture: any
-Multi-Arch: same
-Pre-Depends: multiarch-support
-Breaks: ${multiarch:breaks}
-Provides: libgfortran3-armel [armel], libgfortran3-armhf [armhf]
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
-Description: Runtime library for GNU Fortran applications
- Library needed for GNU Fortran applications linked against the
- shared library.
-
-Package: libgfortran3-dbg
-Section: debug
-Architecture: any
-Multi-Arch: same
-Provides: libgfortran3-dbg-armel [armel], libgfortran3-dbg-armhf [armhf]
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libgfortran3 (= ${gcc:Version}), libgcc1-dbg (>= ${libgcc:Version}), ${misc:Depends}
-Description: Runtime library for GNU Fortran applications (debug symbols)
- Library needed for GNU Fortran applications linked against the
- shared library.
-
-Package: lib64gfortran3
-Section: libs
-Architecture: i386 powerpc sparc s390 mips mipsel x32
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Description: Runtime library for GNU Fortran applications (64bit)
- Library needed for GNU Fortran applications linked against the
- shared library.
-
-Package: lib64gfortran3-dbg
-Section: debug
-Architecture: i386 powerpc sparc s390 mips mipsel x32
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), lib64gfortran3 (= ${gcc:Version}), ${misc:Depends}
-Description: Runtime library for GNU Fortran applications (64bit debug symbols)
- Library needed for GNU Fortran applications linked against the
- shared library.
-
-Package: lib32gfortran3
-Section: libs
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Conflicts: ${confl:lib32}
-Description: Runtime library for GNU Fortran applications (32bit)
- Library needed for GNU Fortran applications linked against the
- shared library.
-
-Package: lib32gfortran3-dbg
-Section: debug
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), lib32gfortran3 (= ${gcc:Version}), ${misc:Depends}
-Description: Runtime library for GNU Fortran applications (32 bit debug symbols)
- Library needed for GNU Fortran applications linked against the
- shared library.
-
-Package: libn32gfortran3
-Section: libs
-Architecture: mips mipsel
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Description: Runtime library for GNU Fortran applications (n32)
- Library needed for GNU Fortran applications linked against the
- shared library.
-
-Package: libn32gfortran3-dbg
-Section: debug
-Architecture: mips mipsel
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libn32gfortran3 (= ${gcc:Version}), ${misc:Depends}
-Description: Runtime library for GNU Fortran applications (n32 debug symbols)
- Library needed for GNU Fortran applications linked against the
- shared library.
-
-Package: libx32gfortran3
-Section: libs
-Architecture: amd64 i386
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
-Description: Runtime library for GNU Fortran applications (x32)
- Library needed for GNU Fortran applications linked against the
- shared library.
-
-Package: libx32gfortran3-dbg
-Section: debug
-Architecture: amd64 i386
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), libx32gfortran3 (= ${gcc:Version}), ${misc:Depends}
-Description: Runtime library for GNU Fortran applications (x32 debug symbols)
- Library needed for GNU Fortran applications linked against the
- shared library.
-
Package: gccgo-4.7
Architecture: any
Priority: optional
@@ -1123,7 +396,7 @@ Description: GNU Go compiler
by the gcc compiler. It uses the gcc backend to generate optimized code.
Package: gccgo-4.7-multilib
-Architecture: amd64 i386 illumos-amd64 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc x32
+Architecture: amd64 i386 kfreebsd-amd64 mips mipsel powerpc ppc64 s390 s390x sparc sparc64 x32
Section: devel
Priority: optional
Depends: gcc-4.7-base (= ${gcc:Version}), gccgo-4.7 (= ${gcc:Version}), gcc-4.7-multilib (= ${gcc:Version}), ${dep:libgobiarch}, ${shlibs:Depends}, ${misc:Depends}
@@ -1135,14 +408,6 @@ Description: GNU Go compiler (multilib files)
On architectures with multilib support, the package contains files
and dependencies for the non-default multilib architecture(s).
-Package: gccgo-4.7-doc
-Architecture: all
-Section: doc
-Priority: optional
-Depends: gcc-4.7-base (>= ${gcc:SoftVersion}), dpkg (>= 1.15.4) | install-info, ${misc:Depends}
-Description: Documentation for the GNU Go compiler (gccgo)
- Documentation for the GNU Go compiler in info format.
-
Package: libgo0
Section: libs
Architecture: any
@@ -1186,7 +451,7 @@ Description: Runtime library for GNU Go applications (64bit debug symbols)
Package: lib32go0
Section: libs
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32
Priority: optional
Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libcbiarch}, ${shlibs:Depends}, ${misc:Depends}
Conflicts: ${confl:lib32}
@@ -1196,7 +461,7 @@ Description: Runtime library for GNU Go applications (32bit)
Package: lib32go0-dbg
Section: debug
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32
Priority: extra
Depends: gcc-4.7-base (= ${gcc:Version}), lib32go0 (= ${gcc:Version}), ${misc:Depends}
Description: Runtime library for GNU Go applications (32 bit debug symbols)
@@ -1239,73 +504,6 @@ Description: Runtime library for GNU Go applications (x32 debug symbols)
Library needed for GNU Go applications linked against the
shared library.
-Package: libstdc++6
-Architecture: any
-Section: libs
-Priority: important
-Depends: gcc-4.7-base (= ${gcc:Version}), ${dep:libc}, ${shlibs:Depends}, ${misc:Depends}
-Multi-Arch: same
-Pre-Depends: multiarch-support
-Breaks: ${multiarch:breaks}
-Provides: libstdc++6-armel [armel], libstdc++6-armhf [armhf]
-Conflicts: scim (<< 1.4.2-1)
-Description: GNU Standard C++ Library v3
- This package contains an additional runtime library for C++ programs
- built with the GNU compiler.
- .
- libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
- was included up to g++-2.95. The first version of libstdc++-v3 appeared
- in g++-3.0.
-
-Package: lib32stdc++6
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
-Section: libs
-Priority: extra
-Depends: gcc-4.7-base (= ${gcc:Version}), lib32gcc1 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
-Conflicts: ${confl:lib32}
-Description: GNU Standard C++ Library v3 (32 bit Version)
- This package contains an additional runtime library for C++ programs
- built with the GNU compiler.
-
-Package: lib64stdc++6
-Architecture: i386 powerpc sparc s390 mips mipsel x32
-Section: libs
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), lib64gcc1 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
-Description: GNU Standard C++ Library v3 (64bit)
- This package contains an additional runtime library for C++ programs
- built with the GNU compiler.
- .
- libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
- was included up to g++-2.95. The first version of libstdc++-v3 appeared
- in g++-3.0.
-
-Package: libn32stdc++6
-Architecture: mips mipsel
-Section: libs
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), libn32gcc1 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
-Description: GNU Standard C++ Library v3 (n32)
- This package contains an additional runtime library for C++ programs
- built with the GNU compiler.
- .
- libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
- was included up to g++-2.95. The first version of libstdc++-v3 appeared
- in g++-3.0.
-
-Package: libx32stdc++6
-Architecture: amd64 i386
-Section: libs
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), libx32gcc1 (>= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
-Description: GNU Standard C++ Library v3 (x32)
- This package contains an additional runtime library for C++ programs
- built with the GNU compiler.
- .
- libstdc++-v3 is a complete rewrite from the previous libstdc++-v2, which
- was included up to g++-2.95. The first version of libstdc++-v3 appeared
- in g++-3.0.
-
Package: libstdc++6-4.7-dev
Architecture: any
Multi-Arch: same
@@ -1350,7 +548,7 @@ Description: GNU Standard C++ Library v3 (debugging files)
debugging symbols.
Package: lib32stdc++6-4.7-dev
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32
Section: libdevel
Priority: optional
Depends: gcc-4.7-base (= ${gcc:Version}), lib32gcc-4.7-dev (= ${gcc:Version}), lib32stdc++6 (>= ${gcc:Version}), libstdc++6-4.7-dev (= ${gcc:Version}), ${misc:Depends}
@@ -1365,7 +563,7 @@ Description: GNU Standard C++ Library v3 (development files)
in g++-3.0.
Package: lib32stdc++6-4.7-dbg
-Architecture: amd64 ppc64 kfreebsd-amd64 s390x x32 illumos-amd64
+Architecture: amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32
Section: debug
Priority: extra
Depends: gcc-4.7-base (= ${gcc:Version}), lib32stdc++6 (>= ${gcc:Version}), libstdc++6-4.7-dev (= ${gcc:Version}), lib32gcc1-dbg (>= ${gcc:EpochVersion}), ${shlibs:Depends}, ${misc:Depends}
@@ -1472,30 +670,6 @@ Description: GCC soft-floating-point gcc libraries (ARM)
These are versions of basic static libraries such as libgcc.a compiled
with the -msoft-float option, for CPUs without a floating-point unit.
-Package: fixincludes
-Architecture: any
-Priority: optional
-Depends: gcc-4.7-base (= ${gcc:Version}), gcc-4.7 (= ${gcc:Version}), ${shlibs:Depends}, ${misc:Depends}
-Description: Fix non-ANSI header files
- FixIncludes was created to fix non-ANSI system header files. Many
- system manufacturers supply proprietary headers that are not ANSI compliant.
- The GNU compilers cannot compile non-ANSI headers. Consequently, the
- FixIncludes shell script was written to fix the header files.
- .
- Not all packages with header files are installed on the system, when the
- package is built, so we make fixincludes available at build time of other
- packages, such that checking tools like lintian can make use of it.
-
-Package: gcc-4.7-doc
-Architecture: all
-Section: doc
-Priority: optional
-Depends: gcc-4.7-base (>= ${gcc:SoftVersion}), dpkg (>= 1.15.4) | install-info, ${misc:Depends}
-Conflicts: gcc-docs (<< 2.95.2)
-Replaces: gcc (<=2.7.2.3-4.3), gcc-docs (<< 2.95.2)
-Description: Documentation for the GNU compilers (gcc, gobjc, g++)
- Documentation for the GNU compilers in info format.
-
Package: gcc-4.7-source
Architecture: all
Priority: optional
diff --git a/debian/control.m4 b/debian/control.m4
index 963ec0a..c82ca6a 100644
--- a/debian/control.m4
+++ b/debian/control.m4
@@ -50,7 +50,7 @@ Uploaders: Iain Buclaw <ibuclaw@ubuntu.com>, Matthias Klose <doko@debian.org>
', `dnl
Uploaders: Matthias Klose <doko@debian.org>
')dnl SRCNAME
-Standards-Version: 3.9.4
+Standards-Version: 3.9.5
ifdef(`TARGET',`dnl cross
Build-Depends: DPKG_BUILD_DEP debhelper (>= 5.0.62),
LIBC_BUILD_DEP, LIBC_BIARCH_BUILD_DEP
@@ -66,7 +66,7 @@ Build-Depends: debhelper (>= 5.0.62), gcc-4.8-base | gcc-4.7-base,
AUTO_BUILD_DEP AUTOGEN_BUILD_DEP
libunwind7-dev (>= 0.98.5-6) [ia64], libatomic-ops-dev [ia64],
zlib1g-dev, gawk, lzma, xz-utils, patchutils,
- binutils-hppa64 (>= BINUTILSV) [hppa],
+ binutils-hppa64 (>= BINUTILSBDV) [hppa],
gperf (>= 3.0.1), bison (>= 1:2.3), flex, gettext,
texinfo (>= 4.3), sharutils,
procps, FORTRAN_BUILD_DEP JAVA_BUILD_DEP GNAT_BUILD_DEP GO_BUILD_DEP GDC_BUILD_DEP SPU_BUILD_DEP
@@ -74,7 +74,7 @@ Build-Depends: debhelper (>= 5.0.62), gcc-4.8-base | gcc-4.7-base,
CHECK_BUILD_DEP realpath (>= 1.9.12) | coreutils (>= 8.15), chrpath, lsb-release, quilt
Build-Depends-Indep: LIBSTDCXX_BUILD_INDEP JAVA_BUILD_INDEP
')dnl
-Build-Conflicts: binutils-gold
+Build-Conflicts: binutils-gold (<< 2.23.52.20130727)
ifelse(regexp(SRCNAME, `gnat'),0,`dnl
Homepage: http://gcc.gnu.org/
', regexp(SRCNAME, `gdc'),0,`dnl
diff --git a/debian/locale-gen b/debian/locale-gen
index 0dab8e1..c0d6fa5 100755
--- a/debian/locale-gen
+++ b/debian/locale-gen
@@ -42,7 +42,7 @@ it_IT ISO-8859-1
ja_JP.eucjp EUC-JP
se_NO.UTF-8 UTF-8
ta_IN UTF-8
-zh_TW BIG5
+zh_TW UTF-8
EOF
echo "Generation complete."
diff --git a/debian/patches/arm-multilib-soft-cross.diff b/debian/patches/arm-multilib-soft-cross.diff
new file mode 100644
index 0000000..bad15d0
--- /dev/null
+++ b/debian/patches/arm-multilib-soft-cross.diff
@@ -0,0 +1,27 @@
+# DP: ARM hard/soft float multilib support
+
+Index: b/src/gcc/config/arm/t-linux-eabi
+===================================================================
+--- a/src/gcc/config/arm/t-linux-eabi
++++ b/src/gcc/config/arm/t-linux-eabi
+@@ -21,6 +21,20 @@
+ MULTILIB_OPTIONS =
+ MULTILIB_DIRNAMES =
+
++ifeq ($(with_float),hard)
++MULTILIB_OPTIONS = mfloat-abi=soft/mfloat-abi=hard
++MULTILIB_DIRNAMES = sf hf
++MULTILIB_EXCEPTIONS =
++MULTILIB_MATCHES = mfloat-abi?hard=mhard-float mfloat-abi?soft=msoft-float mfloat-abi?soft=mfloat-abi?softfp
++MULTILIB_OSDIRNAMES = ../libsf:arm-linux-gnueabi ../lib:arm-linux-gnueabihf
++else
++MULTILIB_OPTIONS = mfloat-abi=soft/mfloat-abi=hard
++MULTILIB_DIRNAMES = sf hf
++MULTILIB_EXCEPTIONS =
++MULTILIB_MATCHES = mfloat-abi?hard=mhard-float mfloat-abi?soft=msoft-float mfloat-abi?soft=mfloat-abi?softfp
++MULTILIB_OSDIRNAMES = ../lib:arm-linux-gnueabi ../libhf:arm-linux-gnueabihf
++endif
++
+ #MULTILIB_OPTIONS += mcpu=fa606te/mcpu=fa626te/mcpu=fmp626/mcpu=fa726te
+ #MULTILIB_DIRNAMES += fa606te fa626te fmp626 fa726te
+ #MULTILIB_EXCEPTIONS += *mthumb/*mcpu=fa606te *mthumb/*mcpu=fa626te *mthumb/*mcpu=fmp626 *mthumb/*mcpu=fa726te*
diff --git a/debian/patches/arm-multilib-softfp-cross.diff b/debian/patches/arm-multilib-softfp-cross.diff
new file mode 100644
index 0000000..89ed142
--- /dev/null
+++ b/debian/patches/arm-multilib-softfp-cross.diff
@@ -0,0 +1,27 @@
+# DP: ARM hard/softfp float multilib support
+
+Index: b/src/gcc/config/arm/t-linux-eabi
+===================================================================
+--- a/src/gcc/config/arm/t-linux-eabi 2011-01-03 20:52:22.000000000 +0000
++++ b/src/gcc/config/arm/t-linux-eabi 2011-08-21 21:08:47.583351817 +0000
+@@ -24,6 +24,20 @@
+ MULTILIB_OPTIONS =
+ MULTILIB_DIRNAMES =
+
++ifeq ($(with_float),hard)
++MULTILIB_OPTIONS = mfloat-abi=softfp/mfloat-abi=hard
++MULTILIB_DIRNAMES = sf hf
++MULTILIB_EXCEPTIONS =
++MULTILIB_MATCHES = mfloat-abi?hard=mhard-float mfloat-abi?softfp=msoft-float mfloat-abi?softfp=mfloat-abi?soft
++MULTILIB_OSDIRNAMES = ../libsf:arm-linux-gnueabi ../lib:arm-linux-gnueabihf
++else
++MULTILIB_OPTIONS = mfloat-abi=softfp/mfloat-abi=hard
++MULTILIB_DIRNAMES = sf hf
++MULTILIB_EXCEPTIONS =
++MULTILIB_MATCHES = mfloat-abi?hard=mhard-float mfloat-abi?softfp=msoft-float mfloat-abi?softfp=mfloat-abi?soft
++MULTILIB_OSDIRNAMES = ../lib:arm-linux-gnueabi ../libhf:arm-linux-gnueabihf
++endif
++
+ #MULTILIB_OPTIONS += mcpu=fa606te/mcpu=fa626te/mcpu=fmp626/mcpu=fa726te
+ #MULTILIB_DIRNAMES += fa606te fa626te fmp626 fa726te
+ #MULTILIB_EXCEPTIONS += *mthumb/*mcpu=fa606te *mthumb/*mcpu=fa626te *mthumb/*mcpu=fmp626 *mthumb/*mcpu=fa726te*
diff --git a/debian/patches/gcc-linaro-doc.diff b/debian/patches/gcc-linaro-doc.diff
index c9f2d6f..5903ab4 100644
--- a/debian/patches/gcc-linaro-doc.diff
+++ b/debian/patches/gcc-linaro-doc.diff
@@ -1,4 +1,4 @@
-# DP: Changes for the Linaro 4.7-2013.05 release (documentation).
+# DP: Changes for the Linaro 4.7-2014.01 release (documentation).
--- a/src/gcc/doc/extend.texi
+++ b/src/gcc/doc/extend.texi
@@ -95,7 +95,7 @@
.\"
.IX Title "FSF-FUNDING 7"
-.TH FSF-FUNDING 7 "2013-04-11" "gcc-4.7.3" "GNU"
-+.TH FSF-FUNDING 7 "2013-05-08" "gcc-4.7.4" "GNU"
++.TH FSF-FUNDING 7 "2014-01-07" "gcc-4.7.4" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -141,7 +141,7 @@
.\"
.IX Title "GFDL 7"
-.TH GFDL 7 "2013-04-11" "gcc-4.7.3" "GNU"
-+.TH GFDL 7 "2013-05-08" "gcc-4.7.4" "GNU"
++.TH GFDL 7 "2014-01-07" "gcc-4.7.4" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -199,7 +199,7 @@
.\"
.IX Title "GPL 7"
-.TH GPL 7 "2013-04-11" "gcc-4.7.3" "GNU"
-+.TH GPL 7 "2013-05-08" "gcc-4.7.4" "GNU"
++.TH GPL 7 "2014-01-07" "gcc-4.7.4" "GNU"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -245,6 +245,19 @@
.IX Subsection "How to Apply These Terms to Your New Programs"
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
+--- a/src/gcc/doc/implement-cxx.texi
++++ b/src/gcc/doc/implement-cxx.texi
+@@ -10,8 +10,8 @@
+ A conforming implementation of ISO C++ is required to document its
+ choice of behavior in each of the areas that are designated
+ ``implementation defined''. The following lists all such areas,
+-along with the section numbers from the ISO/IEC 14822:1998 and ISO/IEC
+-14822:2003 standards. Some areas are only implementation-defined in
++along with the section numbers from the ISO/IEC 14882:1998 and ISO/IEC
++14882:2003 standards. Some areas are only implementation-defined in
+ one version of the standard.
+
+ Some choices depend on the externally determined ABI for the platform
--- a/src/gcc/doc/install.texi
+++ b/src/gcc/doc/install.texi
@@ -1047,6 +1047,15 @@
@@ -309,7 +322,23 @@
@emph{AVR Options}
@gccoptlist{-mmcu=@var{mcu} -maccumulate-args -mbranch-cost=@var{cost} @gol
-@@ -6237,8 +6249,8 @@
+@@ -1429,11 +1441,13 @@
+ for the plugin called @var{name}.
+
+ @item -fdump-ada-spec@r{[}-slim@r{]}
+-For C and C++ source and include files, generate corresponding Ada
+-specs. @xref{Generating Ada Bindings for C and C++ headers,,, gnat_ugn,
++@opindex fdump-ada-spec
++For C and C++ source and include files, generate corresponding Ada specs.
++@xref{Generating Ada Bindings for C and C++ headers,,, gnat_ugn,
+ GNAT User's Guide}, which provides detailed documentation on this feature.
+
+ @item -fdump-go-spec=@var{file}
++@opindex fdump-go-spec
+ For input files in any language, generate corresponding Go
+ declarations in @var{file}. This generates Go @code{const},
+ @code{type}, @code{var}, and @code{func} declarations which may be a
+@@ -6237,8 +6251,8 @@
Optimize yet more. @option{-O3} turns on all optimizations specified
by @option{-O2} and also turns on the @option{-finline-functions},
@option{-funswitch-loops}, @option{-fpredictive-commoning},
@@ -320,7 +349,7 @@
@item -O0
@opindex O0
-@@ -7033,6 +7045,11 @@
+@@ -7033,6 +7047,11 @@
Perform partial redundancy elimination (PRE) on trees. This flag is
enabled by default at @option{-O2} and @option{-O3}.
@@ -332,7 +361,7 @@
@item -ftree-forwprop
@opindex ftree-forwprop
Perform forward propagation on trees. This flag is enabled by default
-@@ -7428,6 +7445,24 @@
+@@ -7428,6 +7447,24 @@
variable names which more closely resemble the original variables. This flag
is enabled by default at @option{-O} and higher.
@@ -357,7 +386,7 @@
@item -ftree-ter
@opindex ftree-ter
Perform temporary expression replacement during the SSA->normal phase. Single
-@@ -10329,6 +10364,7 @@
+@@ -10329,6 +10366,7 @@
@c in Machine Dependent Options
@menu
@@ -365,7 +394,7 @@
* Adapteva Epiphany Options::
* ARM Options::
* AVR Options::
-@@ -10537,6 +10573,125 @@
+@@ -10537,6 +10575,125 @@
@end table
@@ -491,7 +520,7 @@
@node ARM Options
@subsection ARM Options
@cindex ARM options
-@@ -10948,6 +11103,11 @@
+@@ -10948,6 +11105,11 @@
preprocessor symbol @code{__ARM_FEATURE_UNALIGNED} will also be
defined.
@@ -693,7 +722,43 @@
ARM Target supports @code{-mfpu=neon-fp16 -mfloat-abi=softfp} or compatible
--- a/src/gcc/doc/tm.texi
+++ b/src/gcc/doc/tm.texi
-@@ -9495,6 +9495,10 @@
+@@ -700,6 +700,14 @@
+ Targets may provide a string object type that can be used within and between C, C++ and their respective Objective-C dialects. A string object might, for example, embed encoding and length information. These objects are considered opaque to the compiler and handled as references. An ideal implementation makes the composition of the string object match that of the Objective-C @code{NSString} (@code{NXString} for GNUStep), allowing efficient interworking between C-only and Objective-C code. If a target implements string objects then this hook should return a reference to such an object constructed from the normal `C' string representation provided in @var{string}. At present, the hook is used by Objective-C only, to obtain a common-format string object when the target provides one.
+ @end deftypefn
+
++@deftypefn {C Target Hook} void TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE (const char *@var{classname})
++Declare that Objective C class @var{classname} is referenced by the current TU.
++@end deftypefn
++
++@deftypefn {C Target Hook} void TARGET_OBJC_DECLARE_CLASS_DEFINITION (const char *@var{classname})
++Declare that Objective C class @var{classname} is defined by the current TU.
++@end deftypefn
++
+ @deftypefn {C Target Hook} bool TARGET_STRING_OBJECT_REF_TYPE_P (const_tree @var{stringref})
+ If a target implements string objects then this hook should return @code{true} if @var{stringref} is a valid reference to such an object.
+ @end deftypefn
+@@ -8258,20 +8266,6 @@
+ macro to provide more human-readable names.
+ @end defmac
+
+-@defmac ASM_DECLARE_CLASS_REFERENCE (@var{stream}, @var{name})
+-A C statement (sans semicolon) to output to the stdio stream
+-@var{stream} commands to declare that the label @var{name} is an
+-Objective-C class reference. This is only needed for targets whose
+-linkers have special support for NeXT-style runtimes.
+-@end defmac
+-
+-@defmac ASM_DECLARE_UNRESOLVED_REFERENCE (@var{stream}, @var{name})
+-A C statement (sans semicolon) to output to the stdio stream
+-@var{stream} commands to declare that the label @var{name} is an
+-unresolved Objective-C class reference. This is only needed for targets
+-whose linkers have special support for NeXT-style runtimes.
+-@end defmac
+-
+ @node Initialization
+ @subsection How Initialization Functions Are Handled
+ @cindex initialization routines
+@@ -9495,6 +9489,10 @@
True if the @code{.debug_pubtypes} and @code{.debug_pubnames} sections should be emitted. These sections are not used on most platforms, and in particular GDB does not use them.
@end deftypevr
@@ -706,7 +771,39 @@
@end deftypevr
--- a/src/gcc/doc/tm.texi.in
+++ b/src/gcc/doc/tm.texi.in
-@@ -9388,6 +9388,8 @@
+@@ -696,6 +696,10 @@
+
+ @hook TARGET_OBJC_CONSTRUCT_STRING_OBJECT
+
++@hook TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE
++
++@hook TARGET_OBJC_DECLARE_CLASS_DEFINITION
++
+ @hook TARGET_STRING_OBJECT_REF_TYPE_P
+
+ @hook TARGET_CHECK_STRING_OBJECT_FORMAT_ARG
+@@ -8157,20 +8161,6 @@
+ macro to provide more human-readable names.
+ @end defmac
+
+-@defmac ASM_DECLARE_CLASS_REFERENCE (@var{stream}, @var{name})
+-A C statement (sans semicolon) to output to the stdio stream
+-@var{stream} commands to declare that the label @var{name} is an
+-Objective-C class reference. This is only needed for targets whose
+-linkers have special support for NeXT-style runtimes.
+-@end defmac
+-
+-@defmac ASM_DECLARE_UNRESOLVED_REFERENCE (@var{stream}, @var{name})
+-A C statement (sans semicolon) to output to the stdio stream
+-@var{stream} commands to declare that the label @var{name} is an
+-unresolved Objective-C class reference. This is only needed for targets
+-whose linkers have special support for NeXT-style runtimes.
+-@end defmac
+-
+ @node Initialization
+ @subsection How Initialization Functions Are Handled
+ @cindex initialization routines
+@@ -9388,6 +9378,8 @@
@hook TARGET_WANT_DEBUG_PUB_SECTIONS
@@ -715,3 +812,98 @@
@hook TARGET_DELAY_SCHED2
@hook TARGET_DELAY_VARTRACK
+--- a/src/gcc/fortran/intrinsic.texi
++++ b/src/gcc/fortran/intrinsic.texi
+@@ -9209,7 +9209,7 @@
+ @item @emph{Arguments}:
+ @multitable @columnfractions .15 .70
+ @item @var{X} @tab Shall be of type @code{REAL}.
+-@item @var{S} @tab (Optional) shall be of type @code{REAL} and
++@item @var{S} @tab Shall be of type @code{REAL} and
+ not equal to zero.
+ @end multitable
+
+@@ -10134,9 +10134,12 @@
+ Restarts or queries the state of the pseudorandom number generator used by
+ @code{RANDOM_NUMBER}.
+
+-If @code{RANDOM_SEED} is called without arguments, it is initialized to
+-a default state. The example below shows how to initialize the random
+-seed based on the system's time.
++If @code{RANDOM_SEED} is called without arguments, it is initialized
++to a default state. The example below shows how to initialize the
++random seed with a varying seed in order to ensure a different random
++number sequence for each invocation of the program. Note that setting
++any of the seed values to zero should be avoided as it can result in
++poor quality random numbers being generated.
+
+ @item @emph{Standard}:
+ Fortran 95 and later
+@@ -10164,20 +10167,53 @@
+
+ @item @emph{Example}:
+ @smallexample
+-SUBROUTINE init_random_seed()
+- INTEGER :: i, n, clock
+- INTEGER, DIMENSION(:), ALLOCATABLE :: seed
+-
+- CALL RANDOM_SEED(size = n)
+- ALLOCATE(seed(n))
+-
+- CALL SYSTEM_CLOCK(COUNT=clock)
+-
+- seed = clock + 37 * (/ (i - 1, i = 1, n) /)
+- CALL RANDOM_SEED(PUT = seed)
+-
+- DEALLOCATE(seed)
+-END SUBROUTINE
++subroutine init_random_seed()
++ implicit none
++ integer, allocatable :: seed(:)
++ integer :: i, n, un, istat, dt(8), pid, t(2), s
++ integer(8) :: count, tms
++
++ call random_seed(size = n)
++ allocate(seed(n))
++ ! First try if the OS provides a random number generator
++ open(newunit=un, file="/dev/urandom", access="stream", &
++ form="unformatted", action="read", status="old", iostat=istat)
++ if (istat == 0) then
++ read(un) seed
++ close(un)
++ else
++ ! Fallback to XOR:ing the current time and pid. The PID is
++ ! useful in case one launches multiple instances of the same
++ ! program in parallel.
++ call system_clock(count)
++ if (count /= 0) then
++ t = transfer(count, t)
++ else
++ call date_and_time(values=dt)
++ tms = (dt(1) - 1970) * 365_8 * 24 * 60 * 60 * 1000 &
++ + dt(2) * 31_8 * 24 * 60 * 60 * 1000 &
++ + dt(3) * 24 * 60 * 60 * 60 * 1000 &
++ + dt(5) * 60 * 60 * 1000 &
++ + dt(6) * 60 * 1000 + dt(7) * 1000 &
++ + dt(8)
++ t = transfer(tms, t)
++ end if
++ s = ieor(t(1), t(2))
++ pid = getpid() + 1099279 ! Add a prime
++ s = ieor(s, pid)
++ if (n >= 3) then
++ seed(1) = t(1) + 36269
++ seed(2) = t(2) + 72551
++ seed(3) = pid
++ if (n > 3) then
++ seed(4:) = s + 37 * (/ (i, i = 0, n - 4) /)
++ end if
++ else
++ seed = s + 37 * (/ (i, i = 0, n - 1 ) /)
++ end if
++ end if
++ call random_seed(put=seed)
++end subroutine init_random_seed
+ @end smallexample
+
+ @item @emph{See also}:
diff --git a/debian/patches/gcc-linaro.diff b/debian/patches/gcc-linaro.diff
index e25f258..98b69b2 100644
--- a/debian/patches/gcc-linaro.diff
+++ b/debian/patches/gcc-linaro.diff
@@ -1,8 +1,151 @@
-# DP: Changes for the Linaro 4.7-2013.05 release.
+# DP: Changes for the Linaro 4.7-2014.01 release.
--- a/src/ChangeLog.linaro
+++ b/src/ChangeLog.linaro
-@@ -0,0 +1,2535 @@
+@@ -0,0 +1,2678 @@
++2014-01-13 Christophe Lyon <christophe.lyon@linaro.org>
++
++ GCC Linaro 4.7-2014.01 released.
++
++ gcc/
++ * LINARO-VERSION: Update.
++
++2014-01-07 Christophe lyon <christophe.lyon@linaro.org>
++
++ Merge from FSF GCC 4.7.4 (svn branches/gcc-4_7-branch 206380).
++
++2014-01-06 Christophe Lyon <christophe.lyon@linaro.org>
++
++ gcc/
++ * LINARO-VERSION: Bump version.
++
++2013-12-20 Michael Collison <michael.collison@linaro.org>
++
++ GCC Linaro 4.7-2013.12 released.
++
++ gcc/
++ * LINARO-VERSION: Update.
++
++2013-12-20 Christophe Lyon <christophe.lyon@linaro.org>
++
++ Backport from trunk 201879.
++ 2013-08-20 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org>
++
++ * config/arm/linux-elf.h (MULTILIB_DEFAULTS): Remove definition.
++ * config/arm/t-linux-eabi (MULTILIB_OPTIONS): Document association
++ with MULTLIB_DEFAULTS.
++
++ Needed modification for backport:
++ * config/arm/linux-eabi.h (MULTILIB_DEFAULTS): Force un-definition.
++ * config/arm/linux-elf.h (MULTILIB_DEFAULTS): Not modified.
++
++2013-12-07 Christophe lyon <christophe.lyon@linaro.org>
++
++ Merge from FSF GCC 4.7.4 (svn branches/gcc-4_7-branch 205768).
++
++2013-11-14 Christophe Lyon <christophe.lyon@linaro.org>
++
++ gcc/
++ * LINARO-VERSION: Bump version.
++
++2013-11-14 Christophe Lyon <christophe.lyon@linaro.org>
++
++ GCC Linaro 4.7-2013.11 released.
++
++ gcc/
++ * LINARO-VERSION: Update.
++
++2013-11-11 Christophe lyon <christophe.lyon@linaro.org>
++
++ Merge from FSF GCC 4.7.4 (svn branches/gcc-4_7-branch 204656).
++
++2013-10-15 Christophe Lyon <christophe.lyon@linaro.org>
++
++ gcc/
++ * LINARO-VERSION: Bump version.
++
++2013-10-15 Christophe Lyon <christophe.lyon@linaro.org>
++
++ GCC Linaro 4.7-2013.10 released.
++
++ gcc/
++ * LINARO-VERSION: Update.
++
++2013-10-14 Christophe lyon <christophe.lyon@linaro.org>
++
++ Merge from FSF GCC 4.7.4 (svn branches/gcc-4_7-branch 203509).
++
++2013-10-08 Matthias Klose <doko@ubuntu.com>
++
++ gcc/
++ * config/aarch64/aarch64-protos.h (aarch64_regno_regclass): Fix
++ prototype.
++ * config/aarch64/aarch64.c (aarch64_regno_regclass): Likewise.
++
++2013-09-10 Christophe Lyon <christophe.lyon@linaro.org>
++
++ gcc/
++ * LINARO-VERSION: Bump version.
++
++2013-09-10 Christophe Lyon <christophe.lyon@linaro.org>
++
++ GCC Linaro 4.7-2013.09 released.
++
++ gcc/
++ * LINARO-VERSION: Update.
++
++2013-09-03 Christophe lyon <christophe.lyon@linaro.org>
++
++ Merge from FSF GCC 4.7.4 (svn branches/gcc-4_7-branch 202210).
++
++2013-08-15 Yvan Roux <yvan.roux@linaro.org>
++
++ gcc/
++ * LINARO-VERSION: Bump version.
++
++2013-08-15 Yvan Roux <yvan.roux@linaro.org>
++
++ GCC Linaro 4.7-2013.08 released.
++
++ gcc/
++ * LINARO-VERSION: Update.
++
++2013-08-12 Yvan Roux <yvan.roux@linaro.org>
++
++ Merge from FSF GCC 4.7.4 (svn branches/gcc-4_7-branch 201655).
++
++2013-07-03 Yvan Roux <yvan.roux@linaro.org>
++
++ gcc/
++ * LINARO-VERSION: Bump version.
++
++2013-07-03 Yvan Roux <yvan.roux@linaro.org>
++
++ GCC Linaro 4.7-2013.07 released.
++
++ gcc/
++ * LINARO-VERSION: Update.
++
++2013-06-26 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org>
++
++ Merge from FSF GCC 4.7.4 (svn branches/gcc-4_7-branch 200408).
++
++2013-06-14 Rob Savoye <rob.savoye@linaro.org>
++
++ GCC Linaro 4.7-2013.06-1 released.
++
++ gcc/
++ * LINARO-VERSION: Update.
++
++2013-06-03 Christophe lyon <christophe.lyon@linaro.org>
++
++ Merge from FSF GCC 4.7.4 (svn branches/gcc-4_7-branch 199594).
++
++2013-05-14 Yvan Roux <yvan.roux@linaro.org>
++
++ gcc/
++ * LINARO-VERSION: Bump version.
++
+2013-05-14 Yvan Roux <yvan.roux@linaro.org>
+
+ GCC Linaro 4.7-2013.05 released.
@@ -2538,6 +2681,10 @@
+ Merge from FSF trunk SVN revision 184223.
+
+Imported GCC from FSF trunk SVN revision 183796.
+--- a/src/LAST_UPDATED
++++ b/src/LAST_UPDATED
+@@ -1 +0,0 @@
+-Obtained from SVN: tags/gcc_4_7_3_release revision 197739
--- a/src/config.guess
+++ b/src/config.guess
@@ -2,9 +2,9 @@
@@ -2887,224 +3034,481 @@
;;
m68*-cisco)
os=-aout
---- a/src/gcc/builtins.c
-+++ b/src/gcc/builtins.c
-@@ -4626,13 +4626,15 @@
- return result;
- }
-
--/* Expand a call to a bswap builtin with argument ARG0. MODE
-- is the mode to expand with. */
-+/* Expand a call to bswap builtin in EXP.
-+ Return NULL_RTX if a normal call should be emitted rather than expanding the
-+ function in-line. If convenient, the result should be placed in TARGET.
-+ SUBTARGET may be used as the target for computing one of EXP's operands. */
-
- static rtx
--expand_builtin_bswap (tree exp, rtx target, rtx subtarget)
-+expand_builtin_bswap (enum machine_mode target_mode, tree exp, rtx target,
-+ rtx subtarget)
- {
-- enum machine_mode mode;
- tree arg;
- rtx op0;
-
-@@ -4640,14 +4642,18 @@
- return NULL_RTX;
-
- arg = CALL_EXPR_ARG (exp, 0);
-- mode = TYPE_MODE (TREE_TYPE (arg));
-- op0 = expand_expr (arg, subtarget, VOIDmode, EXPAND_NORMAL);
-+ op0 = expand_expr (arg,
-+ subtarget && GET_MODE (subtarget) == target_mode
-+ ? subtarget : NULL_RTX,
-+ target_mode, EXPAND_NORMAL);
-+ if (GET_MODE (op0) != target_mode)
-+ op0 = convert_to_mode (target_mode, op0, 1);
-
-- target = expand_unop (mode, bswap_optab, op0, target, 1);
-+ target = expand_unop (target_mode, bswap_optab, op0, target, 1);
-
- gcc_assert (target);
-
-- return convert_to_mode (mode, target, 0);
-+ return convert_to_mode (target_mode, target, 1);
- }
-
- /* Expand a call to a unary builtin in EXP.
-@@ -6084,10 +6090,10 @@
- expand_stack_restore (CALL_EXPR_ARG (exp, 0));
- return const0_rtx;
-
-+ case BUILT_IN_BSWAP16:
- case BUILT_IN_BSWAP32:
- case BUILT_IN_BSWAP64:
-- target = expand_builtin_bswap (exp, target, subtarget);
--
-+ target = expand_builtin_bswap (target_mode, exp, target, subtarget);
- if (target)
- return target;
- break;
-@@ -8176,7 +8182,7 @@
- return NULL_TREE;
- }
-
--/* Fold function call to builtin_bswap and the long and long long
-+/* Fold function call to builtin_bswap and the short, long and long long
- variants. Return NULL_TREE if no simplification can be made. */
- static tree
- fold_builtin_bswap (tree fndecl, tree arg)
-@@ -8189,15 +8195,15 @@
- {
- HOST_WIDE_INT hi, width, r_hi = 0;
- unsigned HOST_WIDE_INT lo, r_lo = 0;
-- tree type;
-+ tree type = TREE_TYPE (TREE_TYPE (fndecl));
-
-- type = TREE_TYPE (arg);
- width = TYPE_PRECISION (type);
- lo = TREE_INT_CST_LOW (arg);
- hi = TREE_INT_CST_HIGH (arg);
-
- switch (DECL_FUNCTION_CODE (fndecl))
- {
-+ case BUILT_IN_BSWAP16:
- case BUILT_IN_BSWAP32:
- case BUILT_IN_BSWAP64:
- {
-@@ -8227,9 +8233,9 @@
- }
-
- if (width < HOST_BITS_PER_WIDE_INT)
-- return build_int_cst (TREE_TYPE (TREE_TYPE (fndecl)), r_lo);
-+ return build_int_cst (type, r_lo);
- else
-- return build_int_cst_wide (TREE_TYPE (TREE_TYPE (fndecl)), r_lo, r_hi);
-+ return build_int_cst_wide (type, r_lo, r_hi);
- }
-
- return NULL_TREE;
-@@ -9692,7 +9698,16 @@
- case rvc_inf:
- /* If arg is Inf or NaN and we're logb, return it. */
- if (TREE_CODE (rettype) == REAL_TYPE)
-- return fold_convert_loc (loc, rettype, arg);
-+ {
-+ /* For logb(-Inf) we have to return +Inf. */
-+ if (real_isinf (value) && real_isneg (value))
-+ {
-+ REAL_VALUE_TYPE tem;
-+ real_inf (&tem);
-+ return build_real (rettype, tem);
-+ }
-+ return fold_convert_loc (loc, rettype, arg);
-+ }
- /* Fall through... */
- case rvc_zero:
- /* Zero may set errno and/or raise an exception for logb, also
-@@ -10582,6 +10597,7 @@
- CASE_FLT_FN (BUILT_IN_LLRINT):
- return fold_fixed_mathfn (loc, fndecl, arg0);
-
-+ case BUILT_IN_BSWAP16:
- case BUILT_IN_BSWAP32:
- case BUILT_IN_BSWAP64:
- return fold_builtin_bswap (fndecl, arg0);
-@@ -14346,6 +14362,7 @@
- case BUILT_IN_ABS:
- case BUILT_IN_ALLOCA:
- case BUILT_IN_ALLOCA_WITH_ALIGN:
-+ case BUILT_IN_BSWAP16:
- case BUILT_IN_BSWAP32:
- case BUILT_IN_BSWAP64:
- case BUILT_IN_CLZ:
---- a/src/gcc/builtins.def
-+++ b/src/gcc/builtins.def
-@@ -628,6 +628,7 @@
- DEF_EXT_LIB_BUILTIN (BUILT_IN_ALLOCA, "alloca", BT_FN_PTR_SIZE, ATTR_MALLOC_NOTHROW_LEAF_LIST)
- DEF_GCC_BUILTIN (BUILT_IN_APPLY, "apply", BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE, ATTR_NULL)
- DEF_GCC_BUILTIN (BUILT_IN_APPLY_ARGS, "apply_args", BT_FN_PTR_VAR, ATTR_LEAF_LIST)
-+DEF_GCC_BUILTIN (BUILT_IN_BSWAP16, "bswap16", BT_FN_UINT16_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
- DEF_GCC_BUILTIN (BUILT_IN_BSWAP32, "bswap32", BT_FN_UINT32_UINT32, ATTR_CONST_NOTHROW_LEAF_LIST)
- DEF_GCC_BUILTIN (BUILT_IN_BSWAP64, "bswap64", BT_FN_UINT64_UINT64, ATTR_CONST_NOTHROW_LEAF_LIST)
- DEF_EXT_LIB_BUILTIN (BUILT_IN_CLEAR_CACHE, "__clear_cache", BT_FN_VOID_PTR_PTR, ATTR_NOTHROW_LEAF_LIST)
---- a/src/gcc/builtin-types.def
-+++ b/src/gcc/builtin-types.def
-@@ -76,6 +76,7 @@
- DEF_PRIMITIVE_TYPE (BT_UINT128, int128_unsigned_type_node)
- DEF_PRIMITIVE_TYPE (BT_INTMAX, intmax_type_node)
- DEF_PRIMITIVE_TYPE (BT_UINTMAX, uintmax_type_node)
-+DEF_PRIMITIVE_TYPE (BT_UINT16, uint16_type_node)
- DEF_PRIMITIVE_TYPE (BT_UINT32, uint32_type_node)
- DEF_PRIMITIVE_TYPE (BT_UINT64, uint64_type_node)
- DEF_PRIMITIVE_TYPE (BT_WORD, (*lang_hooks.types.type_for_mode) (word_mode, 1))
-@@ -226,6 +227,7 @@
- DEF_FUNCTION_TYPE_1 (BT_FN_UINT_UINT, BT_UINT, BT_UINT)
- DEF_FUNCTION_TYPE_1 (BT_FN_ULONG_ULONG, BT_ULONG, BT_ULONG)
- DEF_FUNCTION_TYPE_1 (BT_FN_ULONGLONG_ULONGLONG, BT_ULONGLONG, BT_ULONGLONG)
-+DEF_FUNCTION_TYPE_1 (BT_FN_UINT16_UINT16, BT_UINT16, BT_UINT16)
- DEF_FUNCTION_TYPE_1 (BT_FN_UINT32_UINT32, BT_UINT32, BT_UINT32)
- DEF_FUNCTION_TYPE_1 (BT_FN_UINT64_UINT64, BT_UINT64, BT_UINT64)
-
---- a/src/gcc/c-family/c-common.c
-+++ b/src/gcc/c-family/c-common.c
-@@ -4992,7 +4992,7 @@
- uint8_type_node =
- TREE_TYPE (identifier_global_value (c_get_ident (UINT8_TYPE)));
- if (UINT16_TYPE)
-- uint16_type_node =
-+ c_uint16_type_node =
- TREE_TYPE (identifier_global_value (c_get_ident (UINT16_TYPE)));
- if (UINT32_TYPE)
- c_uint32_type_node =
---- a/src/gcc/c-family/c-common.h
-+++ b/src/gcc/c-family/c-common.h
-@@ -390,7 +390,7 @@
- #define int32_type_node c_global_trees[CTI_INT32_TYPE]
- #define int64_type_node c_global_trees[CTI_INT64_TYPE]
- #define uint8_type_node c_global_trees[CTI_UINT8_TYPE]
--#define uint16_type_node c_global_trees[CTI_UINT16_TYPE]
-+#define c_uint16_type_node c_global_trees[CTI_UINT16_TYPE]
- #define c_uint32_type_node c_global_trees[CTI_UINT32_TYPE]
- #define c_uint64_type_node c_global_trees[CTI_UINT64_TYPE]
- #define int_least8_type_node c_global_trees[CTI_INT_LEAST8_TYPE]
---- a/src/gcc/c-family/c-cppbuiltin.c
-+++ b/src/gcc/c-family/c-cppbuiltin.c
-@@ -448,8 +448,8 @@
- builtin_define_type_max ("__INT64_MAX__", int64_type_node);
- if (uint8_type_node)
- builtin_define_type_max ("__UINT8_MAX__", uint8_type_node);
-- if (uint16_type_node)
-- builtin_define_type_max ("__UINT16_MAX__", uint16_type_node);
-+ if (c_uint16_type_node)
-+ builtin_define_type_max ("__UINT16_MAX__", c_uint16_type_node);
- if (c_uint32_type_node)
- builtin_define_type_max ("__UINT32_MAX__", c_uint32_type_node);
- if (c_uint64_type_node)
---- a/src/gcc/cfgexpand.c
-+++ b/src/gcc/cfgexpand.c
-@@ -3646,6 +3646,8 @@
- avoid_complex_debug_insns (rtx insn, rtx *exp_p, int depth)
- {
- rtx exp = *exp_p;
-+ const char *format_ptr;
-+ int i, j;
-
- if (exp == NULL_RTX)
- return;
-@@ -3668,8 +3670,7 @@
- return;
- }
-
-- const char *format_ptr = GET_RTX_FORMAT (GET_CODE (exp));
-- int i, j;
-+ format_ptr = GET_RTX_FORMAT (GET_CODE (exp));
- for (i = 0; i < GET_RTX_LENGTH (GET_CODE (exp)); i++)
- switch (*format_ptr++)
- {
--- a/src/gcc/ChangeLog
+++ b/src/gcc/ChangeLog
-@@ -1,3 +1,126 @@
+@@ -1,3 +1,603 @@
++2013-12-28 Eric Botcazou <ebotcazou@adacore.com>
++
++ * doc/invoke.texi (output file options): Add missing markers.
++
++2013-12-11 Kai Tietz <ktietz@redhat.com>
++
++ PR target/56807
++ * config/i386/i386.c (ix86_expand_prologue): plus_constant
++ takes no mode-argument.
++
++2013-12-10 Kai Tietz <ktietz@redhat.com>
++
++ PR target/56807
++ * config/i386/i386.c (ix86_expand_prologue): Address saved
++ registers stack-relative, not via frame-pointer.
++
++2013-12-03 Marek Polacek <polacek@redhat.com>
++
++ Backport from mainline
++ 2013-12-03 Marek Polacek <polacek@redhat.com>
++
++ PR c/59351
++ * c-decl.c (build_compound_literal): Allow compound literals with
++ empty initial value.
++
++2013-12-01 Eric Botcazou <ebotcazou@adacore.com>
++
++ * config/i386/winnt.c (i386_pe_asm_named_section): Be prepared for an
++ identifier node.
++
++2013-11-28 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-11-23 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/56788
++ * config/i386/i386.c (bdesc_multi_arg) <IX86_BUILTIN_VFRCZSS>:
++ Declare as MULTI_ARG_1_SF instruction.
++ <IX86_BUILTIN_VFRCZSD>: Decleare as MULTI_ARG_1_DF instruction.
++ * config/i386/sse.md (*xop_vmfrcz<mode>2): Rename
++ from *xop_vmfrcz_<mode>.
++ * config/i386/xopintrin.h (_mm_frcz_ss): Use __builtin_ia32_movss
++ to merge scalar result with __A.
++ (_mm_frcz_sd): Use __builtin_ia32_movsd to merge scalar
++ result with __A.
++
++2013-11-19 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-11-18 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/i386.c (ix86_decompose_address): Use REG_P instead of
++ ix86_address_subreg_operand. Move subreg checks to
++ ix86_validate_address_register. Move address override check to
++ ix86_legitimate_address_p.
++ (ix86_validate_address_register): New function.
++ (ix86_legitimate_address_p): Call ix86_validate_address_register
++ to validate base and index registers. Add address override check
++ from ix86_decompose_address.
++ (ix86_decompose_address): Remove.
++
++ Backport from mainline
++ 2013-11-17 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/59153
++ * config/i386/i386.c (ix86_address_subreg_operand): Do not
++ reject non-integer subregs.
++ (ix86_decompose_address): Do not reject invalid CONST_INT RTXes.
++ Move check for invalid x32 constant addresses ...
++ (ix86_legitimate_address_p): ... here.
++
++ Bacport from mainline
++ 2012-03-13 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/i386.c (ix86_decompose_address): Prevent %fs:(%reg)
++ addresses only when %reg is not in word mode.
++
++2013-11-10 Karlson2k <k2k@narod.ru>
++ Kai Tietz <ktietz@redhat.com>
++
++ Merged from trunk
++ PR plugins/52872
++ * configure.ac: Adding for exported symbols check
++ and for rdynamic-check executable-extension.
++ * configure: Regenerated.
++
++2013-11-07 H.J. Lu <hongjiu.lu@intel.com>
++
++ PR target/59034
++ * config/i386/i386.md (push peepholer/splitter): Use Pmode
++ with stack_pointer_rtx.
++
++2013-11-05 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/t-rtems (MULTILIB_MATCHES): Fix option typos.
++
++2013-10-26 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-10-22 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/58779
++ * config/i386/i386.c (put_condition_code) <case GTU, case LEU>:
++ Remove CCCmode handling.
++ <case LTU>: Return 'c' suffix for CCCmode.
++ <case GEU>: Return 'nc' suffix for CCCmode.
++ (ix86_cc_mode) <case GTU, case LEU>: Do not generate overflow checks.
++ * config/i386/i386.md (*sub<mode>3_cconly_overflow): Remove.
++ (*sub<mode>3_cc_overflow): Ditto.
++ (*subsi3_zext_cc_overflow): Ditto.
++
++2013-10-26 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-10-19 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/58792
++ * config/i386/i386.c (ix86_function_value_regno): Add DX_REG,
++ ST1_REG and XMM1_REG for 32bit and 64bit targets. Also add DI_REG
++ and SI_REG for 64bit SYSV ABI targets.
++
++2013-10-25 Richard Henderson <rth@twiddle.net>
++
++ PR rtl/58542
++ * optabs.c (maybe_emit_atomic_exchange): Use create_input_operand
++ instead of create_convert_operand_to.
++ (maybe_emit_sync_lock_test_and_set): Likewise.
++ (expand_atomic_compare_and_swap): Likewise.
++ (maybe_emit_compare_and_swap_exchange_loop): Don't convert_modes.
++
++2013-10-25 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR rtl-optimization/58831
++ * alias.c (init_alias_analysis): At the beginning of each iteration,
++ set the reg_seen[N] flag if static_reg_base_value[N] is non-null.
++
++2013-10-25 Eric Botcazou <ebotcazou@adacore.com>
++
++ * recog.c (search_ofs): New static variable moved from...
++ (peep2_find_free_register): ...here.
++ (peephole2_optimize): Initialize it.
++
++2013-10-02 John David Anglin <danglin@gcc.gnu.org>
++
++ * config.gcc (hppa*64*-*-linux*): Don't add pa/t-linux to tmake_file.
++
++2013-09-23 Eric Botcazou <ebotcazou@adacore.com>
++
++ * tree-ssa-ccp.c (insert_clobber_before_stack_restore): Recurse on copy
++ assignment statements.
++
++2013-09-20 John David Anglin <danglin@gcc.gnu.org>
++
++ * config/pa/pa.md: In "scc" insn patterns, change output template to
++ handle const0_rtx in reg_or_0_operand operands.
++
++2013-09-18 Daniel Morris <danielm@ecoscentric.com>
++ Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/58458
++ * doc/implement-cxx.texi: Fix references to the C++ standards.
++
++2013-09-14 John David Anglin <danglin@gcc.gnu.org>
++
++ PR target/58382
++ * config/pa/pa.c (pa_expand_prologue): Change mode in gen_rtx_POST_INC
++ calls to word_mode.
++
++2013-09-12 Terry Guo <terry.guo@arm.com>
++
++ Backport from mainline
++ 2012-09-17 Richard Guenther <rguenther@suse.de>
++
++ PR lto/54598
++ * tree-streamer-in.c (unpack_ts_real_cst_value_fields): Use ggc'ed
++ FIXED_VALUE_TYPE instead of struct fixed_value.
++
++2013-09-10 Richard Earnshaw <rearnsha@arm.com>
++
++ PR target/58361
++ * arm/vfp.md (combine_vcvt_f32_<FCVTI32typename>): Fix pattern to
++ support conditional execution.
++ (combine_vcvt_f64_<FCVTI32typename>): Likewise.
++
++2013-09-01 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-08-31 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/alpha/alpha.c (alpha_emit_conditional_move): Update
++ "cmp" RTX before signed_comparison_operator check to account
++ for "code" changes.
++
++2013-09-01 John David Anglin <danglin@gcc.gnu.org>
++
++ * config/pa/pa.md: Allow "const 0" operand 1 in "scc" insns.
++
++2013-09-01 Iain Sandoe <iain@codesourcery.com>
++
++ Backported from 4.8
++ 2012-06-19 Steven Bosscher <steven@gcc.gnu.org>
++
++ * doc/tm.texi.in (TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE,
++ TARGET_OBJC_DECLARE_CLASS_DEFINITION): Add @hooks.
++ (ASM_DECLARE_CLASS_REFERENCE, ASM_DECLARE_UNRESOLVED_REFERENCE):
++ Remove.
++ * doc/tm.texi: Regenerate.
++ * config/darwin.h (ASM_OUTPUT_LABELREF): Remove special case for
++ .objc_class_name_*.
++ * config/darwin-c.c: Include target.h.
++ (darwin_objc_declare_unresolved_class_reference): New function.
++ (darwin_objc_declare_class_definition): New function.
++ (TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE): Define.
++ (TARGET_OBJC_DECLARE_CLASS_DEFINITION): Define.
++
++2013-09-01 Iain Sandoe <iain@codesourcery.com>
++
++ Backport from mainline:
++ 2013-07-22 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/i386.md (nonlocal_goto_receiver): Delete insn if
++ it is not needed after split.
++
++ 2013-07-20 Iain Sandoe <iain@codesourcery.com>
++
++ PR target/51784
++ * config/i386/i386.c (output_set_got) [TARGET_MACHO]: Adjust to emit a
++ second label for nonlocal goto receivers. Don't output pic base labels
++ unless we're producing PIC; mark that action unreachable().
++ (ix86_save_reg): If the function contains a nonlocal label, save the
++ PIC base reg.
++ * config/darwin-protos.h (machopic_should_output_picbase_label): New.
++ * gcc/config/darwin.c (emitted_pic_label_num): New GTY.
++ (update_pic_label_number_if_needed): New.
++ (machopic_output_function_base_name): Adjust for nonlocal receiver
++ case.
++ (machopic_should_output_picbase_label): New.
++ * config/i386/i386.md (enum unspecv): UNSPECV_NLGR: New.
++ (nonlocal_goto_receiver): New insn and split.
++
++2013-08-28 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-08-27 Christian Widmer <shadow@umbrox.de>
++
++ PR target/57927
++ * config/i386/driver-i386.c (host_detect_local_cpu): Add detection
++ of Ivy Bridge processors.
++
++2013-08-21 Richard Earnshaw <rearnsha@arm.com>
++
++ PR target/56979
++ * arm.c (aapcs_vfp_allocate): Decompose the argument if the
++ suggested mode for the assignment isn't compatible with the
++ registers required.
++
++2013-08-17 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-08-12 Perez Read <netfirewall@gmail.com>
++
++ PR target/58132
++ * config/i386/i386.md (*movabs<mode>_1): Add <ptrsize> PTR before
++ operand 0 for intel asm alternative.
++ (*movabs<mode>_2): Ditto for operand 1.
++
++2013-08-13 Marek Polacek <polacek@redhat.com>
++
++ Backport from 4.8:
++ 2013-0813 Marek Polacek <polacek@redhat.com>
++ Jakub Jelinek <jakub@redhat.com>
++
++ PR tree-optimization/57980
++ * tree-tailcall.c (process_assignment): Return false
++ when not dealing with integers or floats.
++
++2013-08-12 David Edelsohn <dje.gcc@gmail.com>
++
++ Backport from mainline
++ 2013-02-14 Steven Bosscher <steven@gcc.gnu.org>
++
++ * collect2-aix.h: Define F_LOADONLY.
++
++2013-08-02 Eric Botcazou <ebotcazou@adacore.com>
++
++ * config/sparc/sparc.c (sparc_emit_membar_for_model) <SMM_TSO>: Add
++ the implied StoreLoad barrier for atomic operations if before.
++
++2013-07-11 Georg-Johann Lay <avr@gjlay.de>
++
++ Backport from 2013-07-11 trunk r200901.
++
++ PR target/57631
++ * config/avr/avr.c (avr_set_current_function): Sanity-check signal
++ name seen by assembler/linker if available.
++
++2013-07-10 Georg-Johann Lay <avr@gjlay.de>
++
++ Backport from 2013-07-10 trunk r200872.
++
++ PR target/57844
++ * config/avr/avr.c (avr_prologue_setup_frame): Trunk -size to mode
++ of my_fp.
++
++2013-07-10 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-07-06 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/sse.md (sse_movlhps): Change alternative 3
++ of operand 2 to "m".
++
++2013-07-09 Joseph Myers <joseph@codesourcery.com>
++
++ * config/rs6000/rs6000.c (rs6000_init_hard_regno_mode_ok): Only
++ adjust register size for TDmode and TFmode for VSX registers.
++
++2013-07-08 Eric Botcazou <ebotcazou@adacore.com>
++
++ * Makefile.in (tree-ssa-reassoc.o): Add dependency on $(PARAMS_H).
++
++2013-07-08 Jakub Jelinek <jakub@redhat.com>
++
++ PR rtl-optimization/57829
++ * simplify-rtx.c (simplify_binary_operation_1) <case IOR>: Ensure that
++ mask bits outside of mode are just sign-extension from mode to HWI.
++
++2013-07-05 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-06-20 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/57655
++ * config/i386/i386.c (construct_container): Report error if
++ long double is used with disabled x87 float returns.
++
++2013-06-21 David Edelsohn <dje.gcc@gmail.com>
++
++ Backport from mainline
++ 2013-06-19 David Edelsohn <dje.gcc@gmail.com>
++
++ PR driver/57652
++ * collect2.c (collect_atexit): New.
++ (collect_exit): Delete.
++ (main): Register collect_atexit with atexit.
++ (collect_wait): Change collect_exit to exit.
++ (do_wait): Same.
++ * collect2.h (collect_exit): Delete.
++ * tlink.c (do_tlink): Rename exit to ret. Change collect_exit to exit.
++
++2013-06-07 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-06-10 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/alpha/alpha.c (alpha_emit_xfloating_compare): Also use
++ cmp_code to construct REG_EQUAL note.
++
++ Backport from mainline
++ 2013-06-05 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/alpha/alpha.c (alpha_emit_conditional_move): Swap all
++ GE, GT, GEU and GTU compares, modulo DImode compares with zero.
++
++ Backport from mainline
++ 2013-05-23 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/57379
++ * config/alpha/alpha.md (unspec): Add UNSPEC_XFLT_COMPARE.
++ * config/alpha/alpha.c (alpha_emit_xfloating_compare): Construct
++ REG_EQUAL note as UNSPEC_XFLT_COMPARE unspec.
++
++2013-06-09 Jakub Jelinek <jakub@redhat.com>
++
++ PR target/57568
++ * config/i386/i386.md (TARGET_READ_MODIFY_WRITE peepholes): Ensure
++ that operands[2] doesn't overlap with operands[0].
++
++2013-05-22 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/57356
++ * config/i386/i386.md (*movti_internal_rex64): Emit movaps/movups
++ for non-sse2 targets. Simplify mode attribute calculation.
++
++2013-05-17 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-05-16 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/driver-i386.c (host_detect_local_cpu): Determine
++ cache parameters using detect_caches_amd also for CYRIX,
++ NSC and TM2 signatures.
++
++ 2013-05-16 Uros Bizjak <ubizjak@gmail.com>
++ Dzianis Kahanovich <mahatma@eu.by>
++
++ PR target/45359
++ PR target/46396
++ * config/i386/driver-i386.c (host_detect_local_cpu): Detect
++ VIA/Centaur processors and determine their cache parameters
++ using detect_caches_amd.
++
++ 2013-05-15 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/i386.c (ix86_option_override_internal): Add
++ PTA_POPCNT to corei7 entry.
++
++2013-05-14 Richard Biener <rguenther@suse.de>
++
++ PR gcov-profile/57269
++ Backport from mainline
++ 2012-06-30 Nathan Sidwell <nathan@acm.org>
++
++ * coverage.c (coverage_init): Read counts file before writing
++ graph header.
++
++2013-05-13 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/57264
++ Backport from mainline
++ 2013-01-22 Jakub Jelinek <jakub@redhat.com>
++
++ PR target/55686
++ * config/i386/i386.md (UNSPEC_STOS): New.
++ (strset_singleop, *strsetdi_rex_1, *strsetsi_1, *strsethi_1,
++ *strsetqi_1): Add UNSPEC_STOS.
++
++2013-05-10 Joey Ye <joey.ye@arm.com>
++
++ Backport from mainline
++ 2012-11-29 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org>
++
++ PR target/54974
++ * config/arm/arm.md (thumb2_pool_range, pool_range): Add comment on
++ Thumb pool ranges.
++ (thumb1_extendhisi2): Reduce Thumb pool range.
++ (arm_movdi): Likewise.
++ (thumb1_movdi_insn): Likewise.
++ (thumb1_movsi_insn): Likewise.
++ (pic_load_addr_unified): Likewise.
++ (pic_load_addr_32bit): Likewise.
++ (pic_load_addr_thumb1): Likewise.
++ (thumb1_movhf): Likewise.
++ (arm_movsf_soft_insn): Likewise.
++ (thumb1_movsf_soft_insn): Likewise.
++ (movdf_soft_insn): Likewise.
++ (thumb1_movdf_soft_insn): Likewise.
++ * config/arm/neon.md (*neon_mov<mode>): Likewise.
++ (*neon_mov<mode>): Likwise.
++ * config/arm/thumb2.md: (*thumb2_movsi_insn): Likewise.
++ (*thumb2_movhi_insn): Likewise.
++ (*thumb2_extendqisi_v6): Likewise.
++ (*thumb2_zero_extendqisi_v6): Likewise.
++ (*thumb2_zero_extendqisi2_v6): Likewise.
++ * config/arm/vfp.md: (*thumb2_movsi_vfp): Likewise.
++ (*movdi_vfp): Likewise.
++ (*movdi_vfp_cortexa8): Likewise.
++ (*thumb2_movsf_vfp): Likewise.
++ (*thumb2_movdf_vfp): Likewise.
++
++2013-05-10 Sebastian Huber <sebastian.huber@embedded-brains.de>
++
++ * config/arm/t-rtems-eabi: Remove mthumb/march=armv7 multilib.
++ Add mthumb/march=armv7-a multilib.
++ Add mthumb/march=armv7-r multilib.
++ Add mthumb/march=armv7-a/mfpu=neon/mfloat-abi=hard multilib.
++
++2013-05-10 Ralf Corsépius <ralf.corsepius@rtems.org>
++
++ PR target/57237
++ * config/v850/t-rtems: Add more multilibs.
++
+2013-05-07 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ Backport from trunk
@@ -3127,7 +3531,7 @@
+ 2013-04-25 Marek Polacek <polacek@redhat.com>
+
+ PR tree-optimization/57066
-+ * builtins.c (fold_builtin_logb): Return +Inf for -Inf.
++ * builtins.c (fold_builtin_logb): Return +Inf for -Inf.
+
+2013-04-30 Uros Bizjak <ubizjak@gmail.com>
+
@@ -3228,6 +3632,11 @@
+ * config/pa/pa.c (legitimize_pic_address): Before incrementing label
+ nuses, make sure we have a label.
+
++2013-04-11 Richard Biener <rguenther@suse.de>
++
++ * BASE-VER: Set to 4.7.4.
++ * DEV-PHASE: Set to prerelease.
++
2013-04-11 Release Manager
* GCC 4.7.3 released.
@@ -4329,6 +4738,617 @@
+ (read_rtx): Parse and read int iterators mapping and attributes.
+ Initialize int iterators group's hash-table. Memory management.
+ (read_rtx_code): Handle case for rtl field specifier 'i'.
+--- a/src/gcc/DATESTAMP
++++ b/src/gcc/DATESTAMP
+@@ -1 +1 @@
+-20130411
++20140107
+--- a/src/gcc/LINARO-VERSION
++++ b/src/gcc/LINARO-VERSION
+@@ -0,0 +1 @@
++4.7-2014.01
+--- a/src/gcc/Makefile.in
++++ b/src/gcc/Makefile.in
+@@ -1848,11 +1848,12 @@
+ "$(MULTILIB_EXTRA_OPTS)" \
+ "$(MULTILIB_EXCLUSIONS)" \
+ "$(MULTILIB_OSDIRNAMES)" \
++ "$(MULTILIB_REQUIRED)" \
+ "$(MULTIARCH_DIRNAME)" \
+ "@enable_multilib@" \
+ > tmp-mlib.h; \
+ else \
+- $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' "$(MULTIARCH_DIRNAME)" no \
++ $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' '' "$(MULTIARCH_DIRNAME)" no \
+ > tmp-mlib.h; \
+ fi
+ $(SHELL) $(srcdir)/../move-if-change tmp-mlib.h multilib.h
+@@ -2570,7 +2571,7 @@
+ $(TM_H) coretypes.h $(TREE_DUMP_H) $(TREE_PASS_H) $(FLAGS_H) \
+ tree-iterator.h $(BASIC_BLOCK_H) $(GIMPLE_H) $(TREE_INLINE_H) \
+ $(VEC_H) langhooks.h alloc-pool.h pointer-set.h $(CFGLOOP_H) \
+- tree-pretty-print.h gimple-pretty-print.h $(DIAGNOSTIC_CORE_H)
++ tree-pretty-print.h gimple-pretty-print.h $(DIAGNOSTIC_CORE_H) $(PARAMS_H)
+ tree-optimize.o : tree-optimize.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
+ $(TREE_H) $(TM_P_H) $(GGC_H) output.h \
+ $(DIAGNOSTIC_H) $(BASIC_BLOCK_H) $(FLAGS_H) $(TIMEVAR_H) $(TM_H) \
+@@ -3904,7 +3905,7 @@
+ $(SYSTEM_H) coretypes.h $(GTM_H) errors.h $(READ_MD_H) gensupport.h
+ build/gengenrtl.o : gengenrtl.c $(BCONFIG_H) $(SYSTEM_H) rtl.def
+ gengtype-lex.o build/gengtype-lex.o : gengtype-lex.c gengtype.h $(SYSTEM_H)
+-gengtype-lex.o: $(CONFIG_H)
++gengtype-lex.o: $(CONFIG_H) $(BCONFIG_H)
+ build/gengtype-lex.o: $(BCONFIG_H)
+ gengtype-parse.o build/gengtype-parse.o : gengtype-parse.c gengtype.h \
+ $(SYSTEM_H)
+--- a/src/gcc/ada/ChangeLog
++++ b/src/gcc/ada/ChangeLog
+@@ -1,3 +1,27 @@
++2013-12-12 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc-interface/Make-lang.in (ada/doctools/xgnatugn): Use gnatmake.
++
++2013-10-19 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc-interface/utils.c (gnat_set_type_context): New function.
++ (gnat_pushdecl): Use it to set the context of the type.
++
++2013-09-18 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc-interface/trans.c (Subprogram_Body_to_gnu): Pop the stack of
++ return variables for subprograms using the CICO mechanism.
++
++2013-08-13 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc-interface/trans.c (can_equal_min_or_max_val_p): Be prepared for
++ values outside of the range of the type.
++
++2013-05-26 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc-interface/trans.c (Attribute_to_gnu) <Attr_Last_Bit>: Add kludge
++ to avoid generating an overflow for -1.
++
+ 2013-04-11 Release Manager
+
+ * GCC 4.7.3 released.
+--- a/src/gcc/ada/gcc-interface/Make-lang.in
++++ b/src/gcc/ada/gcc-interface/Make-lang.in
+@@ -660,7 +660,7 @@
+ ada/doctools/xgnatugn$(build_exeext): ada/xgnatugn.adb
+ -$(MKDIR) ada/doctools
+ $(CP) $^ ada/doctools
+- cd ada/doctools && $(GNATMAKE) -q xgnatugn
++ cd ada/doctools && gnatmake -q xgnatugn
+
+ # Note that doc/gnat_ugn.texi and doc/projects.texi do not depend on
+ # xgnatugn being built so we can distribute a pregenerated doc/gnat_ugn.info
+--- a/src/gcc/ada/gcc-interface/trans.c
++++ b/src/gcc/ada/gcc-interface/trans.c
+@@ -1901,14 +1901,19 @@
+ gnu_result = bitsize_int (bitpos % BITS_PER_UNIT);
+ gnu_result = size_binop (PLUS_EXPR, gnu_result,
+ TYPE_SIZE (TREE_TYPE (gnu_prefix)));
+- gnu_result = size_binop (MINUS_EXPR, gnu_result,
+- bitsize_one_node);
++ /* ??? Avoid a large unsigned result that will overflow when
++ converted to the signed universal_integer. */
++ if (integer_zerop (gnu_result))
++ gnu_result = integer_minus_one_node;
++ else
++ gnu_result
++ = size_binop (MINUS_EXPR, gnu_result, bitsize_one_node);
+ break;
+
+ case Attr_Bit_Position:
+ gnu_result = gnu_field_bitpos;
+ break;
+- }
++ }
+
+ /* If this has a PLACEHOLDER_EXPR, qualify it by the object we are
+ handling. */
+@@ -2227,7 +2232,10 @@
+ if (TREE_CODE (val) != INTEGER_CST)
+ return true;
+
+- return tree_int_cst_equal (val, min_or_max_val) == 1;
++ if (max)
++ return tree_int_cst_lt (val, min_or_max_val) == 0;
++ else
++ return tree_int_cst_lt (min_or_max_val, val) == 0;
+ }
+
+ /* Return true if VAL (of type TYPE) can equal the minimum value of TYPE.
+@@ -3430,6 +3438,8 @@
+ {
+ tree gnu_retval;
+
++ VEC_pop (tree, gnu_return_var_stack);
++
+ add_stmt (gnu_result);
+ add_stmt (build1 (LABEL_EXPR, void_type_node,
+ VEC_last (tree, gnu_return_label_stack)));
+--- a/src/gcc/ada/gcc-interface/utils.c
++++ b/src/gcc/ada/gcc-interface/utils.c
+@@ -500,6 +500,22 @@
+ free_binding_level = level;
+ }
+
++/* Set the context of TYPE and its parallel types (if any) to CONTEXT. */
++
++static void
++gnat_set_type_context (tree type, tree context)
++{
++ tree decl = TYPE_STUB_DECL (type);
++
++ TYPE_CONTEXT (type) = context;
++
++ while (decl && DECL_PARALLEL_TYPE (decl))
++ {
++ TYPE_CONTEXT (DECL_PARALLEL_TYPE (decl)) = context;
++ decl = TYPE_STUB_DECL (DECL_PARALLEL_TYPE (decl));
++ }
++}
++
+ /* Record DECL as belonging to the current lexical scope and use GNAT_NODE
+ for location information and flag propagation. */
+
+@@ -581,7 +597,7 @@
+ if (TREE_CODE (t) == POINTER_TYPE)
+ TYPE_NEXT_PTR_TO (t) = tt;
+ TYPE_NAME (tt) = DECL_NAME (decl);
+- TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
++ gnat_set_type_context (tt, DECL_CONTEXT (decl));
+ TYPE_STUB_DECL (tt) = TYPE_STUB_DECL (t);
+ DECL_ORIGINAL_TYPE (decl) = tt;
+ }
+@@ -591,7 +607,7 @@
+ /* We need a variant for the placeholder machinery to work. */
+ tree tt = build_variant_type_copy (t);
+ TYPE_NAME (tt) = decl;
+- TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
++ gnat_set_type_context (tt, DECL_CONTEXT (decl));
+ TREE_USED (tt) = TREE_USED (t);
+ TREE_TYPE (decl) = tt;
+ if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
+@@ -613,7 +629,7 @@
+ if (!(TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL))
+ {
+ TYPE_NAME (t) = decl;
+- TYPE_CONTEXT (t) = DECL_CONTEXT (decl);
++ gnat_set_type_context (t, DECL_CONTEXT (decl));
+ }
+ }
+ }
+--- a/src/gcc/alias.c
++++ b/src/gcc/alias.c
+@@ -2810,16 +2810,13 @@
+ /* Wipe the reg_seen array clean. */
+ memset (reg_seen, 0, maxreg);
+
+- /* Mark all hard registers which may contain an address.
+- The stack, frame and argument pointers may contain an address.
+- An argument register which can hold a Pmode value may contain
+- an address even if it is not in BASE_REGS.
+-
+- The address expression is VOIDmode for an argument and
+- Pmode for other registers. */
+-
+- memcpy (new_reg_base_value, static_reg_base_value,
+- FIRST_PSEUDO_REGISTER * sizeof (rtx));
++ /* Initialize the alias information for this pass. */
++ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
++ if (static_reg_base_value[i])
++ {
++ new_reg_base_value[i] = static_reg_base_value[i];
++ reg_seen[i] = 1;
++ }
+
+ /* Walk the insns adding values to the new_reg_base_value array. */
+ for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
+--- a/src/gcc/builtin-types.def
++++ b/src/gcc/builtin-types.def
+@@ -76,6 +76,7 @@
+ DEF_PRIMITIVE_TYPE (BT_UINT128, int128_unsigned_type_node)
+ DEF_PRIMITIVE_TYPE (BT_INTMAX, intmax_type_node)
+ DEF_PRIMITIVE_TYPE (BT_UINTMAX, uintmax_type_node)
++DEF_PRIMITIVE_TYPE (BT_UINT16, uint16_type_node)
+ DEF_PRIMITIVE_TYPE (BT_UINT32, uint32_type_node)
+ DEF_PRIMITIVE_TYPE (BT_UINT64, uint64_type_node)
+ DEF_PRIMITIVE_TYPE (BT_WORD, (*lang_hooks.types.type_for_mode) (word_mode, 1))
+@@ -226,6 +227,7 @@
+ DEF_FUNCTION_TYPE_1 (BT_FN_UINT_UINT, BT_UINT, BT_UINT)
+ DEF_FUNCTION_TYPE_1 (BT_FN_ULONG_ULONG, BT_ULONG, BT_ULONG)
+ DEF_FUNCTION_TYPE_1 (BT_FN_ULONGLONG_ULONGLONG, BT_ULONGLONG, BT_ULONGLONG)
++DEF_FUNCTION_TYPE_1 (BT_FN_UINT16_UINT16, BT_UINT16, BT_UINT16)
+ DEF_FUNCTION_TYPE_1 (BT_FN_UINT32_UINT32, BT_UINT32, BT_UINT32)
+ DEF_FUNCTION_TYPE_1 (BT_FN_UINT64_UINT64, BT_UINT64, BT_UINT64)
+
+--- a/src/gcc/builtins.c
++++ b/src/gcc/builtins.c
+@@ -4626,13 +4626,15 @@
+ return result;
+ }
+
+-/* Expand a call to a bswap builtin with argument ARG0. MODE
+- is the mode to expand with. */
++/* Expand a call to bswap builtin in EXP.
++ Return NULL_RTX if a normal call should be emitted rather than expanding the
++ function in-line. If convenient, the result should be placed in TARGET.
++ SUBTARGET may be used as the target for computing one of EXP's operands. */
+
+ static rtx
+-expand_builtin_bswap (tree exp, rtx target, rtx subtarget)
++expand_builtin_bswap (enum machine_mode target_mode, tree exp, rtx target,
++ rtx subtarget)
+ {
+- enum machine_mode mode;
+ tree arg;
+ rtx op0;
+
+@@ -4640,14 +4642,18 @@
+ return NULL_RTX;
+
+ arg = CALL_EXPR_ARG (exp, 0);
+- mode = TYPE_MODE (TREE_TYPE (arg));
+- op0 = expand_expr (arg, subtarget, VOIDmode, EXPAND_NORMAL);
++ op0 = expand_expr (arg,
++ subtarget && GET_MODE (subtarget) == target_mode
++ ? subtarget : NULL_RTX,
++ target_mode, EXPAND_NORMAL);
++ if (GET_MODE (op0) != target_mode)
++ op0 = convert_to_mode (target_mode, op0, 1);
+
+- target = expand_unop (mode, bswap_optab, op0, target, 1);
++ target = expand_unop (target_mode, bswap_optab, op0, target, 1);
+
+ gcc_assert (target);
+
+- return convert_to_mode (mode, target, 0);
++ return convert_to_mode (target_mode, target, 1);
+ }
+
+ /* Expand a call to a unary builtin in EXP.
+@@ -6084,10 +6090,10 @@
+ expand_stack_restore (CALL_EXPR_ARG (exp, 0));
+ return const0_rtx;
+
++ case BUILT_IN_BSWAP16:
+ case BUILT_IN_BSWAP32:
+ case BUILT_IN_BSWAP64:
+- target = expand_builtin_bswap (exp, target, subtarget);
+-
++ target = expand_builtin_bswap (target_mode, exp, target, subtarget);
+ if (target)
+ return target;
+ break;
+@@ -8176,7 +8182,7 @@
+ return NULL_TREE;
+ }
+
+-/* Fold function call to builtin_bswap and the long and long long
++/* Fold function call to builtin_bswap and the short, long and long long
+ variants. Return NULL_TREE if no simplification can be made. */
+ static tree
+ fold_builtin_bswap (tree fndecl, tree arg)
+@@ -8189,15 +8195,15 @@
+ {
+ HOST_WIDE_INT hi, width, r_hi = 0;
+ unsigned HOST_WIDE_INT lo, r_lo = 0;
+- tree type;
++ tree type = TREE_TYPE (TREE_TYPE (fndecl));
+
+- type = TREE_TYPE (arg);
+ width = TYPE_PRECISION (type);
+ lo = TREE_INT_CST_LOW (arg);
+ hi = TREE_INT_CST_HIGH (arg);
+
+ switch (DECL_FUNCTION_CODE (fndecl))
+ {
++ case BUILT_IN_BSWAP16:
+ case BUILT_IN_BSWAP32:
+ case BUILT_IN_BSWAP64:
+ {
+@@ -8227,9 +8233,9 @@
+ }
+
+ if (width < HOST_BITS_PER_WIDE_INT)
+- return build_int_cst (TREE_TYPE (TREE_TYPE (fndecl)), r_lo);
++ return build_int_cst (type, r_lo);
+ else
+- return build_int_cst_wide (TREE_TYPE (TREE_TYPE (fndecl)), r_lo, r_hi);
++ return build_int_cst_wide (type, r_lo, r_hi);
+ }
+
+ return NULL_TREE;
+@@ -9692,7 +9698,16 @@
+ case rvc_inf:
+ /* If arg is Inf or NaN and we're logb, return it. */
+ if (TREE_CODE (rettype) == REAL_TYPE)
+- return fold_convert_loc (loc, rettype, arg);
++ {
++ /* For logb(-Inf) we have to return +Inf. */
++ if (real_isinf (value) && real_isneg (value))
++ {
++ REAL_VALUE_TYPE tem;
++ real_inf (&tem);
++ return build_real (rettype, tem);
++ }
++ return fold_convert_loc (loc, rettype, arg);
++ }
+ /* Fall through... */
+ case rvc_zero:
+ /* Zero may set errno and/or raise an exception for logb, also
+@@ -10582,6 +10597,7 @@
+ CASE_FLT_FN (BUILT_IN_LLRINT):
+ return fold_fixed_mathfn (loc, fndecl, arg0);
+
++ case BUILT_IN_BSWAP16:
+ case BUILT_IN_BSWAP32:
+ case BUILT_IN_BSWAP64:
+ return fold_builtin_bswap (fndecl, arg0);
+@@ -14346,6 +14362,7 @@
+ case BUILT_IN_ABS:
+ case BUILT_IN_ALLOCA:
+ case BUILT_IN_ALLOCA_WITH_ALIGN:
++ case BUILT_IN_BSWAP16:
+ case BUILT_IN_BSWAP32:
+ case BUILT_IN_BSWAP64:
+ case BUILT_IN_CLZ:
+--- a/src/gcc/builtins.def
++++ b/src/gcc/builtins.def
+@@ -628,6 +628,7 @@
+ DEF_EXT_LIB_BUILTIN (BUILT_IN_ALLOCA, "alloca", BT_FN_PTR_SIZE, ATTR_MALLOC_NOTHROW_LEAF_LIST)
+ DEF_GCC_BUILTIN (BUILT_IN_APPLY, "apply", BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE, ATTR_NULL)
+ DEF_GCC_BUILTIN (BUILT_IN_APPLY_ARGS, "apply_args", BT_FN_PTR_VAR, ATTR_LEAF_LIST)
++DEF_GCC_BUILTIN (BUILT_IN_BSWAP16, "bswap16", BT_FN_UINT16_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
+ DEF_GCC_BUILTIN (BUILT_IN_BSWAP32, "bswap32", BT_FN_UINT32_UINT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+ DEF_GCC_BUILTIN (BUILT_IN_BSWAP64, "bswap64", BT_FN_UINT64_UINT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+ DEF_EXT_LIB_BUILTIN (BUILT_IN_CLEAR_CACHE, "__clear_cache", BT_FN_VOID_PTR_PTR, ATTR_NOTHROW_LEAF_LIST)
+--- a/src/gcc/c-decl.c
++++ b/src/gcc/c-decl.c
+@@ -4618,7 +4618,9 @@
+ {
+ int failure = complete_array_type (&TREE_TYPE (decl),
+ DECL_INITIAL (decl), true);
+- gcc_assert (!failure);
++ /* If complete_array_type returns 3, it means that the
++ initial value of the compound literal is empty. Allow it. */
++ gcc_assert (failure == 0 || failure == 3);
+
+ type = TREE_TYPE (decl);
+ TREE_TYPE (DECL_INITIAL (decl)) = type;
+--- a/src/gcc/c-family/ChangeLog
++++ b/src/gcc/c-family/ChangeLog
+@@ -1,3 +1,11 @@
++2013-09-01 Iain Sandoe <iain@codesourcery.com>
++
++ Backported from 4.8
++ 2012-06-19 Steven Bosscher <steven@gcc.gnu.org>
++
++ * c-target.def (objc_declare_unresolved_class_reference,
++ objc_declare_class_definition): Add new hooks.
++
+ 2013-04-11 Release Manager
+
+ * GCC 4.7.3 released.
+--- a/src/gcc/c-family/c-common.c
++++ b/src/gcc/c-family/c-common.c
+@@ -4992,7 +4992,7 @@
+ uint8_type_node =
+ TREE_TYPE (identifier_global_value (c_get_ident (UINT8_TYPE)));
+ if (UINT16_TYPE)
+- uint16_type_node =
++ c_uint16_type_node =
+ TREE_TYPE (identifier_global_value (c_get_ident (UINT16_TYPE)));
+ if (UINT32_TYPE)
+ c_uint32_type_node =
+--- a/src/gcc/c-family/c-common.h
++++ b/src/gcc/c-family/c-common.h
+@@ -390,7 +390,7 @@
+ #define int32_type_node c_global_trees[CTI_INT32_TYPE]
+ #define int64_type_node c_global_trees[CTI_INT64_TYPE]
+ #define uint8_type_node c_global_trees[CTI_UINT8_TYPE]
+-#define uint16_type_node c_global_trees[CTI_UINT16_TYPE]
++#define c_uint16_type_node c_global_trees[CTI_UINT16_TYPE]
+ #define c_uint32_type_node c_global_trees[CTI_UINT32_TYPE]
+ #define c_uint64_type_node c_global_trees[CTI_UINT64_TYPE]
+ #define int_least8_type_node c_global_trees[CTI_INT_LEAST8_TYPE]
+--- a/src/gcc/c-family/c-cppbuiltin.c
++++ b/src/gcc/c-family/c-cppbuiltin.c
+@@ -448,8 +448,8 @@
+ builtin_define_type_max ("__INT64_MAX__", int64_type_node);
+ if (uint8_type_node)
+ builtin_define_type_max ("__UINT8_MAX__", uint8_type_node);
+- if (uint16_type_node)
+- builtin_define_type_max ("__UINT16_MAX__", uint16_type_node);
++ if (c_uint16_type_node)
++ builtin_define_type_max ("__UINT16_MAX__", c_uint16_type_node);
+ if (c_uint32_type_node)
+ builtin_define_type_max ("__UINT32_MAX__", c_uint32_type_node);
+ if (c_uint64_type_node)
+--- a/src/gcc/c-family/c-target.def
++++ b/src/gcc/c-family/c-target.def
+@@ -59,7 +59,21 @@
+ common-format string object when the target provides one.",
+ tree, (tree string),
+ NULL)
+-
++
++DEFHOOK
++(objc_declare_unresolved_class_reference,
++ "Declare that Objective C class @var{classname} is referenced\
++ by the current TU.",
++ void, (const char *classname),
++ NULL)
++
++DEFHOOK
++(objc_declare_class_definition,
++ "Declare that Objective C class @var{classname} is defined\
++ by the current TU.",
++ void, (const char *classname),
++ NULL)
++
+ DEFHOOK
+ (string_object_ref_type_p,
+ "If a target implements string objects then this hook should return\
+--- a/src/gcc/cfgexpand.c
++++ b/src/gcc/cfgexpand.c
+@@ -3646,6 +3646,8 @@
+ avoid_complex_debug_insns (rtx insn, rtx *exp_p, int depth)
+ {
+ rtx exp = *exp_p;
++ const char *format_ptr;
++ int i, j;
+
+ if (exp == NULL_RTX)
+ return;
+@@ -3668,8 +3670,7 @@
+ return;
+ }
+
+- const char *format_ptr = GET_RTX_FORMAT (GET_CODE (exp));
+- int i, j;
++ format_ptr = GET_RTX_FORMAT (GET_CODE (exp));
+ for (i = 0; i < GET_RTX_LENGTH (GET_CODE (exp)); i++)
+ switch (*format_ptr++)
+ {
+--- a/src/gcc/collect2-aix.h
++++ b/src/gcc/collect2-aix.h
+@@ -1,5 +1,5 @@
+ /* AIX cross support for collect2.
+- Copyright (C) 2009 Free Software Foundation, Inc.
++ Copyright (C) 2009-2013 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+@@ -29,7 +29,7 @@
+ Definitions adapted from bfd. (Fairly heavily adapted in some cases.)
+ ------------------------------------------------------------------------- */
+
+-/* Compatiblity types for bfd. */
++/* Compatibility types for bfd. */
+ typedef unsigned HOST_WIDE_INT bfd_vma;
+
+ /* The size of an archive's fl_magic field. */
+@@ -135,7 +135,7 @@
+ /* The number of entries in the symbol table. */
+ char f_nsyms[4];
+
+- /* The size of the auxillary header. */
++ /* The size of the auxiliary header. */
+ char f_opthdr[2];
+
+ /* Flags. */
+@@ -157,7 +157,7 @@
+ /* The offset of the symbol table from the start of the file. */
+ char f_symptr[8];
+
+- /* The size of the auxillary header. */
++ /* The size of the auxiliary header. */
+ char f_opthdr[2];
+
+ /* Flags. */
+@@ -222,14 +222,15 @@
+ /* The class of symbol (a C_* value). */
+ char n_sclass[1];
+
+- /* The number of auxillary symbols attached to this entry. */
++ /* The number of auxiliary symbols attached to this entry. */
+ char n_numaux[1];
+ };
+
+ /* Definitions required by collect2. */
+ #define C_EXT 2
+
+-#define F_SHROBJ 0x2000
++#define F_SHROBJ 0x2000
++#define F_LOADONLY 0x4000
+
+ #define N_UNDEF ((short) 0)
+ #define N_TMASK 060
+--- a/src/gcc/collect2.c
++++ b/src/gcc/collect2.c
+@@ -1,7 +1,7 @@
+ /* Collect static initialization info into data structures that can be
+ traversed by C++ initialization and finalization routines.
+ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
++ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2013
+ Free Software Foundation, Inc.
+ Contributed by Chris Smith (csmith@convex.com).
+ Heavily modified by Michael Meissner (meissner@cygnus.com),
+@@ -384,8 +384,8 @@
+
+ /* Delete tempfiles and exit function. */
+
+-void
+-collect_exit (int status)
++static void
++collect_atexit (void)
+ {
+ if (c_file != 0 && c_file[0])
+ maybe_unlink (c_file);
+@@ -413,13 +413,8 @@
+ maybe_unlink (lderrout);
+ }
+
+- if (status != 0 && output_file != 0 && output_file[0])
+- maybe_unlink (output_file);
+-
+ if (response_file)
+ maybe_unlink (response_file);
+-
+- exit (status);
+ }
+
+
+@@ -1132,6 +1127,9 @@
+ signal (SIGCHLD, SIG_DFL);
+ #endif
+
++ if (atexit (collect_atexit) != 0)
++ fatal_error ("atexit failed");
++
+ /* Unlock the stdio streams. */
+ unlock_std_streams ();
+
+@@ -1973,7 +1971,7 @@
+ error ("%s terminated with signal %d [%s]%s",
+ prog, sig, strsignal(sig),
+ WCOREDUMP(status) ? ", core dumped" : "");
+- collect_exit (FATAL_EXIT_CODE);
++ exit (FATAL_EXIT_CODE);
+ }
+
+ if (WIFEXITED (status))
+@@ -1989,7 +1987,7 @@
+ if (ret != 0)
+ {
+ error ("%s returned %d exit status", prog, ret);
+- collect_exit (ret);
++ exit (ret);
+ }
+
+ if (response_file)
+--- a/src/gcc/collect2.h
++++ b/src/gcc/collect2.h
+@@ -1,5 +1,5 @@
+ /* Header file for collect/tlink routines.
+- Copyright (C) 1998, 2003, 2004, 2005, 2007, 2010, 2011
++ Copyright (C) 1998, 2003, 2004, 2005, 2007, 2010, 2011, 2013
+ Free Software Foundation, Inc.
+
+ This file is part of GCC.
+@@ -26,8 +26,6 @@
+ extern struct pex_obj *collect_execute (const char *, char **, const char *,
+ const char *, int flags);
+
+-extern void collect_exit (int) ATTRIBUTE_NORETURN;
+-
+ extern int collect_wait (const char *, struct pex_obj *);
+
+ extern void dump_file (const char *, FILE *);
--- a/src/gcc/combine.c
+++ b/src/gcc/combine.c
@@ -9291,36 +9291,22 @@
@@ -5877,6 +6897,4714 @@
+}
+#undef AARCH64_CHECK_BUILTIN_MODE
+#undef AARCH64_FIND_FRINT_VARIANT
+--- a/src/gcc/config/aarch64/aarch64-cores.def
++++ b/src/gcc/config/aarch64/aarch64-cores.def
+@@ -0,0 +1,38 @@
++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc.
++ Contributed by ARM Ltd.
++
++ This file is part of GCC.
++
++ GCC is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 3, or (at your option)
++ any later version.
++
++ GCC is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with GCC; see the file COPYING3. If not see
++ <http://www.gnu.org/licenses/>. */
++
++/* This is a list of cores that implement AArch64.
++
++ Before using #include to read this file, define a macro:
++
++ AARCH64_CORE(CORE_NAME, CORE_IDENT, ARCH, FLAGS, COSTS)
++
++ The CORE_NAME is the name of the core, represented as a string constant.
++ The CORE_IDENT is the name of the core, represented as an identifier.
++ ARCH is the architecture revision implemented by the chip.
++ FLAGS are the bitwise-or of the traits that apply to that core.
++ This need not include flags implied by the architecture.
++ COSTS is the name of the rtx_costs routine to use. */
++
++/* V8 Architecture Processors.
++ This list currently contains example CPUs that implement AArch64, and
++ therefore serves as a template for adding more CPUs in the future. */
++
++AARCH64_CORE("example-1", large, 8, AARCH64_FL_FPSIMD, generic)
++AARCH64_CORE("example-2", small, 8, AARCH64_FL_FPSIMD, generic)
+--- a/src/gcc/config/aarch64/aarch64-elf-raw.h
++++ b/src/gcc/config/aarch64/aarch64-elf-raw.h
+@@ -0,0 +1,32 @@
++/* Machine description for AArch64 architecture.
++ Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
++ Contributed by ARM Ltd.
++
++ This file is part of GCC.
++
++ GCC is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 3, or (at your option)
++ any later version.
++
++ GCC is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with GCC; see the file COPYING3. If not see
++ <http://www.gnu.org/licenses/>. */
++
++/* Support for bare-metal builds. */
++#ifndef GCC_AARCH64_ELF_RAW_H
++#define GCC_AARCH64_ELF_RAW_H
++
++#define STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s"
++#define ENDFILE_SPEC " crtend%O%s crtn%O%s"
++
++#ifndef LINK_SPEC
++#define LINK_SPEC "%{mbig-endian:-EB} %{mlittle-endian:-EL} -X"
++#endif
++
++#endif /* GCC_AARCH64_ELF_RAW_H */
+--- a/src/gcc/config/aarch64/aarch64-elf.h
++++ b/src/gcc/config/aarch64/aarch64-elf.h
+@@ -0,0 +1,132 @@
++/* Machine description for AArch64 architecture.
++ Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
++ Contributed by ARM Ltd.
++
++ This file is part of GCC.
++
++ GCC is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 3, or (at your option)
++ any later version.
++
++ GCC is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with GCC; see the file COPYING3. If not see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef GCC_AARCH64_ELF_H
++#define GCC_AARCH64_ELF_H
++
++
++#define ASM_OUTPUT_LABELREF(FILE, NAME) \
++ aarch64_asm_output_labelref (FILE, NAME)
++
++#define ASM_OUTPUT_DEF(FILE, NAME1, NAME2) \
++ do \
++ { \
++ assemble_name (FILE, NAME1); \
++ fputs (" = ", FILE); \
++ assemble_name (FILE, NAME2); \
++ fputc ('\n', FILE); \
++ } while (0)
++
++#define TEXT_SECTION_ASM_OP "\t.text"
++#define DATA_SECTION_ASM_OP "\t.data"
++#define BSS_SECTION_ASM_OP "\t.bss"
++
++#define CTORS_SECTION_ASM_OP "\t.section\t.init_array,\"aw\",%init_array"
++#define DTORS_SECTION_ASM_OP "\t.section\t.fini_array,\"aw\",%fini_array"
++
++#undef INIT_SECTION_ASM_OP
++#undef FINI_SECTION_ASM_OP
++#define INIT_ARRAY_SECTION_ASM_OP CTORS_SECTION_ASM_OP
++#define FINI_ARRAY_SECTION_ASM_OP DTORS_SECTION_ASM_OP
++
++/* Since we use .init_array/.fini_array we don't need the markers at
++ the start and end of the ctors/dtors arrays. */
++#define CTOR_LIST_BEGIN asm (CTORS_SECTION_ASM_OP)
++#define CTOR_LIST_END /* empty */
++#define DTOR_LIST_BEGIN asm (DTORS_SECTION_ASM_OP)
++#define DTOR_LIST_END /* empty */
++
++#undef TARGET_ASM_CONSTRUCTOR
++#define TARGET_ASM_CONSTRUCTOR aarch64_elf_asm_constructor
++
++#undef TARGET_ASM_DESTRUCTOR
++#define TARGET_ASM_DESTRUCTOR aarch64_elf_asm_destructor
++
++#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN
++/* Support for -falign-* switches. Use .p2align to ensure that code
++ sections are padded with NOP instructions, rather than zeros. */
++#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE, LOG, MAX_SKIP) \
++ do \
++ { \
++ if ((LOG) != 0) \
++ { \
++ if ((MAX_SKIP) == 0) \
++ fprintf ((FILE), "\t.p2align %d\n", (int) (LOG)); \
++ else \
++ fprintf ((FILE), "\t.p2align %d,,%d\n", \
++ (int) (LOG), (int) (MAX_SKIP)); \
++ } \
++ } while (0)
++
++#endif /* HAVE_GAS_MAX_SKIP_P2ALIGN */
++
++#define JUMP_TABLES_IN_TEXT_SECTION 0
++
++#define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL) \
++ do { \
++ switch (GET_MODE (BODY)) \
++ { \
++ case QImode: \
++ asm_fprintf (STREAM, "\t.byte\t(%LL%d - %LLrtx%d) / 4\n", \
++ VALUE, REL); \
++ break; \
++ case HImode: \
++ asm_fprintf (STREAM, "\t.2byte\t(%LL%d - %LLrtx%d) / 4\n", \
++ VALUE, REL); \
++ break; \
++ case SImode: \
++ case DImode: /* See comment in aarch64_output_casesi. */ \
++ asm_fprintf (STREAM, "\t.word\t(%LL%d - %LLrtx%d) / 4\n", \
++ VALUE, REL); \
++ break; \
++ default: \
++ gcc_unreachable (); \
++ } \
++ } while (0)
++
++#define ASM_OUTPUT_ALIGN(STREAM, POWER) \
++ fprintf(STREAM, "\t.align\t%d\n", (int)POWER)
++
++#define ASM_COMMENT_START "//"
++
++#define REGISTER_PREFIX ""
++#define LOCAL_LABEL_PREFIX "."
++#define USER_LABEL_PREFIX ""
++
++#define GLOBAL_ASM_OP "\t.global\t"
++
++#ifndef ASM_SPEC
++#define ASM_SPEC "\
++%{mbig-endian:-EB} \
++%{mlittle-endian:-EL} \
++%{mcpu=*:-mcpu=%*} \
++%{march=*:-march=%*}"
++#endif
++
++#undef TYPE_OPERAND_FMT
++#define TYPE_OPERAND_FMT "%%%s"
++
++#undef TARGET_ASM_NAMED_SECTION
++#define TARGET_ASM_NAMED_SECTION aarch64_elf_asm_named_section
++
++/* Stabs debug not required. */
++#undef DBX_DEBUGGING_INFO
++
++#endif /* GCC_AARCH64_ELF_H */
+--- a/src/gcc/config/aarch64/aarch64-generic.md
++++ b/src/gcc/config/aarch64/aarch64-generic.md
+@@ -0,0 +1,38 @@
++;; Machine description for AArch64 architecture.
++;; Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
++;; Contributed by ARM Ltd.
++;;
++;; This file is part of GCC.
++;;
++;; GCC is free software; you can redistribute it and/or modify it
++;; under the terms of the GNU General Public License as published by
++;; the Free Software Foundation; either version 3, or (at your option)
++;; any later version.
++;;
++;; GCC is distributed in the hope that it will be useful, but
++;; WITHOUT ANY WARRANTY; without even the implied warranty of
++;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++;; General Public License for more details.
++;;
++;; You should have received a copy of the GNU General Public License
++;; along with GCC; see the file COPYING3. If not see
++;; <http://www.gnu.org/licenses/>.
++
++;; Generic scheduler
++
++(define_automaton "aarch64")
++
++(define_cpu_unit "core" "aarch64")
++
++(define_attr "is_load" "yes,no"
++ (if_then_else (eq_attr "v8type" "fpsimd_load,fpsimd_load2,load1,load2")
++ (const_string "yes")
++ (const_string "no")))
++
++(define_insn_reservation "load" 2
++ (eq_attr "is_load" "yes")
++ "core")
++
++(define_insn_reservation "nonload" 1
++ (eq_attr "is_load" "no")
++ "core")
+--- a/src/gcc/config/aarch64/aarch64-linux.h
++++ b/src/gcc/config/aarch64/aarch64-linux.h
+@@ -0,0 +1,44 @@
++/* Machine description for AArch64 architecture.
++ Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
++ Contributed by ARM Ltd.
++
++ This file is part of GCC.
++
++ GCC is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 3, or (at your option)
++ any later version.
++
++ GCC is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with GCC; see the file COPYING3. If not see
++ <http://www.gnu.org/licenses/>. */
++
++#ifndef GCC_AARCH64_LINUX_H
++#define GCC_AARCH64_LINUX_H
++
++#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64.so.1"
++
++#define LINUX_TARGET_LINK_SPEC "%{h*} \
++ %{static:-Bstatic} \
++ %{shared:-shared} \
++ %{symbolic:-Bsymbolic} \
++ %{rdynamic:-export-dynamic} \
++ -dynamic-linker " GNU_USER_DYNAMIC_LINKER " \
++ -X \
++ %{mbig-endian:-EB} %{mlittle-endian:-EL}"
++
++#define LINK_SPEC LINUX_TARGET_LINK_SPEC
++
++#define TARGET_OS_CPP_BUILTINS() \
++ do \
++ { \
++ GNU_USER_TARGET_OS_CPP_BUILTINS(); \
++ } \
++ while (0)
++
++#endif /* GCC_AARCH64_LINUX_H */
+--- a/src/gcc/config/aarch64/aarch64-modes.def
++++ b/src/gcc/config/aarch64/aarch64-modes.def
+@@ -0,0 +1,54 @@
++/* Machine description for AArch64 architecture.
++ Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
++ Contributed by ARM Ltd.
++
++ This file is part of GCC.
++
++ GCC is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 3, or (at your option)
++ any later version.
++
++ GCC is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with GCC; see the file COPYING3. If not see
++ <http://www.gnu.org/licenses/>. */
++
++CC_MODE (CCFP);
++CC_MODE (CCFPE);
++CC_MODE (CC_SWP);
++CC_MODE (CC_ZESWP); /* zero-extend LHS (but swap to make it RHS). */
++CC_MODE (CC_SESWP); /* sign-extend LHS (but swap to make it RHS). */
++CC_MODE (CC_NZ); /* Only N and Z bits of condition flags are valid. */
++
++/* Vector modes. */
++VECTOR_MODES (INT, 8); /* V8QI V4HI V2SI. */
++VECTOR_MODES (INT, 16); /* V16QI V8HI V4SI V2DI. */
++VECTOR_MODES (FLOAT, 8); /* V2SF. */
++VECTOR_MODES (FLOAT, 16); /* V4SF V2DF. */
++
++/* Oct Int: 256-bit integer mode needed for 32-byte vector arguments. */
++INT_MODE (OI, 32);
++
++/* Opaque integer modes for 3, 6 or 8 Neon double registers (2 is
++ TImode). */
++INT_MODE (EI, 24);
++INT_MODE (CI, 48);
++INT_MODE (XI, 64);
++
++/* Vector modes for register lists. */
++VECTOR_MODES (INT, 32); /* V32QI V16HI V8SI V4DI. */
++VECTOR_MODES (FLOAT, 32); /* V8SF V4DF. */
++
++VECTOR_MODES (INT, 48); /* V32QI V16HI V8SI V4DI. */
++VECTOR_MODES (FLOAT, 48); /* V8SF V4DF. */
++
++VECTOR_MODES (INT, 64); /* V32QI V16HI V8SI V4DI. */
++VECTOR_MODES (FLOAT, 64); /* V8SF V4DF. */
++
++/* Quad float: 128-bit floating mode for long doubles. */
++FLOAT_MODE (TF, 16, ieee_quad_format);
+--- a/src/gcc/config/aarch64/aarch64-option-extensions.def
++++ b/src/gcc/config/aarch64/aarch64-option-extensions.def
+@@ -0,0 +1,37 @@
++/* Copyright (C) 2012 Free Software Foundation, Inc.
++ Contributed by ARM Ltd.
++
++ This file is part of GCC.
++
++ GCC is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 3, or (at your option)
++ any later version.
++
++ GCC is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with GCC; see the file COPYING3. If not see
++ <http://www.gnu.org/licenses/>. */
++
++/* This is a list of ISA extentsions in AArch64.
++
++ Before using #include to read this file, define a macro:
++
++ AARCH64_OPT_EXTENSION(EXT_NAME, FLAGS_ON, FLAGS_OFF)
++
++ EXT_NAME is the name of the extension, represented as a string constant.
++ FLAGS_ON are the bitwise-or of the features that the extension adds.
++ FLAGS_OFF are the bitwise-or of the features that the extension removes. */
++
++/* V8 Architecture Extensions.
++ This list currently contains example extensions for CPUs that implement
++ AArch64, and therefore serves as a template for adding more CPUs in the
++ future. */
++
++AARCH64_OPT_EXTENSION("fp", AARCH64_FL_FP, AARCH64_FL_FPSIMD | AARCH64_FL_CRYPTO)
++AARCH64_OPT_EXTENSION("simd", AARCH64_FL_FPSIMD, AARCH64_FL_SIMD | AARCH64_FL_CRYPTO)
++AARCH64_OPT_EXTENSION("crypto", AARCH64_FL_CRYPTO | AARCH64_FL_FPSIMD, AARCH64_FL_CRYPTO)
+--- a/src/gcc/config/aarch64/aarch64-opts.h
++++ b/src/gcc/config/aarch64/aarch64-opts.h
+@@ -0,0 +1,64 @@
++/* Copyright (C) 2011, 2012 Free Software Foundation, Inc.
++ Contributed by ARM Ltd.
++
++ This file is part of GCC.
++
++ GCC is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published
++ by the Free Software Foundation; either version 3, or (at your
++ option) any later version.
++
++ GCC is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
++ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
++ License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with GCC; see the file COPYING3. If not see
++ <http://www.gnu.org/licenses/>. */
++
++/* Definitions for option handling for AArch64. */
++
++#ifndef GCC_AARCH64_OPTS_H
++#define GCC_AARCH64_OPTS_H
++
++/* The various cores that implement AArch64. */
++enum aarch64_processor
++{
++#define AARCH64_CORE(NAME, IDENT, ARCH, FLAGS, COSTS) \
++ IDENT,
++#include "aarch64-cores.def"
++#undef AARCH64_CORE
++ /* Used to indicate that no processor has been specified. */
++ generic,
++ /* Used to mark the end of the processor table. */
++ aarch64_none
++};
++
++/* TLS types. */
++enum aarch64_tls_type {
++ TLS_TRADITIONAL,
++ TLS_DESCRIPTORS
++};
++
++/* The code model defines the address generation strategy.
++ Most have a PIC and non-PIC variant. */
++enum aarch64_code_model {
++ /* Static code and data fit within a 1MB region.
++ Not fully implemented, mostly treated as SMALL. */
++ AARCH64_CMODEL_TINY,
++ /* Static code, data and GOT/PLT fit within a 1MB region.
++ Not fully implemented, mostly treated as SMALL_PIC. */
++ AARCH64_CMODEL_TINY_PIC,
++ /* Static code and data fit within a 4GB region.
++ The default non-PIC code model. */
++ AARCH64_CMODEL_SMALL,
++ /* Static code, data and GOT/PLT fit within a 4GB region.
++ The default PIC code model. */
++ AARCH64_CMODEL_SMALL_PIC,
++ /* No assumptions about addresses of code and data.
++ The PIC variant is not yet implemented. */
++ AARCH64_CMODEL_LARGE
++};
++
++#endif
+--- a/src/gcc/config/aarch64/aarch64-protos.h
++++ b/src/gcc/config/aarch64/aarch64-protos.h
+@@ -0,0 +1,254 @@
++/* Machine description for AArch64 architecture.
++ Copyright (C) 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
++ Contributed by ARM Ltd.
++
++ This file is part of GCC.
++
++ GCC is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 3, or (at your option)
++ any later version.
++
++ GCC is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with GCC; see the file COPYING3. If not see
++ <http://www.gnu.org/licenses/>. */
++
++
++#ifndef GCC_AARCH64_PROTOS_H
++#define GCC_AARCH64_PROTOS_H
++
++/*
++ SYMBOL_CONTEXT_ADR
++ The symbol is used in a load-address operation.
++ SYMBOL_CONTEXT_MEM
++ The symbol is used as the address in a MEM.
++ */
++enum aarch64_symbol_context
++{
++ SYMBOL_CONTEXT_MEM,
++ SYMBOL_CONTEXT_ADR
++};
++
++/* SYMBOL_SMALL_ABSOLUTE: Generate symbol accesses through
++ high and lo relocs that calculate the base address using a PC
++ relative reloc.
++ So to get the address of foo, we generate
++ adrp x0, foo
++ add x0, x0, :lo12:foo
++
++ To load or store something to foo, we could use the corresponding
++ load store variants that generate an
++ ldr x0, [x0,:lo12:foo]
++ or
++ str x1, [x0, :lo12:foo]
++
++ This corresponds to the small code model of the compiler.
++
++ SYMBOL_SMALL_GOT: Similar to the one above but this
++ gives us the GOT entry of the symbol being referred to :
++ Thus calculating the GOT entry for foo is done using the
++ following sequence of instructions. The ADRP instruction
++ gets us to the page containing the GOT entry of the symbol
++ and the got_lo12 gets us the actual offset in it.
++
++ adrp x0, :got:foo
++ ldr x0, [x0, :gotoff_lo12:foo]
++
++ This corresponds to the small PIC model of the compiler.
++
++ SYMBOL_SMALL_TLSGD
++ SYMBOL_SMALL_TLSDESC
++ SYMBOL_SMALL_GOTTPREL
++ SYMBOL_SMALL_TPREL
++ Each of of these represents a thread-local symbol, and corresponds to the
++ thread local storage relocation operator for the symbol being referred to.
++
++ SYMBOL_FORCE_TO_MEM : Global variables are addressed using
++ constant pool. All variable addresses are spilled into constant
++ pools. The constant pools themselves are addressed using PC
++ relative accesses. This only works for the large code model.
++ */
++enum aarch64_symbol_type
++{
++ SYMBOL_SMALL_ABSOLUTE,
++ SYMBOL_SMALL_GOT,
++ SYMBOL_SMALL_TLSGD,
++ SYMBOL_SMALL_TLSDESC,
++ SYMBOL_SMALL_GOTTPREL,
++ SYMBOL_SMALL_TPREL,
++ SYMBOL_FORCE_TO_MEM
++};
++
++/* A set of tuning parameters contains references to size and time
++ cost models and vectors for address cost calculations, register
++ move costs and memory move costs. */
++
++/* Extra costs for specific insns. Only records the cost above a
++ single insn. */
++
++struct cpu_rtx_cost_table
++{
++ const int memory_load;
++ const int memory_store;
++ const int register_shift;
++ const int int_divide;
++ const int float_divide;
++ const int double_divide;
++ const int int_multiply;
++ const int int_multiply_extend;
++ const int int_multiply_add;
++ const int int_multiply_extend_add;
++ const int float_multiply;
++ const int double_multiply;
++};
++
++/* Additional cost for addresses. */
++struct cpu_addrcost_table
++{
++ const int pre_modify;
++ const int post_modify;
++ const int register_offset;
++ const int register_extend;
++ const int imm_offset;
++};
++
++/* Additional costs for register copies. Cost is for one register. */
++struct cpu_regmove_cost
++{
++ const int GP2GP;
++ const int GP2FP;
++ const int FP2GP;
++ const int FP2FP;
++};
++
++struct tune_params
++{
++ const struct cpu_rtx_cost_table *const insn_extra_cost;
++ const struct cpu_addrcost_table *const addr_cost;
++ const struct cpu_regmove_cost *const regmove_cost;
++ const int memmov_cost;
++};
++
++HOST_WIDE_INT aarch64_initial_elimination_offset (unsigned, unsigned);
++bool aarch64_bitmask_imm (HOST_WIDE_INT val, enum machine_mode);
++bool aarch64_constant_address_p (rtx);
++bool aarch64_float_const_zero_rtx_p (rtx);
++bool aarch64_function_arg_regno_p (unsigned);
++bool aarch64_gen_movmemqi (rtx *);
++bool aarch64_is_extend_from_extract (enum machine_mode, rtx, rtx);
++bool aarch64_is_long_call_p (rtx);
++bool aarch64_label_mentioned_p (rtx);
++bool aarch64_legitimate_pic_operand_p (rtx);
++bool aarch64_move_imm (HOST_WIDE_INT, enum machine_mode);
++bool aarch64_pad_arg_upward (enum machine_mode, const_tree);
++bool aarch64_pad_reg_upward (enum machine_mode, const_tree, bool);
++bool aarch64_regno_ok_for_base_p (int, bool);
++bool aarch64_regno_ok_for_index_p (int, bool);
++bool aarch64_simd_imm_scalar_p (rtx x, enum machine_mode mode);
++bool aarch64_simd_imm_zero_p (rtx, enum machine_mode);
++bool aarch64_simd_shift_imm_p (rtx, enum machine_mode, bool);
++bool aarch64_symbolic_address_p (rtx);
++bool aarch64_symbolic_constant_p (rtx, enum aarch64_symbol_context,
++ enum aarch64_symbol_type *);
++bool aarch64_uimm12_shift (HOST_WIDE_INT);
++const char *aarch64_output_casesi (rtx *);
++enum aarch64_symbol_type aarch64_classify_symbol (rtx,
++ enum aarch64_symbol_context);
++enum aarch64_symbol_type aarch64_classify_tls_symbol (rtx);
++int aarch64_asm_preferred_eh_data_format (int, int);
++int aarch64_hard_regno_mode_ok (unsigned, enum machine_mode);
++int aarch64_hard_regno_nregs (unsigned, enum machine_mode);
++int aarch64_simd_attr_length_move (rtx);
++int aarch64_simd_immediate_valid_for_move (rtx, enum machine_mode, rtx *,
++ int *, unsigned char *, int *,
++ int *);
++int aarch64_uxt_size (int, HOST_WIDE_INT);
++rtx aarch64_final_eh_return_addr (void);
++rtx aarch64_legitimize_reload_address (rtx *, enum machine_mode, int, int, int);
++const char *aarch64_output_move_struct (rtx *operands);
++rtx aarch64_return_addr (int, rtx);
++rtx aarch64_simd_gen_const_vector_dup (enum machine_mode, int);
++bool aarch64_simd_mem_operand_p (rtx);
++rtx aarch64_simd_vect_par_cnst_half (enum machine_mode, bool);
++rtx aarch64_tls_get_addr (void);
++unsigned aarch64_dbx_register_number (unsigned);
++enum reg_class aarch64_regno_regclass (unsigned);
++unsigned aarch64_trampoline_size (void);
++void aarch64_asm_output_labelref (FILE *, const char *);
++void aarch64_elf_asm_named_section (const char *, unsigned, tree);
++void aarch64_expand_epilogue (bool);
++void aarch64_expand_mov_immediate (rtx, rtx);
++void aarch64_expand_prologue (void);
++void aarch64_expand_vector_init (rtx, rtx);
++void aarch64_function_profiler (FILE *, int);
++void aarch64_init_cumulative_args (CUMULATIVE_ARGS *, const_tree, rtx,
++ const_tree, unsigned);
++void aarch64_init_expanders (void);
++void aarch64_print_operand (FILE *, rtx, char);
++void aarch64_print_operand_address (FILE *, rtx);
++
++/* Initialize builtins for SIMD intrinsics. */
++void init_aarch64_simd_builtins (void);
++
++void aarch64_simd_const_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT);
++void aarch64_simd_disambiguate_copy (rtx *, rtx *, rtx *, unsigned int);
++
++/* Emit code to place a AdvSIMD pair result in memory locations (with equal
++ registers). */
++void aarch64_simd_emit_pair_result_insn (enum machine_mode,
++ rtx (*intfn) (rtx, rtx, rtx), rtx,
++ rtx);
++
++/* Expand builtins for SIMD intrinsics. */
++rtx aarch64_simd_expand_builtin (int, tree, rtx);
++
++void aarch64_simd_lane_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT);
++
++/* Emit code for reinterprets. */
++void aarch64_simd_reinterpret (rtx, rtx);
++
++void aarch64_split_128bit_move (rtx, rtx);
++
++bool aarch64_split_128bit_move_p (rtx, rtx);
++
++/* Check for a legitimate floating point constant for FMOV. */
++bool aarch64_float_const_representable_p (rtx);
++
++#if defined (RTX_CODE)
++
++bool aarch64_legitimate_address_p (enum machine_mode, rtx, RTX_CODE, bool);
++enum machine_mode aarch64_select_cc_mode (RTX_CODE, rtx, rtx);
++rtx aarch64_gen_compare_reg (RTX_CODE, rtx, rtx);
++
++void aarch64_expand_compare_and_swap (rtx op[]);
++void aarch64_split_compare_and_swap (rtx op[]);
++void aarch64_split_atomic_op (enum rtx_code, rtx, rtx, rtx, rtx, rtx, rtx);
++
++#endif /* RTX_CODE */
++
++rtx aarch64_load_tp (rtx target);
++void aarch64_init_builtins (void);
++rtx aarch64_expand_builtin (tree exp,
++ rtx target,
++ rtx subtarget ATTRIBUTE_UNUSED,
++ enum machine_mode mode ATTRIBUTE_UNUSED,
++ int ignore ATTRIBUTE_UNUSED);
++tree aarch64_builtin_decl (unsigned, bool ATTRIBUTE_UNUSED);
++
++tree
++aarch64_builtin_vectorized_function (tree fndecl,
++ tree type_out,
++ tree type_in);
++
++extern void aarch64_split_combinev16qi (rtx operands[3]);
++extern void aarch64_expand_vec_perm (rtx target, rtx op0, rtx op1, rtx sel);
++extern bool
++aarch64_expand_vec_perm_const (rtx target, rtx op0, rtx op1, rtx sel);
++
++char* aarch64_output_simd_mov_immediate (rtx *, enum machine_mode, unsigned);
++#endif /* GCC_AARCH64_PROTOS_H */
+--- a/src/gcc/config/aarch64/aarch64-simd-builtins.def
++++ b/src/gcc/config/aarch64/aarch64-simd-builtins.def
+@@ -0,0 +1,258 @@
++/* Machine description for AArch64 architecture.
++ Copyright (C) 2012-2013 Free Software Foundation, Inc.
++ Contributed by ARM Ltd.
++
++ This file is part of GCC.
++
++ GCC is free software; you can redistribute it and/or modify it
++ under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 3, or (at your option)
++ any later version.
++
++ GCC is distributed in the hope that it will be useful, but
++ WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with GCC; see the file COPYING3. If not see
++ <http://www.gnu.org/licenses/>. */
++
++/* In the list below, the BUILTIN_<ITERATOR> macros should
++ correspond to the iterator used to construct the instruction's
++ patterns in aarch64-simd.md. A helpful idiom to follow when
++ adding new builtins is to add a line for each pattern in the md
++ file. Thus, ADDP, which has one pattern defined for the VD_BHSI
++ iterator, and one for DImode, has two entries below. */
++
++ BUILTIN_VD_RE (CREATE, create)
++ BUILTIN_VQ_S (GETLANE, get_lane_signed)
++ BUILTIN_VDQ (GETLANE, get_lane_unsigned)
++ BUILTIN_VDQF (GETLANE, get_lane)
++ VAR1 (GETLANE, get_lane, di)
++ BUILTIN_VDC (COMBINE, combine)
++ BUILTIN_VB (BINOP, pmul)
++ BUILTIN_VDQF (UNOP, sqrt)
++ BUILTIN_VD_BHSI (BINOP, addp)
++ VAR1 (UNOP, addp, di)
++
++ BUILTIN_VD_RE (REINTERP, reinterpretdi)
++ BUILTIN_VDC (REINTERP, reinterpretv8qi)
++ BUILTIN_VDC (REINTERP, reinterpretv4hi)
++ BUILTIN_VDC (REINTERP, reinterpretv2si)
++ BUILTIN_VDC (REINTERP, reinterpretv2sf)
++ BUILTIN_VQ (REINTERP, reinterpretv16qi)
++ BUILTIN_VQ (REINTERP, reinterpretv8hi)
++ BUILTIN_VQ (REINTERP, reinterpretv4si)
++ BUILTIN_VQ (REINTERP, reinterpretv4sf)
++ BUILTIN_VQ (REINTERP, reinterpretv2di)
++ BUILTIN_VQ (REINTERP, reinterpretv2df)
++
++ BUILTIN_VDQ_I (BINOP, dup_lane)
++ BUILTIN_SDQ_I (BINOP, dup_lane)
++ /* Implemented by aarch64_<sur>q<r>shl<mode>. */
++ BUILTIN_VSDQ_I (BINOP, sqshl)
++ BUILTIN_VSDQ_I (BINOP, uqshl)
++ BUILTIN_VSDQ_I (BINOP, sqrshl)
++ BUILTIN_VSDQ_I (BINOP, uqrshl)
++ /* Implemented by aarch64_<su_optab><optab><mode>. */
++ BUILTIN_VSDQ_I (BINOP, sqadd)
++ BUILTIN_VSDQ_I (BINOP, uqadd)
++ BUILTIN_VSDQ_I (BINOP, sqsub)
++ BUILTIN_VSDQ_I (BINOP, uqsub)
++ /* Implemented by aarch64_<sur>qadd<mode>. */
++ BUILTIN_VSDQ_I (BINOP, suqadd)
++ BUILTIN_VSDQ_I (BINOP, usqadd)
++
++ /* Implemented by aarch64_get_dreg<VSTRUCT:mode><VDC:mode>. */
++ BUILTIN_VDC (GETLANE, get_dregoi)
++ BUILTIN_VDC (GETLANE, get_dregci)
++ BUILTIN_VDC (GETLANE, get_dregxi)
++ /* Implemented by aarch64_get_qreg<VSTRUCT:mode><VQ:mode>. */
++ BUILTIN_VQ (GETLANE, get_qregoi)
++ BUILTIN_VQ (GETLANE, get_qregci)
++ BUILTIN_VQ (GETLANE, get_qregxi)
++ /* Implemented by aarch64_set_qreg<VSTRUCT:mode><VQ:mode>. */
++ BUILTIN_VQ (SETLANE, set_qregoi)
++ BUILTIN_VQ (SETLANE, set_qregci)
++ BUILTIN_VQ (SETLANE, set_qregxi)
++ /* Implemented by aarch64_ld<VSTRUCT:nregs><VDC:mode>. */
++ BUILTIN_VDC (LOADSTRUCT, ld2)
++ BUILTIN_VDC (LOADSTRUCT, ld3)
++ BUILTIN_VDC (LOADSTRUCT, ld4)
++ /* Implemented by aarch64_ld<VSTRUCT:nregs><VQ:mode>. */
++ BUILTIN_VQ (LOADSTRUCT, ld2)
++ BUILTIN_VQ (LOADSTRUCT, ld3)
++ BUILTIN_VQ (LOADSTRUCT, ld4)
++ /* Implemented by aarch64_st<VSTRUCT:nregs><VDC:mode>. */
++ BUILTIN_VDC (STORESTRUCT, st2)
++ BUILTIN_VDC (STORESTRUCT, st3)
++ BUILTIN_VDC (STORESTRUCT, st4)
++ /* Implemented by aarch64_st<VSTRUCT:nregs><VQ:mode>. */
++ BUILTIN_VQ (STORESTRUCT, st2)
++ BUILTIN_VQ (STORESTRUCT, st3)
++ BUILTIN_VQ (STORESTRUCT, st4)
++
++ BUILTIN_VQW (BINOP, saddl2)
++ BUILTIN_VQW (BINOP, uaddl2)
++ BUILTIN_VQW (BINOP, ssubl2)
++ BUILTIN_VQW (BINOP, usubl2)
++ BUILTIN_VQW (BINOP, saddw2)
++ BUILTIN_VQW (BINOP, uaddw2)
++ BUILTIN_VQW (BINOP, ssubw2)
++ BUILTIN_VQW (BINOP, usubw2)
++ /* Implemented by aarch64_<ANY_EXTEND:su><ADDSUB:optab>l<mode>. */
++ BUILTIN_VDW (BINOP, saddl)
++ BUILTIN_VDW (BINOP, uaddl)
++ BUILTIN_VDW (BINOP, ssubl)
++ BUILTIN_VDW (BINOP, usubl)
++ /* Implemented by aarch64_<ANY_EXTEND:su><ADDSUB:optab>w<mode>. */
++ BUILTIN_VDW (BINOP, saddw)
++ BUILTIN_VDW (BINOP, uaddw)
++ BUILTIN_VDW (BINOP, ssubw)
++ BUILTIN_VDW (BINOP, usubw)
++ /* Implemented by aarch64_<sur>h<addsub><mode>. */
++ BUILTIN_VQ_S (BINOP, shadd)
++ BUILTIN_VQ_S (BINOP, uhadd)
++ BUILTIN_VQ_S (BINOP, srhadd)
++ BUILTIN_VQ_S (BINOP, urhadd)
++ /* Implemented by aarch64_<sur><addsub>hn<mode>. */
++ BUILTIN_VQN (BINOP, addhn)
++ BUILTIN_VQN (BINOP, raddhn)
++ /* Implemented by aarch64_<sur><addsub>hn2<mode>. */
++ BUILTIN_VQN (TERNOP, addhn2)
++ BUILTIN_VQN (TERNOP, raddhn2)
++
++ BUILTIN_VSQN_HSDI (UNOP, sqmovun)
++ /* Implemented by aarch64_<sur>qmovn<mode>. */
++ BUILTIN_VSQN_HSDI (UNOP, sqmovn)
++ BUILTIN_VSQN_HSDI (UNOP, uqmovn)
++ /* Implemented by aarch64_s<optab><mode>. */
++ BUILTIN_VSDQ_I_BHSI (UNOP, sqabs)
++ BUILTIN_VSDQ_I_BHSI (UNOP, sqneg)
++
++ BUILTIN_VSD_HSI (QUADOP, sqdmlal_lane)
++ BUILTIN_VSD_HSI (QUADOP, sqdmlsl_lane)
++ BUILTIN_VSD_HSI (QUADOP, sqdmlal_laneq)
++ BUILTIN_VSD_HSI (QUADOP, sqdmlsl_laneq)
++ BUILTIN_VQ_HSI (TERNOP, sqdmlal2)
++ BUILTIN_VQ_HSI (TERNOP, sqdmlsl2)
++ BUILTIN_VQ_HSI (QUADOP, sqdmlal2_lane)
++ BUILTIN_VQ_HSI (QUADOP, sqdmlsl2_lane)
++ BUILTIN_VQ_HSI (QUADOP, sqdmlal2_laneq)
++ BUILTIN_VQ_HSI (QUADOP, sqdmlsl2_laneq)
++ BUILTIN_VQ_HSI (TERNOP, sqdmlal2_n)
++ BUILTIN_VQ_HSI (TERNOP, sqdmlsl2_n)
++ /* Implemented by aarch64_sqdml<SBINQOPS:as>l<mode>. */
++ BUILTIN_VSD_HSI (TERNOP, sqdmlal)
++ BUILTIN_VSD_HSI (TERNOP, sqdmlsl)
++ /* Implemented by aarch64_sqdml<SBINQOPS:as>l_n<mode>. */
++ BUILTIN_VD_HSI (TERNOP, sqdmlal_n)
++ BUILTIN_VD_HSI (TERNOP, sqdmlsl_n)
++
++ BUILTIN_VSD_HSI (BINOP, sqdmull)
++ BUILTIN_VSD_HSI (TERNOP, sqdmull_lane)
++ BUILTIN_VD_HSI (TERNOP, sqdmull_laneq)
++ BUILTIN_VD_HSI (BINOP, sqdmull_n)
++ BUILTIN_VQ_HSI (BINOP, sqdmull2)
++ BUILTIN_VQ_HSI (TERNOP, sqdmull2_lane)
++ BUILTIN_VQ_HSI (TERNOP, sqdmull2_laneq)
++ BUILTIN_VQ_HSI (BINOP, sqdmull2_n)
++ /* Implemented by aarch64_sq<r>dmulh<mode>. */
++ BUILTIN_VSDQ_HSI (BINOP, sqdmulh)
++ BUILTIN_VSDQ_HSI (BINOP, sqrdmulh)
++ /* Implemented by aarch64_sq<r>dmulh_lane<q><mode>. */
++ BUILTIN_VDQHS (TERNOP, sqdmulh_lane)
++ BUILTIN_VDQHS (TERNOP, sqdmulh_laneq)
++ BUILTIN_VDQHS (TERNOP, sqrdmulh_lane)
++ BUILTIN_VDQHS (TERNOP, sqrdmulh_laneq)
++ BUILTIN_SD_HSI (TERNOP, sqdmulh_lane)
++ BUILTIN_SD_HSI (TERNOP, sqrdmulh_lane)
++
++ BUILTIN_VSDQ_I_DI (BINOP, sshl_n)
++ BUILTIN_VSDQ_I_DI (BINOP, ushl_n)
++ /* Implemented by aarch64_<sur>shl<mode>. */
++ BUILTIN_VSDQ_I_DI (BINOP, sshl)
++ BUILTIN_VSDQ_I_DI (BINOP, ushl)
++ BUILTIN_VSDQ_I_DI (BINOP, srshl)
++ BUILTIN_VSDQ_I_DI (BINOP, urshl)
++
++ BUILTIN_VSDQ_I_DI (SHIFTIMM, sshr_n)
++ BUILTIN_VSDQ_I_DI (SHIFTIMM, ushr_n)
++ /* Implemented by aarch64_<sur>shr_n<mode>. */
++ BUILTIN_VSDQ_I_DI (SHIFTIMM, srshr_n)
++ BUILTIN_VSDQ_I_DI (SHIFTIMM, urshr_n)
++ /* Implemented by aarch64_<sur>sra_n<mode>. */
++ BUILTIN_VSDQ_I_DI (SHIFTACC, ssra_n)
++ BUILTIN_VSDQ_I_DI (SHIFTACC, usra_n)
++ BUILTIN_VSDQ_I_DI (SHIFTACC, srsra_n)
++ BUILTIN_VSDQ_I_DI (SHIFTACC, ursra_n)
++ /* Implemented by aarch64_<sur>shll_n<mode>. */
++ BUILTIN_VDW (SHIFTIMM, sshll_n)
++ BUILTIN_VDW (SHIFTIMM, ushll_n)
++ /* Implemented by aarch64_<sur>shll2_n<mode>. */
++ BUILTIN_VQW (SHIFTIMM, sshll2_n)
++ BUILTIN_VQW (SHIFTIMM, ushll2_n)
++ /* Implemented by aarch64_<sur>q<r>shr<u>n_n<mode>. */
++ BUILTIN_VSQN_HSDI (SHIFTIMM, sqshrun_n)
++ BUILTIN_VSQN_HSDI (SHIFTIMM, sqrshrun_n)
++ BUILTIN_VSQN_HSDI (SHIFTIMM, sqshrn_n)
++ BUILTIN_VSQN_HSDI (SHIFTIMM, uqshrn_n)
++ BUILTIN_VSQN_HSDI (SHIFTIMM, sqrshrn_n)
++ BUILTIN_VSQN_HSDI (SHIFTIMM, uqrshrn_n)
++ /* Implemented by aarch64_<sur>s<lr>i_n<mode>. */
++ BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssri_n)
++ BUILTIN_VSDQ_I_DI (SHIFTINSERT, usri_n)
++ BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssli_n)
++ BUILTIN_VSDQ_I_DI (SHIFTINSERT, usli_n)
++ /* Implemented by aarch64_<sur>qshl<u>_n<mode>. */
++ BUILTIN_VSDQ_I (SHIFTIMM, sqshlu_n)
++ BUILTIN_VSDQ_I (SHIFTIMM, sqshl_n)
++ BUILTIN_VSDQ_I (SHIFTIMM, uqshl_n)
++
++ /* Implemented by aarch64_cm<cmp><mode>. */
++ BUILTIN_VSDQ_I_DI (BINOP, cmeq)
++ BUILTIN_VSDQ_I_DI (BINOP, cmge)
++ BUILTIN_VSDQ_I_DI (BINOP, cmgt)
++ BUILTIN_VSDQ_I_DI (BINOP, cmle)
++ BUILTIN_VSDQ_I_DI (BINOP, cmlt)
++ /* Implemented by aarch64_cm<cmp><mode>. */
++ BUILTIN_VSDQ_I_DI (BINOP, cmhs)
++ BUILTIN_VSDQ_I_DI (BINOP, cmhi)
++ BUILTIN_VSDQ_I_DI (BINOP, cmtst)
++
++ /* Implemented by aarch64_<fmaxmin><mode>. */
++ BUILTIN_VDQF (BINOP, fmax)
++ BUILTIN_VDQF (BINOP, fmin)
++ /* Implemented by aarch64_<maxmin><mode>. */
++ BUILTIN_VDQ_BHSI (BINOP, smax)
++ BUILTIN_VDQ_BHSI (BINOP, smin)
++ BUILTIN_VDQ_BHSI (BINOP, umax)
++ BUILTIN_VDQ_BHSI (BINOP, umin)
++
++ /* Implemented by aarch64_frint<frint_suffix><mode>. */
++ BUILTIN_VDQF (UNOP, frintz)
++ BUILTIN_VDQF (UNOP, frintp)
++ BUILTIN_VDQF (UNOP, frintm)
++ BUILTIN_VDQF (UNOP, frinti)
++ BUILTIN_VDQF (UNOP, frintx)
++ BUILTIN_VDQF (UNOP, frinta)
++
++ /* Implemented by aarch64_fcvt<frint_suffix><su><mode>. */
++ BUILTIN_VDQF (UNOP, fcvtzs)
++ BUILTIN_VDQF (UNOP, fcvtzu)
++ BUILTIN_VDQF (UNOP, fcvtas)
++ BUILTIN_VDQF (UNOP, fcvtau)
++ BUILTIN_VDQF (UNOP, fcvtps)
++ BUILTIN_VDQF (UNOP, fcvtpu)
++ BUILTIN_VDQF (UNOP, fcvtms)
++ BUILTIN_VDQF (UNOP, fcvtmu)
++
++ /* Implemented by
++ aarch64_<PERMUTE:perm_insn><PERMUTE:perm_hilo><mode>. */
++ BUILTIN_VALL (BINOP, zip1)
++ BUILTIN_VALL (BINOP, zip2)
++ BUILTIN_VALL (BINOP, uzp1)
++ BUILTIN_VALL (BINOP, uzp2)
++ BUILTIN_VALL (BINOP, trn1)
++ BUILTIN_VALL (BINOP, trn2)
+--- a/src/gcc/config/aarch64/aarch64-simd.md
++++ b/src/gcc/config/aarch64/aarch64-simd.md
+@@ -0,0 +1,3716 @@
++;; Machine description for AArch64 AdvSIMD architecture.
++;; Copyright (C) 2011, 2012, 2013 Free Software Foundation, Inc.
++;; Contributed by ARM Ltd.
++;;
++;; This file is part of GCC.
++;;
++;; GCC is free software; you can redistribute it and/or modify it
++;; under the terms of the GNU General Public License as published by
++;; the Free Software Foundation; either version 3, or (at your option)
++;; any later version.
++;;
++;; GCC is distributed in the hope that it will be useful, but
++;; WITHOUT ANY WARRANTY; without even the implied warranty of
++;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++;; General Public License for more details.
++;;
++;; You should have received a copy of the GNU General Public License
++;; along with GCC; see the file COPYING3. If not see
++;; <http://www.gnu.org/licenses/>.
++
++
++; Main data types used by the insntructions
++
++(define_attr "simd_mode" "unknown,none,V8QI,V16QI,V4HI,V8HI,V2SI,V4SI,V2DI,V2SF,V4SF,V2DF,OI,CI,XI,DI,DF,SI,HI,QI"
++ (const_string "unknown"))
++
++
++; Classification of AdvSIMD instructions for scheduling purposes.
++; Do not set this attribute and the "v8type" attribute together in
++; any instruction pattern.
++
++; simd_abd integer absolute difference and accumulate.
++; simd_abdl integer absolute difference and accumulate (long).
++; simd_adal integer add and accumulate (long).
++; simd_add integer addition/subtraction.
++; simd_addl integer addition/subtraction (long).
++; simd_addlv across lanes integer sum (long).
++; simd_addn integer addition/subtraction (narrow).
++; simd_addn2 integer addition/subtraction (narrow, high).
++; simd_addv across lanes integer sum.
++; simd_cls count leading sign/zero bits.
++; simd_cmp compare / create mask.
++; simd_cnt population count.
++; simd_dup duplicate element.
++; simd_dupgp duplicate general purpose register.
++; simd_ext bitwise extract from pair.
++; simd_fadd floating point add/sub.
++; simd_fcmp floating point compare.
++; simd_fcvti floating point convert to integer.
++; simd_fcvtl floating-point convert upsize.
++; simd_fcvtn floating-point convert downsize (narrow).
++; simd_fcvtn2 floating-point convert downsize (narrow, high).
++; simd_fdiv floating point division.
++; simd_fminmax floating point min/max.
++; simd_fminmaxv across lanes floating point min/max.
++; simd_fmla floating point multiply-add.
++; simd_fmla_elt floating point multiply-add (by element).
++; simd_fmul floating point multiply.
++; simd_fmul_elt floating point multiply (by element).
++; simd_fnegabs floating point neg/abs.
++; simd_frcpe floating point reciprocal estimate.
++; simd_frcps floating point reciprocal step.
++; simd_frecx floating point reciprocal exponent.
++; simd_frint floating point round to integer.
++; simd_fsqrt floating point square root.
++; simd_icvtf integer convert to floating point.
++; simd_ins insert element.
++; simd_insgp insert general purpose register.
++; simd_load1 load multiple structures to one register (LD1).
++; simd_load1r load single structure to all lanes of one register (LD1R).
++; simd_load1s load single structure to one lane of one register (LD1 [index]).
++; simd_load2 load multiple structures to two registers (LD1, LD2).
++; simd_load2r load single structure to all lanes of two registers (LD1R, LD2R).
++; simd_load2s load single structure to one lane of two registers (LD2 [index]).
++; simd_load3 load multiple structures to three registers (LD1, LD3).
++; simd_load3r load single structure to all lanes of three registers (LD3R).
++; simd_load3s load single structure to one lane of three registers (LD3 [index]).
++; simd_load4 load multiple structures to four registers (LD1, LD2, LD4).
++; simd_load4r load single structure to all lanes of four registers (LD4R).
++; simd_load4s load single structure to one lane of four registers (LD4 [index]).
++; simd_logic logical operation.
++; simd_logic_imm logcial operation (immediate).
++; simd_minmax integer min/max.
++; simd_minmaxv across lanes integer min/max,
++; simd_mla integer multiply-accumulate.
++; simd_mla_elt integer multiply-accumulate (by element).
++; simd_mlal integer multiply-accumulate (long).
++; simd_mlal_elt integer multiply-accumulate (by element, long).
++; simd_move move register.
++; simd_move_imm move immediate.
++; simd_movgp move element to general purpose register.
++; simd_mul integer multiply.
++; simd_mul_elt integer multiply (by element).
++; simd_mull integer multiply (long).
++; simd_mull_elt integer multiply (by element, long).
++; simd_negabs integer negate/absolute.
++; simd_rbit bitwise reverse.
++; simd_rcpe integer reciprocal estimate.
++; simd_rcps integer reciprocal square root.
++; simd_rev element reverse.
++; simd_sat_add integer saturating addition/subtraction.
++; simd_sat_mlal integer saturating multiply-accumulate (long).
++; simd_sat_mlal_elt integer saturating multiply-accumulate (by element, long).
++; simd_sat_mul integer saturating multiply.
++; simd_sat_mul_elt integer saturating multiply (by element).
++; simd_sat_mull integer saturating multiply (long).
++; simd_sat_mull_elt integer saturating multiply (by element, long).
++; simd_sat_negabs integer saturating negate/absolute.
++; simd_sat_shift integer saturating shift.
++; simd_sat_shift_imm integer saturating shift (immediate).
++; simd_sat_shiftn_imm integer saturating shift (narrow, immediate).
++; simd_sat_shiftn2_imm integer saturating shift (narrow, high, immediate).
++; simd_shift shift register/vector.
++; simd_shift_acc shift accumulate.
++; simd_shift_imm shift immediate.
++; simd_shift_imm_acc shift immediate and accumualte.
++; simd_shiftl shift register/vector (long).
++; simd_shiftl_imm shift register/vector (long, immediate).
++; simd_shiftn_imm shift register/vector (narrow, immediate).
++; simd_shiftn2_imm shift register/vector (narrow, high, immediate).
++; simd_store1 store multiple structures from one register (ST1).
++; simd_store1s store single structure from one lane of one register (ST1 [index]).
++; simd_store2 store multiple structures from two registers (ST1, ST2).
++; simd_store2s store single structure from one lane of two registers (ST2 [index]).
++; simd_store3 store multiple structures from three registers (ST1, ST3).
++; simd_store3s store single structure from one lane of three register (ST3 [index]).
++; simd_store4 store multiple structures from four registers (ST1, ST2, ST4).
++; simd_store4s store single structure from one lane for four registers (ST4 [index]).
++; simd_tbl table lookup.
++; simd_trn transpose.
++; simd_uzp unzip.
++; simd_zip zip.
++
++(define_attr "simd_type"
++ "simd_abd,\
++ simd_abdl,\
++ simd_adal,\
++ simd_add,\
++ simd_addl,\
++ simd_addlv,\
++ simd_addn,\
++ simd_addn2,\
++ simd_addv,\
++ simd_cls,\
++ simd_cmp,\
++ simd_cnt,\
++ simd_dup,\
++ simd_dupgp,\
++ simd_ext,\
++ simd_fadd,\
++ simd_fcmp,\
++ simd_fcvti,\
++ simd_fcvtl,\
++ simd_fcvtn,\
++ simd_fcvtn2,\
++ simd_fdiv,\
++ simd_fminmax,\
++ simd_fminmaxv,\
++ simd_fmla,\
++ simd_fmla_elt,\
++ simd_fmul,\
++ simd_fmul_elt,\
++ simd_fnegabs,\
++ simd_frcpe,\
++ simd_frcps,\
++ simd_frecx,\
++ simd_frint,\
++ simd_fsqrt,\
++ simd_icvtf,\
++ simd_ins,\
++ simd_insgp,\
++ simd_load1,\
++ simd_load1r,\
++ simd_load1s,\
++ simd_load2,\
++ simd_load2r,\
++ simd_load2s,\
++ simd_load3,\
++ simd_load3r,\
++ simd_load3s,\
++ simd_load4,\
++ simd_load4r,\
++ simd_load4s,\
++ simd_logic,\
++ simd_logic_imm,\
++ simd_minmax,\
++ simd_minmaxv,\
++ simd_mla,\
++ simd_mla_elt,\
++ simd_mlal,\
++ simd_mlal_elt,\
++ simd_movgp,\
++ simd_move,\
++ simd_move_imm,\
++ simd_mul,\
++ simd_mul_elt,\
++ simd_mull,\
++ simd_mull_elt,\
++ simd_negabs,\
++ simd_rbit,\
++ simd_rcpe,\
++ simd_rcps,\
++ simd_rev,\
++ simd_sat_add,\
++ simd_sat_mlal,\
++ simd_sat_mlal_elt,\
++ simd_sat_mul,\
++ simd_sat_mul_elt,\
++ simd_sat_mull,\
++ simd_sat_mull_elt,\
++ simd_sat_negabs,\
++ simd_sat_shift,\
++ simd_sat_shift_imm,\
++ simd_sat_shiftn_imm,\
++ simd_sat_shiftn2_imm,\
++ simd_shift,\
++ simd_shift_acc,\
++ simd_shift_imm,\
++ simd_shift_imm_acc,\
++ simd_shiftl,\
++ simd_shiftl_imm,\
++ simd_shiftn_imm,\
++ simd_shiftn2_imm,\
++ simd_store1,\
++ simd_store1s,\
++ simd_store2,\
++ simd_store2s,\
++ simd_store3,\
++ simd_store3s,\
++ simd_store4,\
++ simd_store4s,\
++ simd_tbl,\
++ simd_trn,\
++ simd_uzp,\
++ simd_zip,\
++ none"
++ (const_string "none"))
++
++
++; The "neon_type" attribute is used by the AArch32 backend. Below is a mapping
++; from "simd_type" to "neon_type".
++
++(define_attr "neon_type"
++ "neon_int_1,neon_int_2,neon_int_3,neon_int_4,neon_int_5,neon_vqneg_vqabs,
++ neon_vmov,neon_vaba,neon_vsma,neon_vaba_qqq,
++ neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,neon_mul_qqq_8_16_32_ddd_32,
++ neon_mul_qdd_64_32_long_qqd_16_ddd_32_scalar_64_32_long_scalar,
++ neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,neon_mla_qqq_8_16,
++ neon_mla_ddd_32_qqd_16_ddd_32_scalar_qdd_64_32_long_scalar_qdd_64_32_long,
++ neon_mla_qqq_32_qqd_32_scalar,neon_mul_ddd_16_scalar_32_16_long_scalar,
++ neon_mul_qqd_32_scalar,neon_mla_ddd_16_scalar_qdd_32_16_long_scalar,
++ neon_shift_1,neon_shift_2,neon_shift_3,neon_vshl_ddd,
++ neon_vqshl_vrshl_vqrshl_qqq,neon_vsra_vrsra,neon_fp_vadd_ddd_vabs_dd,
++ neon_fp_vadd_qqq_vabs_qq,neon_fp_vsum,neon_fp_vmul_ddd,neon_fp_vmul_qqd,
++ neon_fp_vmla_ddd,neon_fp_vmla_qqq,neon_fp_vmla_ddd_scalar,
++ neon_fp_vmla_qqq_scalar,neon_fp_vrecps_vrsqrts_ddd,
++ neon_fp_vrecps_vrsqrts_qqq,neon_bp_simple,neon_bp_2cycle,neon_bp_3cycle,
++ neon_ldr,neon_str,neon_vld1_1_2_regs,neon_vld1_3_4_regs,
++ neon_vld2_2_regs_vld1_vld2_all_lanes,neon_vld2_4_regs,neon_vld3_vld4,
++ neon_vst1_1_2_regs_vst2_2_regs,neon_vst1_3_4_regs,
++ neon_vst2_4_regs_vst3_vst4,neon_vst3_vst4,neon_vld1_vld2_lane,
++ neon_vld3_vld4_lane,neon_vst1_vst2_lane,neon_vst3_vst4_lane,
++ neon_vld3_vld4_all_lanes,neon_mcr,neon_mcr_2_mcrr,neon_mrc,neon_mrrc,
++ neon_ldm_2,neon_stm_2,none,unknown"
++ (cond [
++ (eq_attr "simd_type" "simd_dup") (const_string "neon_bp_simple")
++ (eq_attr "simd_type" "simd_movgp") (const_string "neon_bp_simple")
++ (eq_attr "simd_type" "simd_add,simd_logic,simd_logic_imm") (const_string "neon_int_1")
++ (eq_attr "simd_type" "simd_negabs,simd_addlv") (const_string "neon_int_3")
++ (eq_attr "simd_type" "simd_addn,simd_addn2,simd_addl,simd_sat_add,simd_sat_negabs") (const_string "neon_int_4")
++ (eq_attr "simd_type" "simd_move") (const_string "neon_vmov")
++ (eq_attr "simd_type" "simd_ins") (const_string "neon_mcr")
++ (and (eq_attr "simd_type" "simd_mul,simd_sat_mul") (eq_attr "simd_mode" "V8QI,V4HI")) (const_string "neon_mul_ddd_8_16_qdd_16_8_long_32_16_long")
++ (and (eq_attr "simd_type" "simd_mul,simd_sat_mul") (eq_attr "simd_mode" "V2SI,V8QI,V16QI,V2SI")) (const_string "neon_mul_qqq_8_16_32_ddd_32")
++ (and (eq_attr "simd_type" "simd_mull,simd_sat_mull") (eq_attr "simd_mode" "V8QI,V16QI,V4HI,V8HI")) (const_string "neon_mul_ddd_8_16_qdd_16_8_long_32_16_long")
++ (and (eq_attr "simd_type" "simd_mull,simd_sat_mull") (eq_attr "simd_mode" "V2SI,V4SI,V2DI")) (const_string "neon_mul_qdd_64_32_long_qqd_16_ddd_32_scalar_64_32_long_scalar")
++ (and (eq_attr "simd_type" "simd_mla,simd_sat_mlal") (eq_attr "simd_mode" "V8QI,V4HI")) (const_string "neon_mla_ddd_8_16_qdd_16_8_long_32_16_long")
++ (and (eq_attr "simd_type" "simd_mla,simd_sat_mlal") (eq_attr "simd_mode" "V2SI")) (const_string "neon_mla_ddd_32_qqd_16_ddd_32_scalar_qdd_64_32_long_scalar_qdd_64_32_long")
++ (and (eq_attr "simd_type" "simd_mla,simd_sat_mlal") (eq_attr "simd_mode" "V16QI,V8HI")) (const_string "neon_mla_qqq_8_16")
++ (and (eq_attr "simd_type" "simd_mla,simd_sat_mlal") (eq_attr "simd_mode" "V4SI")) (const_string "neon_mla_qqq_32_qqd_32_scalar")
++ (and (eq_attr "simd_type" "simd_mlal") (eq_attr "simd_mode" "V8QI,V16QI,V4HI,V8HI")) (const_string "neon_mla_ddd_8_16_qdd_16_8_long_32_16_long")
++ (and (eq_attr "simd_type" "simd_mlal") (eq_attr "simd_mode" "V2SI,V4SI,V2DI")) (const_string "neon_mla_ddd_32_qqd_16_ddd_32_scalar_qdd_64_32_long_scalar_qdd_64_32_long")
++ (and (eq_attr "simd_type" "simd_fmla") (eq_attr "simd_mode" "V2SF")) (const_string "neon_fp_vmla_ddd")
++ (and (eq_attr "simd_type" "simd_fmla") (eq_attr "simd_mode" "V4SF,V2DF")) (const_string "neon_fp_vmla_qqq")
++ (and (eq_attr "simd_type" "simd_fmla_elt") (eq_attr "simd_mode" "V2SF")) (const_string "neon_fp_vmla_ddd_scalar")
++ (and (eq_attr "simd_type" "simd_fmla_elt") (eq_attr "simd_mode" "V4SF,V2DF")) (const_string "neon_fp_vmla_qqq_scalar")
++ (and (eq_attr "simd_type" "simd_fmul,simd_fmul_elt,simd_fdiv,simd_fsqrt") (eq_attr "simd_mode" "V2SF")) (const_string "neon_fp_vmul_ddd")
++ (and (eq_attr "simd_type" "simd_fmul,simd_fmul_elt,simd_fdiv,simd_fsqrt") (eq_attr "simd_mode" "V4SF,V2DF")) (const_string "neon_fp_vmul_qqd")
++ (and (eq_attr "simd_type" "simd_fadd") (eq_attr "simd_mode" "V2SF")) (const_string "neon_fp_vadd_ddd_vabs_dd")
++ (and (eq_attr "simd_type" "simd_fadd") (eq_attr "simd_mode" "V4SF,V2DF")) (const_string "neon_fp_vadd_qqq_vabs_qq")
++ (and (eq_attr "simd_type" "simd_fnegabs,simd_fminmax,simd_fminmaxv") (eq_attr "simd_mode" "V2SF")) (const_string "neon_fp_vadd_ddd_vabs_dd")
++ (and (eq_attr "simd_type" "simd_fnegabs,simd_fminmax,simd_fminmaxv") (eq_attr "simd_mode" "V4SF,V2DF")) (const_string "neon_fp_vadd_qqq_vabs_qq")
++ (and (eq_attr "simd_type" "simd_shift,simd_shift_acc") (eq_attr "simd_mode" "V8QI,V4HI,V2SI")) (const_string "neon_vshl_ddd")
++ (and (eq_attr "simd_type" "simd_shift,simd_shift_acc") (eq_attr "simd_mode" "V16QI,V8HI,V4SI,V2DI")) (const_string "neon_shift_3")
++ (eq_attr "simd_type" "simd_minmax,simd_minmaxv") (const_string "neon_int_5")
++ (eq_attr "simd_type" "simd_shiftn_imm,simd_shiftn2_imm,simd_shiftl_imm,") (const_string "neon_shift_1")
++ (eq_attr "simd_type" "simd_load1,simd_load2") (const_string "neon_vld1_1_2_regs")
++ (eq_attr "simd_type" "simd_load3,simd_load3") (const_string "neon_vld1_3_4_regs")
++ (eq_attr "simd_type" "simd_load1r,simd_load2r,simd_load3r,simd_load4r") (const_string "neon_vld2_2_regs_vld1_vld2_all_lanes")
++ (eq_attr "simd_type" "simd_load1s,simd_load2s") (const_string "neon_vld1_vld2_lane")
++ (eq_attr "simd_type" "simd_load3s,simd_load4s") (const_string "neon_vld3_vld4_lane")
++ (eq_attr "simd_type" "simd_store1,simd_store2") (const_string "neon_vst1_1_2_regs_vst2_2_regs")
++ (eq_attr "simd_type" "simd_store3,simd_store4") (const_string "neon_vst1_3_4_regs")
++ (eq_attr "simd_type" "simd_store1s,simd_store2s") (const_string "neon_vst1_vst2_lane")
++ (eq_attr "simd_type" "simd_store3s,simd_store4s") (const_string "neon_vst3_vst4_lane")
++ (and (eq_attr "simd_type" "simd_frcpe,simd_frcps") (eq_attr "simd_mode" "V2SF")) (const_string "neon_fp_vrecps_vrsqrts_ddd")
++ (and (eq_attr "simd_type" "simd_frcpe,simd_frcps") (eq_attr "simd_mode" "V4SF,V2DF")) (const_string "neon_fp_vrecps_vrsqrts_qqq")
++ (eq_attr "simd_type" "none") (const_string "none")
++ ]
++ (const_string "unknown")))
++
++
++(define_expand "mov<mode>"
++ [(set (match_operand:VALL 0 "aarch64_simd_nonimmediate_operand" "")
++ (match_operand:VALL 1 "aarch64_simd_general_operand" ""))]
++ "TARGET_SIMD"
++ "
++ if (GET_CODE (operands[0]) == MEM)
++ operands[1] = force_reg (<MODE>mode, operands[1]);
++ "
++)
++
++(define_expand "movmisalign<mode>"
++ [(set (match_operand:VALL 0 "aarch64_simd_nonimmediate_operand" "")
++ (match_operand:VALL 1 "aarch64_simd_general_operand" ""))]
++ "TARGET_SIMD"
++{
++ /* This pattern is not permitted to fail during expansion: if both arguments
++ are non-registers (e.g. memory := constant, which can be created by the
++ auto-vectorizer), force operand 1 into a register. */
++ if (!register_operand (operands[0], <MODE>mode)
++ && !register_operand (operands[1], <MODE>mode))
++ operands[1] = force_reg (<MODE>mode, operands[1]);
++})
++
++(define_insn "aarch64_simd_dup<mode>"
++ [(set (match_operand:VDQ 0 "register_operand" "=w")
++ (vec_duplicate:VDQ (match_operand:<VEL> 1 "register_operand" "r")))]
++ "TARGET_SIMD"
++ "dup\\t%0.<Vtype>, %<vw>1"
++ [(set_attr "simd_type" "simd_dupgp")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_dup_lane<mode>"
++ [(set (match_operand:VDQ_I 0 "register_operand" "=w")
++ (vec_duplicate:VDQ_I
++ (vec_select:<VEL>
++ (match_operand:<VCON> 1 "register_operand" "w")
++ (parallel [(match_operand:SI 2 "immediate_operand" "i")])
++ )))]
++ "TARGET_SIMD"
++ "dup\\t%<v>0<Vmtype>, %1.<Vetype>[%2]"
++ [(set_attr "simd_type" "simd_dup")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_dup_lane<mode>"
++ [(set (match_operand:SDQ_I 0 "register_operand" "=w")
++ (vec_select:<VEL>
++ (match_operand:<VCON> 1 "register_operand" "w")
++ (parallel [(match_operand:SI 2 "immediate_operand" "i")])
++ ))]
++ "TARGET_SIMD"
++ "dup\\t%<v>0<Vmtype>, %1.<Vetype>[%2]"
++ [(set_attr "simd_type" "simd_dup")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_simd_dup<mode>"
++ [(set (match_operand:VDQF 0 "register_operand" "=w")
++ (vec_duplicate:VDQF (match_operand:<VEL> 1 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "dup\\t%0.<Vtype>, %1.<Vetype>[0]"
++ [(set_attr "simd_type" "simd_dup")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "*aarch64_simd_mov<mode>"
++ [(set (match_operand:VD 0 "aarch64_simd_nonimmediate_operand"
++ "=w, Utv, w, ?r, ?w, ?r, w")
++ (match_operand:VD 1 "aarch64_simd_general_operand"
++ "Utv, w, w, w, r, r, Dn"))]
++ "TARGET_SIMD
++ && (register_operand (operands[0], <MODE>mode)
++ || register_operand (operands[1], <MODE>mode))"
++{
++ switch (which_alternative)
++ {
++ case 0: return "ld1\t{%0.<Vtype>}, %1";
++ case 1: return "st1\t{%1.<Vtype>}, %0";
++ case 2: return "orr\t%0.<Vbtype>, %1.<Vbtype>, %1.<Vbtype>";
++ case 3: return "umov\t%0, %1.d[0]";
++ case 4: return "ins\t%0.d[0], %1";
++ case 5: return "mov\t%0, %1";
++ case 6:
++ return aarch64_output_simd_mov_immediate (&operands[1],
++ <MODE>mode, 64);
++ default: gcc_unreachable ();
++ }
++}
++ [(set_attr "simd_type" "simd_load1,simd_store1,simd_move,simd_movgp,simd_insgp,simd_move,simd_move_imm")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "*aarch64_simd_mov<mode>"
++ [(set (match_operand:VQ 0 "aarch64_simd_nonimmediate_operand"
++ "=w, Utv, w, ?r, ?w, ?r, w")
++ (match_operand:VQ 1 "aarch64_simd_general_operand"
++ "Utv, w, w, w, r, r, Dn"))]
++ "TARGET_SIMD
++ && (register_operand (operands[0], <MODE>mode)
++ || register_operand (operands[1], <MODE>mode))"
++{
++ switch (which_alternative)
++ {
++ case 0: return "ld1\t{%0.<Vtype>}, %1";
++ case 1: return "st1\t{%1.<Vtype>}, %0";
++ case 2: return "orr\t%0.<Vbtype>, %1.<Vbtype>, %1.<Vbtype>";
++ case 3: return "umov\t%0, %1.d[0]\;umov\t%H0, %1.d[1]";
++ case 4: return "ins\t%0.d[0], %1\;ins\t%0.d[1], %H1";
++ case 5: return "#";
++ case 6:
++ return aarch64_output_simd_mov_immediate (&operands[1],
++ <MODE>mode, 128);
++ default: gcc_unreachable ();
++ }
++}
++ [(set_attr "simd_type" "simd_load1,simd_store1,simd_move,simd_movgp,simd_insgp,simd_move,simd_move_imm")
++ (set_attr "simd_mode" "<MODE>")
++ (set_attr "length" "4,4,4,8,8,8,4")]
++)
++
++(define_split
++ [(set (match_operand:VQ 0 "register_operand" "")
++ (match_operand:VQ 1 "register_operand" ""))]
++ "TARGET_SIMD && reload_completed
++ && GP_REGNUM_P (REGNO (operands[0]))
++ && GP_REGNUM_P (REGNO (operands[1]))"
++ [(set (match_dup 0) (match_dup 1))
++ (set (match_dup 2) (match_dup 3))]
++{
++ int rdest = REGNO (operands[0]);
++ int rsrc = REGNO (operands[1]);
++ rtx dest[2], src[2];
++
++ dest[0] = gen_rtx_REG (DImode, rdest);
++ src[0] = gen_rtx_REG (DImode, rsrc);
++ dest[1] = gen_rtx_REG (DImode, rdest + 1);
++ src[1] = gen_rtx_REG (DImode, rsrc + 1);
++
++ aarch64_simd_disambiguate_copy (operands, dest, src, 2);
++})
++
++(define_insn "orn<mode>3"
++ [(set (match_operand:VDQ 0 "register_operand" "=w")
++ (ior:VDQ (not:VDQ (match_operand:VDQ 1 "register_operand" "w"))
++ (match_operand:VDQ 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "orn\t%0.<Vbtype>, %2.<Vbtype>, %1.<Vbtype>"
++ [(set_attr "simd_type" "simd_logic")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "bic<mode>3"
++ [(set (match_operand:VDQ 0 "register_operand" "=w")
++ (and:VDQ (not:VDQ (match_operand:VDQ 1 "register_operand" "w"))
++ (match_operand:VDQ 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "bic\t%0.<Vbtype>, %2.<Vbtype>, %1.<Vbtype>"
++ [(set_attr "simd_type" "simd_logic")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "add<mode>3"
++ [(set (match_operand:VDQ 0 "register_operand" "=w")
++ (plus:VDQ (match_operand:VDQ 1 "register_operand" "w")
++ (match_operand:VDQ 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "add\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_add")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "sub<mode>3"
++ [(set (match_operand:VDQ 0 "register_operand" "=w")
++ (minus:VDQ (match_operand:VDQ 1 "register_operand" "w")
++ (match_operand:VDQ 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "sub\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_add")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "mul<mode>3"
++ [(set (match_operand:VDQM 0 "register_operand" "=w")
++ (mult:VDQM (match_operand:VDQM 1 "register_operand" "w")
++ (match_operand:VDQM 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "mul\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_mul")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "neg<mode>2"
++ [(set (match_operand:VDQM 0 "register_operand" "=w")
++ (neg:VDQM (match_operand:VDQM 1 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "neg\t%0.<Vtype>, %1.<Vtype>"
++ [(set_attr "simd_type" "simd_negabs")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "abs<mode>2"
++ [(set (match_operand:VDQ 0 "register_operand" "=w")
++ (abs:VDQ (match_operand:VDQ 1 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "abs\t%0.<Vtype>, %1.<Vtype>"
++ [(set_attr "simd_type" "simd_negabs")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "and<mode>3"
++ [(set (match_operand:VDQ 0 "register_operand" "=w")
++ (and:VDQ (match_operand:VDQ 1 "register_operand" "w")
++ (match_operand:VDQ 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "and\t%0.<Vbtype>, %1.<Vbtype>, %2.<Vbtype>"
++ [(set_attr "simd_type" "simd_logic")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "ior<mode>3"
++ [(set (match_operand:VDQ 0 "register_operand" "=w")
++ (ior:VDQ (match_operand:VDQ 1 "register_operand" "w")
++ (match_operand:VDQ 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "orr\t%0.<Vbtype>, %1.<Vbtype>, %2.<Vbtype>"
++ [(set_attr "simd_type" "simd_logic")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "xor<mode>3"
++ [(set (match_operand:VDQ 0 "register_operand" "=w")
++ (xor:VDQ (match_operand:VDQ 1 "register_operand" "w")
++ (match_operand:VDQ 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "eor\t%0.<Vbtype>, %1.<Vbtype>, %2.<Vbtype>"
++ [(set_attr "simd_type" "simd_logic")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "one_cmpl<mode>2"
++ [(set (match_operand:VDQ 0 "register_operand" "=w")
++ (not:VDQ (match_operand:VDQ 1 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "not\t%0.<Vbtype>, %1.<Vbtype>"
++ [(set_attr "simd_type" "simd_logic")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_simd_vec_set<mode>"
++ [(set (match_operand:VQ_S 0 "register_operand" "=w")
++ (vec_merge:VQ_S
++ (vec_duplicate:VQ_S
++ (match_operand:<VEL> 1 "register_operand" "r"))
++ (match_operand:VQ_S 3 "register_operand" "0")
++ (match_operand:SI 2 "immediate_operand" "i")))]
++ "TARGET_SIMD"
++ "ins\t%0.<Vetype>[%p2], %w1";
++ [(set_attr "simd_type" "simd_insgp")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_simd_lshr<mode>"
++ [(set (match_operand:VDQ 0 "register_operand" "=w")
++ (lshiftrt:VDQ (match_operand:VDQ 1 "register_operand" "w")
++ (match_operand:VDQ 2 "aarch64_simd_rshift_imm" "Dr")))]
++ "TARGET_SIMD"
++ "ushr\t%0.<Vtype>, %1.<Vtype>, %2"
++ [(set_attr "simd_type" "simd_shift_imm")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_simd_ashr<mode>"
++ [(set (match_operand:VDQ 0 "register_operand" "=w")
++ (ashiftrt:VDQ (match_operand:VDQ 1 "register_operand" "w")
++ (match_operand:VDQ 2 "aarch64_simd_rshift_imm" "Dr")))]
++ "TARGET_SIMD"
++ "sshr\t%0.<Vtype>, %1.<Vtype>, %2"
++ [(set_attr "simd_type" "simd_shift_imm")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_simd_imm_shl<mode>"
++ [(set (match_operand:VDQ 0 "register_operand" "=w")
++ (ashift:VDQ (match_operand:VDQ 1 "register_operand" "w")
++ (match_operand:VDQ 2 "aarch64_simd_lshift_imm" "Dl")))]
++ "TARGET_SIMD"
++ "shl\t%0.<Vtype>, %1.<Vtype>, %2"
++ [(set_attr "simd_type" "simd_shift_imm")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_simd_reg_sshl<mode>"
++ [(set (match_operand:VDQ 0 "register_operand" "=w")
++ (ashift:VDQ (match_operand:VDQ 1 "register_operand" "w")
++ (match_operand:VDQ 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "sshl\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_shift")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_simd_reg_shl<mode>_unsigned"
++ [(set (match_operand:VDQ 0 "register_operand" "=w")
++ (unspec:VDQ [(match_operand:VDQ 1 "register_operand" "w")
++ (match_operand:VDQ 2 "register_operand" "w")]
++ UNSPEC_ASHIFT_UNSIGNED))]
++ "TARGET_SIMD"
++ "ushl\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_shift")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_simd_reg_shl<mode>_signed"
++ [(set (match_operand:VDQ 0 "register_operand" "=w")
++ (unspec:VDQ [(match_operand:VDQ 1 "register_operand" "w")
++ (match_operand:VDQ 2 "register_operand" "w")]
++ UNSPEC_ASHIFT_SIGNED))]
++ "TARGET_SIMD"
++ "sshl\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_shift")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "ashl<mode>3"
++ [(match_operand:VDQ 0 "register_operand" "")
++ (match_operand:VDQ 1 "register_operand" "")
++ (match_operand:SI 2 "general_operand" "")]
++ "TARGET_SIMD"
++{
++ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
++ int shift_amount;
++
++ if (CONST_INT_P (operands[2]))
++ {
++ shift_amount = INTVAL (operands[2]);
++ if (shift_amount >= 0 && shift_amount < bit_width)
++ {
++ rtx tmp = aarch64_simd_gen_const_vector_dup (<MODE>mode,
++ shift_amount);
++ emit_insn (gen_aarch64_simd_imm_shl<mode> (operands[0],
++ operands[1],
++ tmp));
++ DONE;
++ }
++ else
++ {
++ operands[2] = force_reg (SImode, operands[2]);
++ }
++ }
++ else if (MEM_P (operands[2]))
++ {
++ operands[2] = force_reg (SImode, operands[2]);
++ }
++
++ if (REG_P (operands[2]))
++ {
++ rtx tmp = gen_reg_rtx (<MODE>mode);
++ emit_insn (gen_aarch64_simd_dup<mode> (tmp,
++ convert_to_mode (<VEL>mode,
++ operands[2],
++ 0)));
++ emit_insn (gen_aarch64_simd_reg_sshl<mode> (operands[0], operands[1],
++ tmp));
++ DONE;
++ }
++ else
++ FAIL;
++}
++)
++
++(define_expand "lshr<mode>3"
++ [(match_operand:VDQ 0 "register_operand" "")
++ (match_operand:VDQ 1 "register_operand" "")
++ (match_operand:SI 2 "general_operand" "")]
++ "TARGET_SIMD"
++{
++ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
++ int shift_amount;
++
++ if (CONST_INT_P (operands[2]))
++ {
++ shift_amount = INTVAL (operands[2]);
++ if (shift_amount > 0 && shift_amount <= bit_width)
++ {
++ rtx tmp = aarch64_simd_gen_const_vector_dup (<MODE>mode,
++ shift_amount);
++ emit_insn (gen_aarch64_simd_lshr<mode> (operands[0],
++ operands[1],
++ tmp));
++ DONE;
++ }
++ else
++ operands[2] = force_reg (SImode, operands[2]);
++ }
++ else if (MEM_P (operands[2]))
++ {
++ operands[2] = force_reg (SImode, operands[2]);
++ }
++
++ if (REG_P (operands[2]))
++ {
++ rtx tmp = gen_reg_rtx (SImode);
++ rtx tmp1 = gen_reg_rtx (<MODE>mode);
++ emit_insn (gen_negsi2 (tmp, operands[2]));
++ emit_insn (gen_aarch64_simd_dup<mode> (tmp1,
++ convert_to_mode (<VEL>mode,
++ tmp, 0)));
++ emit_insn (gen_aarch64_simd_reg_shl<mode>_unsigned (operands[0],
++ operands[1],
++ tmp1));
++ DONE;
++ }
++ else
++ FAIL;
++}
++)
++
++(define_expand "ashr<mode>3"
++ [(match_operand:VDQ 0 "register_operand" "")
++ (match_operand:VDQ 1 "register_operand" "")
++ (match_operand:SI 2 "general_operand" "")]
++ "TARGET_SIMD"
++{
++ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
++ int shift_amount;
++
++ if (CONST_INT_P (operands[2]))
++ {
++ shift_amount = INTVAL (operands[2]);
++ if (shift_amount > 0 && shift_amount <= bit_width)
++ {
++ rtx tmp = aarch64_simd_gen_const_vector_dup (<MODE>mode,
++ shift_amount);
++ emit_insn (gen_aarch64_simd_ashr<mode> (operands[0],
++ operands[1],
++ tmp));
++ DONE;
++ }
++ else
++ operands[2] = force_reg (SImode, operands[2]);
++ }
++ else if (MEM_P (operands[2]))
++ {
++ operands[2] = force_reg (SImode, operands[2]);
++ }
++
++ if (REG_P (operands[2]))
++ {
++ rtx tmp = gen_reg_rtx (SImode);
++ rtx tmp1 = gen_reg_rtx (<MODE>mode);
++ emit_insn (gen_negsi2 (tmp, operands[2]));
++ emit_insn (gen_aarch64_simd_dup<mode> (tmp1,
++ convert_to_mode (<VEL>mode,
++ tmp, 0)));
++ emit_insn (gen_aarch64_simd_reg_shl<mode>_signed (operands[0],
++ operands[1],
++ tmp1));
++ DONE;
++ }
++ else
++ FAIL;
++}
++)
++
++(define_expand "vashl<mode>3"
++ [(match_operand:VDQ 0 "register_operand" "")
++ (match_operand:VDQ 1 "register_operand" "")
++ (match_operand:VDQ 2 "register_operand" "")]
++ "TARGET_SIMD"
++{
++ emit_insn (gen_aarch64_simd_reg_sshl<mode> (operands[0], operands[1],
++ operands[2]));
++ DONE;
++})
++
++;; Using mode VQ_S as there is no V2DImode neg!
++;; Negating individual lanes most certainly offsets the
++;; gain from vectorization.
++(define_expand "vashr<mode>3"
++ [(match_operand:VQ_S 0 "register_operand" "")
++ (match_operand:VQ_S 1 "register_operand" "")
++ (match_operand:VQ_S 2 "register_operand" "")]
++ "TARGET_SIMD"
++{
++ rtx neg = gen_reg_rtx (<MODE>mode);
++ emit (gen_neg<mode>2 (neg, operands[2]));
++ emit_insn (gen_aarch64_simd_reg_shl<mode>_signed (operands[0], operands[1],
++ neg));
++ DONE;
++})
++
++(define_expand "vlshr<mode>3"
++ [(match_operand:VQ_S 0 "register_operand" "")
++ (match_operand:VQ_S 1 "register_operand" "")
++ (match_operand:VQ_S 2 "register_operand" "")]
++ "TARGET_SIMD"
++{
++ rtx neg = gen_reg_rtx (<MODE>mode);
++ emit (gen_neg<mode>2 (neg, operands[2]));
++ emit_insn (gen_aarch64_simd_reg_shl<mode>_unsigned (operands[0], operands[1],
++ neg));
++ DONE;
++})
++
++(define_expand "vec_set<mode>"
++ [(match_operand:VQ_S 0 "register_operand" "+w")
++ (match_operand:<VEL> 1 "register_operand" "r")
++ (match_operand:SI 2 "immediate_operand" "")]
++ "TARGET_SIMD"
++ {
++ HOST_WIDE_INT elem = (HOST_WIDE_INT) 1 << INTVAL (operands[2]);
++ emit_insn (gen_aarch64_simd_vec_set<mode> (operands[0], operands[1],
++ GEN_INT (elem), operands[0]));
++ DONE;
++ }
++)
++
++(define_insn "aarch64_simd_vec_setv2di"
++ [(set (match_operand:V2DI 0 "register_operand" "=w")
++ (vec_merge:V2DI
++ (vec_duplicate:V2DI
++ (match_operand:DI 1 "register_operand" "r"))
++ (match_operand:V2DI 3 "register_operand" "0")
++ (match_operand:SI 2 "immediate_operand" "i")))]
++ "TARGET_SIMD"
++ "ins\t%0.d[%p2], %1";
++ [(set_attr "simd_type" "simd_insgp")
++ (set_attr "simd_mode" "V2DI")]
++)
++
++(define_expand "vec_setv2di"
++ [(match_operand:V2DI 0 "register_operand" "+w")
++ (match_operand:DI 1 "register_operand" "r")
++ (match_operand:SI 2 "immediate_operand" "")]
++ "TARGET_SIMD"
++ {
++ HOST_WIDE_INT elem = (HOST_WIDE_INT) 1 << INTVAL (operands[2]);
++ emit_insn (gen_aarch64_simd_vec_setv2di (operands[0], operands[1],
++ GEN_INT (elem), operands[0]));
++ DONE;
++ }
++)
++
++(define_insn "aarch64_simd_vec_set<mode>"
++ [(set (match_operand:VDQF 0 "register_operand" "=w")
++ (vec_merge:VDQF
++ (vec_duplicate:VDQF
++ (match_operand:<VEL> 1 "register_operand" "w"))
++ (match_operand:VDQF 3 "register_operand" "0")
++ (match_operand:SI 2 "immediate_operand" "i")))]
++ "TARGET_SIMD"
++ "ins\t%0.<Vetype>[%p2], %1.<Vetype>[0]";
++ [(set_attr "simd_type" "simd_ins")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "vec_set<mode>"
++ [(match_operand:VDQF 0 "register_operand" "+w")
++ (match_operand:<VEL> 1 "register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "")]
++ "TARGET_SIMD"
++ {
++ HOST_WIDE_INT elem = (HOST_WIDE_INT) 1 << INTVAL (operands[2]);
++ emit_insn (gen_aarch64_simd_vec_set<mode> (operands[0], operands[1],
++ GEN_INT (elem), operands[0]));
++ DONE;
++ }
++)
++
++
++(define_insn "aarch64_mla<mode>"
++ [(set (match_operand:VQ_S 0 "register_operand" "=w")
++ (plus:VQ_S (mult:VQ_S (match_operand:VQ_S 2 "register_operand" "w")
++ (match_operand:VQ_S 3 "register_operand" "w"))
++ (match_operand:VQ_S 1 "register_operand" "0")))]
++ "TARGET_SIMD"
++ "mla\t%0.<Vtype>, %2.<Vtype>, %3.<Vtype>"
++ [(set_attr "simd_type" "simd_mla")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_mls<mode>"
++ [(set (match_operand:VQ_S 0 "register_operand" "=w")
++ (minus:VQ_S (match_operand:VQ_S 1 "register_operand" "0")
++ (mult:VQ_S (match_operand:VQ_S 2 "register_operand" "w")
++ (match_operand:VQ_S 3 "register_operand" "w"))))]
++ "TARGET_SIMD"
++ "mls\t%0.<Vtype>, %2.<Vtype>, %3.<Vtype>"
++ [(set_attr "simd_type" "simd_mla")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; Max/Min operations.
++(define_insn "<maxmin><mode>3"
++ [(set (match_operand:VQ_S 0 "register_operand" "=w")
++ (MAXMIN:VQ_S (match_operand:VQ_S 1 "register_operand" "w")
++ (match_operand:VQ_S 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "<maxmin>\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_minmax")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; Move into low-half clearing high half to 0.
++
++(define_insn "move_lo_quad_<mode>"
++ [(set (match_operand:VQ 0 "register_operand" "=w")
++ (vec_concat:VQ
++ (match_operand:<VHALF> 1 "register_operand" "w")
++ (vec_duplicate:<VHALF> (const_int 0))))]
++ "TARGET_SIMD"
++ "mov\\t%d0, %d1";
++ [(set_attr "simd_type" "simd_dup")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; Move into high-half.
++
++(define_insn "aarch64_simd_move_hi_quad_<mode>"
++ [(set (match_operand:VQ 0 "register_operand" "+w")
++ (vec_concat:VQ
++ (vec_select:<VHALF>
++ (match_dup 0)
++ (match_operand:VQ 2 "vect_par_cnst_lo_half" ""))
++ (match_operand:<VHALF> 1 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "ins\\t%0.d[1], %1.d[0]";
++ [(set_attr "simd_type" "simd_ins")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "move_hi_quad_<mode>"
++ [(match_operand:VQ 0 "register_operand" "")
++ (match_operand:<VHALF> 1 "register_operand" "")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, false);
++ emit_insn (gen_aarch64_simd_move_hi_quad_<mode> (operands[0],
++ operands[1], p));
++ DONE;
++})
++
++;; Narrowing operations.
++
++;; For doubles.
++(define_insn "aarch64_simd_vec_pack_trunc_<mode>"
++ [(set (match_operand:<VNARROWQ> 0 "register_operand" "=w")
++ (truncate:<VNARROWQ> (match_operand:VQN 1 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "xtn\\t%0.<Vntype>, %1.<Vtype>"
++ [(set_attr "simd_type" "simd_shiftn_imm")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "vec_pack_trunc_<mode>"
++ [(match_operand:<VNARROWD> 0 "register_operand" "")
++ (match_operand:VDN 1 "register_operand" "")
++ (match_operand:VDN 2 "register_operand" "")]
++ "TARGET_SIMD"
++{
++ rtx tempreg = gen_reg_rtx (<VDBL>mode);
++
++ emit_insn (gen_move_lo_quad_<Vdbl> (tempreg, operands[1]));
++ emit_insn (gen_move_hi_quad_<Vdbl> (tempreg, operands[2]));
++ emit_insn (gen_aarch64_simd_vec_pack_trunc_<Vdbl> (operands[0], tempreg));
++ DONE;
++})
++
++;; For quads.
++
++(define_insn "vec_pack_trunc_<mode>"
++ [(set (match_operand:<VNARROWQ2> 0 "register_operand" "+&w")
++ (vec_concat:<VNARROWQ2>
++ (truncate:<VNARROWQ> (match_operand:VQN 1 "register_operand" "w"))
++ (truncate:<VNARROWQ> (match_operand:VQN 2 "register_operand" "w"))))]
++ "TARGET_SIMD"
++ "xtn\\t%0.<Vntype>, %1.<Vtype>\;xtn2\\t%0.<V2ntype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_shiftn2_imm")
++ (set_attr "simd_mode" "<MODE>")
++ (set_attr "length" "8")]
++)
++
++;; Widening operations.
++
++(define_insn "aarch64_simd_vec_unpack<su>_lo_<mode>"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (ANY_EXTEND:<VWIDE> (vec_select:<VHALF>
++ (match_operand:VQW 1 "register_operand" "w")
++ (match_operand:VQW 2 "vect_par_cnst_lo_half" "")
++ )))]
++ "TARGET_SIMD"
++ "<su>shll %0.<Vwtype>, %1.<Vhalftype>, 0"
++ [(set_attr "simd_type" "simd_shiftl_imm")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_simd_vec_unpack<su>_hi_<mode>"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (ANY_EXTEND:<VWIDE> (vec_select:<VHALF>
++ (match_operand:VQW 1 "register_operand" "w")
++ (match_operand:VQW 2 "vect_par_cnst_hi_half" "")
++ )))]
++ "TARGET_SIMD"
++ "<su>shll2 %0.<Vwtype>, %1.<Vtype>, 0"
++ [(set_attr "simd_type" "simd_shiftl_imm")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "vec_unpack<su>_hi_<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "")
++ (ANY_EXTEND:<VWIDE> (match_operand:VQW 1 "register_operand"))]
++ "TARGET_SIMD"
++ {
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ emit_insn (gen_aarch64_simd_vec_unpack<su>_hi_<mode> (operands[0],
++ operands[1], p));
++ DONE;
++ }
++)
++
++(define_expand "vec_unpack<su>_lo_<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "")
++ (ANY_EXTEND:<VWIDE> (match_operand:VQW 1 "register_operand" ""))]
++ "TARGET_SIMD"
++ {
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, false);
++ emit_insn (gen_aarch64_simd_vec_unpack<su>_lo_<mode> (operands[0],
++ operands[1], p));
++ DONE;
++ }
++)
++
++;; Widening arithmetic.
++
++(define_insn "aarch64_simd_vec_<su>mult_lo_<mode>"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (mult:<VWIDE> (ANY_EXTEND:<VWIDE> (vec_select:<VHALF>
++ (match_operand:VQW 1 "register_operand" "w")
++ (match_operand:VQW 3 "vect_par_cnst_lo_half" "")))
++ (ANY_EXTEND:<VWIDE> (vec_select:<VHALF>
++ (match_operand:VQW 2 "register_operand" "w")
++ (match_dup 3)))))]
++ "TARGET_SIMD"
++ "<su>mull\\t%0.<Vwtype>, %1.<Vhalftype>, %2.<Vhalftype>"
++ [(set_attr "simd_type" "simd_mull")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "vec_widen_<su>mult_lo_<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "")
++ (ANY_EXTEND:<VWIDE> (match_operand:VQW 1 "register_operand" ""))
++ (ANY_EXTEND:<VWIDE> (match_operand:VQW 2 "register_operand" ""))]
++ "TARGET_SIMD"
++ {
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, false);
++ emit_insn (gen_aarch64_simd_vec_<su>mult_lo_<mode> (operands[0],
++ operands[1],
++ operands[2], p));
++ DONE;
++ }
++)
++
++(define_insn "aarch64_simd_vec_<su>mult_hi_<mode>"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (mult:<VWIDE> (ANY_EXTEND:<VWIDE> (vec_select:<VHALF>
++ (match_operand:VQW 1 "register_operand" "w")
++ (match_operand:VQW 3 "vect_par_cnst_hi_half" "")))
++ (ANY_EXTEND:<VWIDE> (vec_select:<VHALF>
++ (match_operand:VQW 2 "register_operand" "w")
++ (match_dup 3)))))]
++ "TARGET_SIMD"
++ "<su>mull2\\t%0.<Vwtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_mull")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "vec_widen_<su>mult_hi_<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "")
++ (ANY_EXTEND:<VWIDE> (match_operand:VQW 1 "register_operand" ""))
++ (ANY_EXTEND:<VWIDE> (match_operand:VQW 2 "register_operand" ""))]
++ "TARGET_SIMD"
++ {
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ emit_insn (gen_aarch64_simd_vec_<su>mult_hi_<mode> (operands[0],
++ operands[1],
++ operands[2], p));
++ DONE;
++
++ }
++)
++
++;; FP vector operations.
++;; AArch64 AdvSIMD supports single-precision (32-bit) and
++;; double-precision (64-bit) floating-point data types and arithmetic as
++;; defined by the IEEE 754-2008 standard. This makes them vectorizable
++;; without the need for -ffast-math or -funsafe-math-optimizations.
++;;
++;; Floating-point operations can raise an exception. Vectorizing such
++;; operations are safe because of reasons explained below.
++;;
++;; ARMv8 permits an extension to enable trapped floating-point
++;; exception handling, however this is an optional feature. In the
++;; event of a floating-point exception being raised by vectorised
++;; code then:
++;; 1. If trapped floating-point exceptions are available, then a trap
++;; will be taken when any lane raises an enabled exception. A trap
++;; handler may determine which lane raised the exception.
++;; 2. Alternatively a sticky exception flag is set in the
++;; floating-point status register (FPSR). Software may explicitly
++;; test the exception flags, in which case the tests will either
++;; prevent vectorisation, allowing precise identification of the
++;; failing operation, or if tested outside of vectorisable regions
++;; then the specific operation and lane are not of interest.
++
++;; FP arithmetic operations.
++
++(define_insn "add<mode>3"
++ [(set (match_operand:VDQF 0 "register_operand" "=w")
++ (plus:VDQF (match_operand:VDQF 1 "register_operand" "w")
++ (match_operand:VDQF 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "fadd\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_fadd")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "sub<mode>3"
++ [(set (match_operand:VDQF 0 "register_operand" "=w")
++ (minus:VDQF (match_operand:VDQF 1 "register_operand" "w")
++ (match_operand:VDQF 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "fsub\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_fadd")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "mul<mode>3"
++ [(set (match_operand:VDQF 0 "register_operand" "=w")
++ (mult:VDQF (match_operand:VDQF 1 "register_operand" "w")
++ (match_operand:VDQF 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "fmul\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_fmul")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "div<mode>3"
++ [(set (match_operand:VDQF 0 "register_operand" "=w")
++ (div:VDQF (match_operand:VDQF 1 "register_operand" "w")
++ (match_operand:VDQF 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "fdiv\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_fdiv")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "neg<mode>2"
++ [(set (match_operand:VDQF 0 "register_operand" "=w")
++ (neg:VDQF (match_operand:VDQF 1 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "fneg\\t%0.<Vtype>, %1.<Vtype>"
++ [(set_attr "simd_type" "simd_fnegabs")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "abs<mode>2"
++ [(set (match_operand:VDQF 0 "register_operand" "=w")
++ (abs:VDQF (match_operand:VDQF 1 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "fabs\\t%0.<Vtype>, %1.<Vtype>"
++ [(set_attr "simd_type" "simd_fnegabs")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "fma<mode>4"
++ [(set (match_operand:VDQF 0 "register_operand" "=w")
++ (fma:VDQF (match_operand:VDQF 1 "register_operand" "w")
++ (match_operand:VDQF 2 "register_operand" "w")
++ (match_operand:VDQF 3 "register_operand" "0")))]
++ "TARGET_SIMD"
++ "fmla\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_fmla")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_frint<frint_suffix><mode>"
++ [(set (match_operand:VDQF 0 "register_operand" "=w")
++ (unspec:VDQF [(match_operand:VDQF 1 "register_operand" "w")]
++ FRINT))]
++ "TARGET_SIMD"
++ "frint<frint_suffix>\\t%0.<Vtype>, %1.<Vtype>"
++ [(set_attr "simd_type" "simd_frint")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; Vector versions of the floating-point frint patterns.
++;; Expands to btrunc, ceil, floor, nearbyint, rint, round.
++(define_expand "<frint_pattern><mode>2"
++ [(set (match_operand:VDQF 0 "register_operand")
++ (unspec:VDQF [(match_operand:VDQF 1 "register_operand")]
++ FRINT))]
++ "TARGET_SIMD"
++ {})
++
++(define_insn "aarch64_fcvt<frint_suffix><su><mode>"
++ [(set (match_operand:<FCVT_TARGET> 0 "register_operand" "=w")
++ (FIXUORS:<FCVT_TARGET> (unspec:<FCVT_TARGET>
++ [(match_operand:VDQF 1 "register_operand" "w")]
++ FCVT)))]
++ "TARGET_SIMD"
++ "fcvt<frint_suffix><su>\\t%0.<Vtype>, %1.<Vtype>"
++ [(set_attr "simd_type" "simd_fcvti")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; Vector versions of the fcvt standard patterns.
++;; Expands to lbtrunc, lround, lceil, lfloor
++(define_expand "l<fcvt_pattern><su_optab><fcvt_target><VDQF:mode>2"
++ [(set (match_operand:<FCVT_TARGET> 0 "register_operand")
++ (FIXUORS:<FCVT_TARGET> (unspec:<FCVT_TARGET>
++ [(match_operand:VDQF 1 "register_operand")]
++ FCVT)))]
++ "TARGET_SIMD"
++ {})
++
++(define_insn "aarch64_vmls<mode>"
++ [(set (match_operand:VDQF 0 "register_operand" "=w")
++ (minus:VDQF (match_operand:VDQF 1 "register_operand" "0")
++ (mult:VDQF (match_operand:VDQF 2 "register_operand" "w")
++ (match_operand:VDQF 3 "register_operand" "w"))))]
++ "TARGET_SIMD"
++ "fmls\\t%0.<Vtype>, %2.<Vtype>, %3.<Vtype>"
++ [(set_attr "simd_type" "simd_fmla")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; FP Max/Min
++;; Max/Min are introduced by idiom recognition by GCC's mid-end. An
++;; expression like:
++;; a = (b < c) ? b : c;
++;; is idiom-matched as MIN_EXPR<b,c> only if -ffinite-math-only is enabled
++;; either explicitly or indirectly via -ffast-math.
++;;
++;; MIN_EXPR and MAX_EXPR eventually map to 'smin' and 'smax' in RTL.
++;; The 'smax' and 'smin' RTL standard pattern names do not specify which
++;; operand will be returned when both operands are zero (i.e. they may not
++;; honour signed zeroes), or when either operand is NaN. Therefore GCC
++;; only introduces MIN_EXPR/MAX_EXPR in fast math mode or when not honouring
++;; NaNs.
++
++(define_insn "smax<mode>3"
++ [(set (match_operand:VDQF 0 "register_operand" "=w")
++ (smax:VDQF (match_operand:VDQF 1 "register_operand" "w")
++ (match_operand:VDQF 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "fmaxnm\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_fminmax")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "smin<mode>3"
++ [(set (match_operand:VDQF 0 "register_operand" "=w")
++ (smin:VDQF (match_operand:VDQF 1 "register_operand" "w")
++ (match_operand:VDQF 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "fminnm\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_fminmax")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; FP 'across lanes' max and min ops.
++
++(define_insn "reduc_s<fmaxminv>_v4sf"
++ [(set (match_operand:V4SF 0 "register_operand" "=w")
++ (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "w")]
++ FMAXMINV))]
++ "TARGET_SIMD"
++ "f<fmaxminv>nmv\\t%s0, %1.4s";
++ [(set_attr "simd_type" "simd_fminmaxv")
++ (set_attr "simd_mode" "V4SF")]
++)
++
++(define_insn "reduc_s<fmaxminv>_<mode>"
++ [(set (match_operand:V2F 0 "register_operand" "=w")
++ (unspec:V2F [(match_operand:V2F 1 "register_operand" "w")]
++ FMAXMINV))]
++ "TARGET_SIMD"
++ "f<fmaxminv>nmp\\t%0.<Vtype>, %1.<Vtype>, %1.<Vtype>";
++ [(set_attr "simd_type" "simd_fminmax")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; FP 'across lanes' add.
++
++(define_insn "aarch64_addvv4sf"
++ [(set (match_operand:V4SF 0 "register_operand" "=w")
++ (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "w")]
++ UNSPEC_FADDV))]
++ "TARGET_SIMD"
++ "faddp\\t%0.4s, %1.4s, %1.4s"
++ [(set_attr "simd_type" "simd_fadd")
++ (set_attr "simd_mode" "V4SF")]
++)
++
++(define_expand "reduc_uplus_v4sf"
++ [(set (match_operand:V4SF 0 "register_operand" "=w")
++ (match_operand:V4SF 1 "register_operand" "w"))]
++ "TARGET_SIMD"
++{
++ rtx tmp = gen_reg_rtx (V4SFmode);
++ emit_insn (gen_aarch64_addvv4sf (tmp, operands[1]));
++ emit_insn (gen_aarch64_addvv4sf (operands[0], tmp));
++ DONE;
++})
++
++(define_expand "reduc_splus_v4sf"
++ [(set (match_operand:V4SF 0 "register_operand" "=w")
++ (match_operand:V4SF 1 "register_operand" "w"))]
++ "TARGET_SIMD"
++{
++ rtx tmp = gen_reg_rtx (V4SFmode);
++ emit_insn (gen_aarch64_addvv4sf (tmp, operands[1]));
++ emit_insn (gen_aarch64_addvv4sf (operands[0], tmp));
++ DONE;
++})
++
++(define_insn "aarch64_addv<mode>"
++ [(set (match_operand:V2F 0 "register_operand" "=w")
++ (unspec:V2F [(match_operand:V2F 1 "register_operand" "w")]
++ UNSPEC_FADDV))]
++ "TARGET_SIMD"
++ "faddp\\t%<Vetype>0, %1.<Vtype>"
++ [(set_attr "simd_type" "simd_fadd")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "reduc_uplus_<mode>"
++ [(set (match_operand:V2F 0 "register_operand" "=w")
++ (unspec:V2F [(match_operand:V2F 1 "register_operand" "w")]
++ UNSPEC_FADDV))]
++ "TARGET_SIMD"
++ ""
++)
++
++(define_expand "reduc_splus_<mode>"
++ [(set (match_operand:V2F 0 "register_operand" "=w")
++ (unspec:V2F [(match_operand:V2F 1 "register_operand" "w")]
++ UNSPEC_FADDV))]
++ "TARGET_SIMD"
++ ""
++)
++
++;; Reduction across lanes.
++
++(define_insn "aarch64_addv<mode>"
++ [(set (match_operand:VDQV 0 "register_operand" "=w")
++ (unspec:VDQV [(match_operand:VDQV 1 "register_operand" "w")]
++ UNSPEC_ADDV))]
++ "TARGET_SIMD"
++ "addv\\t%<Vetype>0, %1.<Vtype>"
++ [(set_attr "simd_type" "simd_addv")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "reduc_splus_<mode>"
++ [(set (match_operand:VDQV 0 "register_operand" "=w")
++ (unspec:VDQV [(match_operand:VDQV 1 "register_operand" "w")]
++ UNSPEC_ADDV))]
++ "TARGET_SIMD"
++ ""
++)
++
++(define_expand "reduc_uplus_<mode>"
++ [(set (match_operand:VDQV 0 "register_operand" "=w")
++ (unspec:VDQV [(match_operand:VDQV 1 "register_operand" "w")]
++ UNSPEC_ADDV))]
++ "TARGET_SIMD"
++ ""
++)
++
++(define_insn "aarch64_addvv2di"
++ [(set (match_operand:V2DI 0 "register_operand" "=w")
++ (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "w")]
++ UNSPEC_ADDV))]
++ "TARGET_SIMD"
++ "addp\\t%d0, %1.2d"
++ [(set_attr "simd_type" "simd_add")
++ (set_attr "simd_mode" "V2DI")]
++)
++
++(define_expand "reduc_uplus_v2di"
++ [(set (match_operand:V2DI 0 "register_operand" "=w")
++ (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "w")]
++ UNSPEC_ADDV))]
++ "TARGET_SIMD"
++ ""
++)
++
++(define_expand "reduc_splus_v2di"
++ [(set (match_operand:V2DI 0 "register_operand" "=w")
++ (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "w")]
++ UNSPEC_ADDV))]
++ "TARGET_SIMD"
++ ""
++)
++
++(define_insn "aarch64_addvv2si"
++ [(set (match_operand:V2SI 0 "register_operand" "=w")
++ (unspec:V2SI [(match_operand:V2SI 1 "register_operand" "w")]
++ UNSPEC_ADDV))]
++ "TARGET_SIMD"
++ "addp\\t%0.2s, %1.2s, %1.2s"
++ [(set_attr "simd_type" "simd_add")
++ (set_attr "simd_mode" "V2SI")]
++)
++
++(define_expand "reduc_uplus_v2si"
++ [(set (match_operand:V2SI 0 "register_operand" "=w")
++ (unspec:V2SI [(match_operand:V2SI 1 "register_operand" "w")]
++ UNSPEC_ADDV))]
++ "TARGET_SIMD"
++ ""
++)
++
++(define_expand "reduc_splus_v2si"
++ [(set (match_operand:V2SI 0 "register_operand" "=w")
++ (unspec:V2SI [(match_operand:V2SI 1 "register_operand" "w")]
++ UNSPEC_ADDV))]
++ "TARGET_SIMD"
++ ""
++)
++
++(define_insn "reduc_<maxminv>_<mode>"
++ [(set (match_operand:VDQV 0 "register_operand" "=w")
++ (unspec:VDQV [(match_operand:VDQV 1 "register_operand" "w")]
++ MAXMINV))]
++ "TARGET_SIMD"
++ "<maxminv>v\\t%<Vetype>0, %1.<Vtype>"
++ [(set_attr "simd_type" "simd_minmaxv")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "reduc_<maxminv>_v2si"
++ [(set (match_operand:V2SI 0 "register_operand" "=w")
++ (unspec:V2SI [(match_operand:V2SI 1 "register_operand" "w")]
++ MAXMINV))]
++ "TARGET_SIMD"
++ "<maxminv>p\\t%0.2s, %1.2s, %1.2s"
++ [(set_attr "simd_type" "simd_minmax")
++ (set_attr "simd_mode" "V2SI")]
++)
++
++;; vbsl_* intrinsics may compile to any of bsl/bif/bit depending on register
++;; allocation. For an intrinsic of form:
++;; vD = bsl_* (vS, vN, vM)
++;; We can use any of:
++;; bsl vS, vN, vM (if D = S)
++;; bit vD, vN, vS (if D = M, so 1-bits in vS choose bits from vN, else vM)
++;; bif vD, vM, vS (if D = N, so 0-bits in vS choose bits from vM, else vN)
++
++(define_insn "aarch64_simd_bsl<mode>_internal"
++ [(set (match_operand:VALL 0 "register_operand" "=w,w,w")
++ (unspec:VALL
++ [(match_operand:<V_cmp_result> 1 "register_operand" " 0,w,w")
++ (match_operand:VALL 2 "register_operand" " w,w,0")
++ (match_operand:VALL 3 "register_operand" " w,0,w")]
++ UNSPEC_BSL))]
++ "TARGET_SIMD"
++ "@
++ bsl\\t%0.<Vbtype>, %2.<Vbtype>, %3.<Vbtype>
++ bit\\t%0.<Vbtype>, %2.<Vbtype>, %1.<Vbtype>
++ bif\\t%0.<Vbtype>, %3.<Vbtype>, %1.<Vbtype>"
++)
++
++(define_expand "aarch64_simd_bsl<mode>"
++ [(set (match_operand:VALL 0 "register_operand")
++ (unspec:VALL [(match_operand:<V_cmp_result> 1 "register_operand")
++ (match_operand:VALL 2 "register_operand")
++ (match_operand:VALL 3 "register_operand")]
++ UNSPEC_BSL))]
++ "TARGET_SIMD"
++{
++ /* We can't alias operands together if they have different modes. */
++ operands[1] = gen_lowpart (<V_cmp_result>mode, operands[1]);
++})
++
++(define_expand "aarch64_vcond_internal<mode>"
++ [(set (match_operand:VDQ 0 "register_operand")
++ (if_then_else:VDQ
++ (match_operator 3 "comparison_operator"
++ [(match_operand:VDQ 4 "register_operand")
++ (match_operand:VDQ 5 "nonmemory_operand")])
++ (match_operand:VDQ 1 "register_operand")
++ (match_operand:VDQ 2 "register_operand")))]
++ "TARGET_SIMD"
++{
++ int inverse = 0, has_zero_imm_form = 0;
++ rtx mask = gen_reg_rtx (<MODE>mode);
++
++ switch (GET_CODE (operands[3]))
++ {
++ case LE:
++ case LT:
++ case NE:
++ inverse = 1;
++ /* Fall through. */
++ case GE:
++ case GT:
++ case EQ:
++ has_zero_imm_form = 1;
++ break;
++ case LEU:
++ case LTU:
++ inverse = 1;
++ break;
++ default:
++ break;
++ }
++
++ if (!REG_P (operands[5])
++ && (operands[5] != CONST0_RTX (<MODE>mode) || !has_zero_imm_form))
++ operands[5] = force_reg (<MODE>mode, operands[5]);
++
++ switch (GET_CODE (operands[3]))
++ {
++ case LT:
++ case GE:
++ emit_insn (gen_aarch64_cmge<mode> (mask, operands[4], operands[5]));
++ break;
++
++ case LE:
++ case GT:
++ emit_insn (gen_aarch64_cmgt<mode> (mask, operands[4], operands[5]));
++ break;
++
++ case LTU:
++ case GEU:
++ emit_insn (gen_aarch64_cmhs<mode> (mask, operands[4], operands[5]));
++ break;
++
++ case LEU:
++ case GTU:
++ emit_insn (gen_aarch64_cmhi<mode> (mask, operands[4], operands[5]));
++ break;
++
++ case NE:
++ case EQ:
++ emit_insn (gen_aarch64_cmeq<mode> (mask, operands[4], operands[5]));
++ break;
++
++ default:
++ gcc_unreachable ();
++ }
++
++ if (inverse)
++ emit_insn (gen_aarch64_simd_bsl<mode> (operands[0], mask, operands[2],
++ operands[1]));
++ else
++ emit_insn (gen_aarch64_simd_bsl<mode> (operands[0], mask, operands[1],
++ operands[2]));
++
++ DONE;
++})
++
++(define_expand "aarch64_vcond_internal<mode>"
++ [(set (match_operand:VDQF 0 "register_operand")
++ (if_then_else:VDQF
++ (match_operator 3 "comparison_operator"
++ [(match_operand:VDQF 4 "register_operand")
++ (match_operand:VDQF 5 "nonmemory_operand")])
++ (match_operand:VDQF 1 "register_operand")
++ (match_operand:VDQF 2 "register_operand")))]
++ "TARGET_SIMD"
++{
++ int inverse = 0;
++ int use_zero_form = 0;
++ int swap_bsl_operands = 0;
++ rtx mask = gen_reg_rtx (<V_cmp_result>mode);
++ rtx tmp = gen_reg_rtx (<V_cmp_result>mode);
++
++ rtx (*base_comparison) (rtx, rtx, rtx);
++ rtx (*complimentary_comparison) (rtx, rtx, rtx);
++
++ switch (GET_CODE (operands[3]))
++ {
++ case GE:
++ case GT:
++ case LE:
++ case LT:
++ case EQ:
++ if (operands[5] == CONST0_RTX (<MODE>mode))
++ {
++ use_zero_form = 1;
++ break;
++ }
++ /* Fall through. */
++ default:
++ if (!REG_P (operands[5]))
++ operands[5] = force_reg (<MODE>mode, operands[5]);
++ }
++
++ switch (GET_CODE (operands[3]))
++ {
++ case LT:
++ case UNLT:
++ inverse = 1;
++ /* Fall through. */
++ case GE:
++ case UNGE:
++ case ORDERED:
++ case UNORDERED:
++ base_comparison = gen_aarch64_cmge<mode>;
++ complimentary_comparison = gen_aarch64_cmgt<mode>;
++ break;
++ case LE:
++ case UNLE:
++ inverse = 1;
++ /* Fall through. */
++ case GT:
++ case UNGT:
++ base_comparison = gen_aarch64_cmgt<mode>;
++ complimentary_comparison = gen_aarch64_cmge<mode>;
++ break;
++ case EQ:
++ case NE:
++ case UNEQ:
++ base_comparison = gen_aarch64_cmeq<mode>;
++ complimentary_comparison = gen_aarch64_cmeq<mode>;
++ break;
++ default:
++ gcc_unreachable ();
++ }
++
++ switch (GET_CODE (operands[3]))
++ {
++ case LT:
++ case LE:
++ case GT:
++ case GE:
++ case EQ:
++ /* The easy case. Here we emit one of FCMGE, FCMGT or FCMEQ.
++ As a LT b <=> b GE a && a LE b <=> b GT a. Our transformations are:
++ a GE b -> a GE b
++ a GT b -> a GT b
++ a LE b -> b GE a
++ a LT b -> b GT a
++ a EQ b -> a EQ b
++ Note that there also exist direct comparison against 0 forms,
++ so catch those as a special case. */
++ if (use_zero_form)
++ {
++ inverse = 0;
++ switch (GET_CODE (operands[3]))
++ {
++ case LT:
++ base_comparison = gen_aarch64_cmlt<mode>;
++ break;
++ case LE:
++ base_comparison = gen_aarch64_cmle<mode>;
++ break;
++ default:
++ /* Do nothing, other zero form cases already have the correct
++ base_comparison. */
++ break;
++ }
++ }
++
++ if (!inverse)
++ emit_insn (base_comparison (mask, operands[4], operands[5]));
++ else
++ emit_insn (complimentary_comparison (mask, operands[5], operands[4]));
++ break;
++ case UNLT:
++ case UNLE:
++ case UNGT:
++ case UNGE:
++ case NE:
++ /* FCM returns false for lanes which are unordered, so if we use
++ the inverse of the comparison we actually want to emit, then
++ swap the operands to BSL, we will end up with the correct result.
++ Note that a NE NaN and NaN NE b are true for all a, b.
++
++ Our transformations are:
++ a GE b -> !(b GT a)
++ a GT b -> !(b GE a)
++ a LE b -> !(a GT b)
++ a LT b -> !(a GE b)
++ a NE b -> !(a EQ b) */
++
++ if (inverse)
++ emit_insn (base_comparison (mask, operands[4], operands[5]));
++ else
++ emit_insn (complimentary_comparison (mask, operands[5], operands[4]));
++
++ swap_bsl_operands = 1;
++ break;
++ case UNEQ:
++ /* We check (a > b || b > a). combining these comparisons give us
++ true iff !(a != b && a ORDERED b), swapping the operands to BSL
++ will then give us (a == b || a UNORDERED b) as intended. */
++
++ emit_insn (gen_aarch64_cmgt<mode> (mask, operands[4], operands[5]));
++ emit_insn (gen_aarch64_cmgt<mode> (tmp, operands[5], operands[4]));
++ emit_insn (gen_ior<v_cmp_result>3 (mask, mask, tmp));
++ swap_bsl_operands = 1;
++ break;
++ case UNORDERED:
++ /* Operands are ORDERED iff (a > b || b >= a).
++ Swapping the operands to BSL will give the UNORDERED case. */
++ swap_bsl_operands = 1;
++ /* Fall through. */
++ case ORDERED:
++ emit_insn (gen_aarch64_cmgt<mode> (tmp, operands[4], operands[5]));
++ emit_insn (gen_aarch64_cmge<mode> (mask, operands[5], operands[4]));
++ emit_insn (gen_ior<v_cmp_result>3 (mask, mask, tmp));
++ break;
++ default:
++ gcc_unreachable ();
++ }
++
++ if (swap_bsl_operands)
++ emit_insn (gen_aarch64_simd_bsl<mode> (operands[0], mask, operands[2],
++ operands[1]));
++ else
++ emit_insn (gen_aarch64_simd_bsl<mode> (operands[0], mask, operands[1],
++ operands[2]));
++ DONE;
++})
++
++(define_expand "vcond<mode><mode>"
++ [(set (match_operand:VALL 0 "register_operand")
++ (if_then_else:VALL
++ (match_operator 3 "comparison_operator"
++ [(match_operand:VALL 4 "register_operand")
++ (match_operand:VALL 5 "nonmemory_operand")])
++ (match_operand:VALL 1 "register_operand")
++ (match_operand:VALL 2 "register_operand")))]
++ "TARGET_SIMD"
++{
++ emit_insn (gen_aarch64_vcond_internal<mode> (operands[0], operands[1],
++ operands[2], operands[3],
++ operands[4], operands[5]));
++ DONE;
++})
++
++
++(define_expand "vcondu<mode><mode>"
++ [(set (match_operand:VDQ 0 "register_operand")
++ (if_then_else:VDQ
++ (match_operator 3 "comparison_operator"
++ [(match_operand:VDQ 4 "register_operand")
++ (match_operand:VDQ 5 "nonmemory_operand")])
++ (match_operand:VDQ 1 "register_operand")
++ (match_operand:VDQ 2 "register_operand")))]
++ "TARGET_SIMD"
++{
++ emit_insn (gen_aarch64_vcond_internal<mode> (operands[0], operands[1],
++ operands[2], operands[3],
++ operands[4], operands[5]));
++ DONE;
++})
++
++;; Patterns for AArch64 SIMD Intrinsics.
++
++(define_expand "aarch64_create<mode>"
++ [(match_operand:VD_RE 0 "register_operand" "")
++ (match_operand:DI 1 "general_operand" "")]
++ "TARGET_SIMD"
++{
++ rtx src = gen_lowpart (<MODE>mode, operands[1]);
++ emit_move_insn (operands[0], src);
++ DONE;
++})
++
++(define_insn "aarch64_get_lane_signed<mode>"
++ [(set (match_operand:<VEL> 0 "register_operand" "=r")
++ (sign_extend:<VEL>
++ (vec_select:<VEL>
++ (match_operand:VQ_S 1 "register_operand" "w")
++ (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
++ "TARGET_SIMD"
++ "smov\\t%0, %1.<Vetype>[%2]"
++ [(set_attr "simd_type" "simd_movgp")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_get_lane_unsigned<mode>"
++ [(set (match_operand:<VEL> 0 "register_operand" "=r")
++ (zero_extend:<VEL>
++ (vec_select:<VEL>
++ (match_operand:VDQ 1 "register_operand" "w")
++ (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
++ "TARGET_SIMD"
++ "umov\\t%<vw>0, %1.<Vetype>[%2]"
++ [(set_attr "simd_type" "simd_movgp")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_get_lane<mode>"
++ [(set (match_operand:<VEL> 0 "register_operand" "=w")
++ (vec_select:<VEL>
++ (match_operand:VDQF 1 "register_operand" "w")
++ (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
++ "TARGET_SIMD"
++ "mov\\t%0.<Vetype>[0], %1.<Vetype>[%2]"
++ [(set_attr "simd_type" "simd_ins")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "aarch64_get_lanedi"
++ [(match_operand:DI 0 "register_operand" "=r")
++ (match_operand:DI 1 "register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ aarch64_simd_lane_bounds (operands[2], 0, 1);
++ emit_move_insn (operands[0], operands[1]);
++ DONE;
++})
++
++(define_expand "aarch64_reinterpretv8qi<mode>"
++ [(match_operand:V8QI 0 "register_operand" "")
++ (match_operand:VDC 1 "register_operand" "")]
++ "TARGET_SIMD"
++{
++ aarch64_simd_reinterpret (operands[0], operands[1]);
++ DONE;
++})
++
++(define_expand "aarch64_reinterpretv4hi<mode>"
++ [(match_operand:V4HI 0 "register_operand" "")
++ (match_operand:VDC 1 "register_operand" "")]
++ "TARGET_SIMD"
++{
++ aarch64_simd_reinterpret (operands[0], operands[1]);
++ DONE;
++})
++
++(define_expand "aarch64_reinterpretv2si<mode>"
++ [(match_operand:V2SI 0 "register_operand" "")
++ (match_operand:VDC 1 "register_operand" "")]
++ "TARGET_SIMD"
++{
++ aarch64_simd_reinterpret (operands[0], operands[1]);
++ DONE;
++})
++
++(define_expand "aarch64_reinterpretv2sf<mode>"
++ [(match_operand:V2SF 0 "register_operand" "")
++ (match_operand:VDC 1 "register_operand" "")]
++ "TARGET_SIMD"
++{
++ aarch64_simd_reinterpret (operands[0], operands[1]);
++ DONE;
++})
++
++(define_expand "aarch64_reinterpretdi<mode>"
++ [(match_operand:DI 0 "register_operand" "")
++ (match_operand:VD_RE 1 "register_operand" "")]
++ "TARGET_SIMD"
++{
++ aarch64_simd_reinterpret (operands[0], operands[1]);
++ DONE;
++})
++
++(define_expand "aarch64_reinterpretv16qi<mode>"
++ [(match_operand:V16QI 0 "register_operand" "")
++ (match_operand:VQ 1 "register_operand" "")]
++ "TARGET_SIMD"
++{
++ aarch64_simd_reinterpret (operands[0], operands[1]);
++ DONE;
++})
++
++(define_expand "aarch64_reinterpretv8hi<mode>"
++ [(match_operand:V8HI 0 "register_operand" "")
++ (match_operand:VQ 1 "register_operand" "")]
++ "TARGET_SIMD"
++{
++ aarch64_simd_reinterpret (operands[0], operands[1]);
++ DONE;
++})
++
++(define_expand "aarch64_reinterpretv4si<mode>"
++ [(match_operand:V4SI 0 "register_operand" "")
++ (match_operand:VQ 1 "register_operand" "")]
++ "TARGET_SIMD"
++{
++ aarch64_simd_reinterpret (operands[0], operands[1]);
++ DONE;
++})
++
++(define_expand "aarch64_reinterpretv4sf<mode>"
++ [(match_operand:V4SF 0 "register_operand" "")
++ (match_operand:VQ 1 "register_operand" "")]
++ "TARGET_SIMD"
++{
++ aarch64_simd_reinterpret (operands[0], operands[1]);
++ DONE;
++})
++
++(define_expand "aarch64_reinterpretv2di<mode>"
++ [(match_operand:V2DI 0 "register_operand" "")
++ (match_operand:VQ 1 "register_operand" "")]
++ "TARGET_SIMD"
++{
++ aarch64_simd_reinterpret (operands[0], operands[1]);
++ DONE;
++})
++
++(define_expand "aarch64_reinterpretv2df<mode>"
++ [(match_operand:V2DF 0 "register_operand" "")
++ (match_operand:VQ 1 "register_operand" "")]
++ "TARGET_SIMD"
++{
++ aarch64_simd_reinterpret (operands[0], operands[1]);
++ DONE;
++})
++
++;; In this insn, operand 1 should be low, and operand 2 the high part of the
++;; dest vector.
++
++(define_insn "*aarch64_combinez<mode>"
++ [(set (match_operand:<VDBL> 0 "register_operand" "=&w")
++ (vec_concat:<VDBL>
++ (match_operand:VDIC 1 "register_operand" "w")
++ (match_operand:VDIC 2 "aarch64_simd_imm_zero" "Dz")))]
++ "TARGET_SIMD"
++ "mov\\t%0.8b, %1.8b"
++ [(set_attr "simd_type" "simd_move")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_combine<mode>"
++ [(set (match_operand:<VDBL> 0 "register_operand" "=&w")
++ (vec_concat:<VDBL> (match_operand:VDC 1 "register_operand" "w")
++ (match_operand:VDC 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "mov\\t%0.d[0], %1.d[0]\;ins\\t%0.d[1], %2.d[0]"
++ [(set_attr "simd_type" "simd_ins")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; <su><addsub>l<q>.
++
++(define_insn "aarch64_<ANY_EXTEND:su><ADDSUB:optab>l2<mode>_internal"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (ADDSUB:<VWIDE> (ANY_EXTEND:<VWIDE> (vec_select:<VHALF>
++ (match_operand:VQW 1 "register_operand" "w")
++ (match_operand:VQW 3 "vect_par_cnst_hi_half" "")))
++ (ANY_EXTEND:<VWIDE> (vec_select:<VHALF>
++ (match_operand:VQW 2 "register_operand" "w")
++ (match_dup 3)))))]
++ "TARGET_SIMD"
++ "<ANY_EXTEND:su><ADDSUB:optab>l2 %0.<Vwtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_addl")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "aarch64_saddl2<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:VQW 1 "register_operand" "w")
++ (match_operand:VQW 2 "register_operand" "w")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ emit_insn (gen_aarch64_saddl2<mode>_internal (operands[0], operands[1],
++ operands[2], p));
++ DONE;
++})
++
++(define_expand "aarch64_uaddl2<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:VQW 1 "register_operand" "w")
++ (match_operand:VQW 2 "register_operand" "w")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ emit_insn (gen_aarch64_uaddl2<mode>_internal (operands[0], operands[1],
++ operands[2], p));
++ DONE;
++})
++
++(define_expand "aarch64_ssubl2<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:VQW 1 "register_operand" "w")
++ (match_operand:VQW 2 "register_operand" "w")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ emit_insn (gen_aarch64_ssubl2<mode>_internal (operands[0], operands[1],
++ operands[2], p));
++ DONE;
++})
++
++(define_expand "aarch64_usubl2<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:VQW 1 "register_operand" "w")
++ (match_operand:VQW 2 "register_operand" "w")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ emit_insn (gen_aarch64_usubl2<mode>_internal (operands[0], operands[1],
++ operands[2], p));
++ DONE;
++})
++
++(define_insn "aarch64_<ANY_EXTEND:su><ADDSUB:optab>l<mode>"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (ADDSUB:<VWIDE> (ANY_EXTEND:<VWIDE>
++ (match_operand:VDW 1 "register_operand" "w"))
++ (ANY_EXTEND:<VWIDE>
++ (match_operand:VDW 2 "register_operand" "w"))))]
++ "TARGET_SIMD"
++ "<ANY_EXTEND:su><ADDSUB:optab>l %0.<Vwtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_addl")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; <su><addsub>w<q>.
++
++(define_insn "aarch64_<ANY_EXTEND:su><ADDSUB:optab>w<mode>"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (ADDSUB:<VWIDE> (match_operand:<VWIDE> 1 "register_operand" "w")
++ (ANY_EXTEND:<VWIDE>
++ (match_operand:VDW 2 "register_operand" "w"))))]
++ "TARGET_SIMD"
++ "<ANY_EXTEND:su><ADDSUB:optab>w\\t%0.<Vwtype>, %1.<Vwtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_addl")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_<ANY_EXTEND:su><ADDSUB:optab>w2<mode>_internal"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (ADDSUB:<VWIDE> (match_operand:<VWIDE> 1 "register_operand" "w")
++ (ANY_EXTEND:<VWIDE>
++ (vec_select:<VHALF>
++ (match_operand:VQW 2 "register_operand" "w")
++ (match_operand:VQW 3 "vect_par_cnst_hi_half" "")))))]
++ "TARGET_SIMD"
++ "<ANY_EXTEND:su><ADDSUB:optab>w2\\t%0.<Vwtype>, %1.<Vwtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_addl")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "aarch64_saddw2<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:<VWIDE> 1 "register_operand" "w")
++ (match_operand:VQW 2 "register_operand" "w")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ emit_insn (gen_aarch64_saddw2<mode>_internal (operands[0], operands[1],
++ operands[2], p));
++ DONE;
++})
++
++(define_expand "aarch64_uaddw2<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:<VWIDE> 1 "register_operand" "w")
++ (match_operand:VQW 2 "register_operand" "w")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ emit_insn (gen_aarch64_uaddw2<mode>_internal (operands[0], operands[1],
++ operands[2], p));
++ DONE;
++})
++
++
++(define_expand "aarch64_ssubw2<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:<VWIDE> 1 "register_operand" "w")
++ (match_operand:VQW 2 "register_operand" "w")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ emit_insn (gen_aarch64_ssubw2<mode>_internal (operands[0], operands[1],
++ operands[2], p));
++ DONE;
++})
++
++(define_expand "aarch64_usubw2<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:<VWIDE> 1 "register_operand" "w")
++ (match_operand:VQW 2 "register_operand" "w")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ emit_insn (gen_aarch64_usubw2<mode>_internal (operands[0], operands[1],
++ operands[2], p));
++ DONE;
++})
++
++;; <su><r>h<addsub>.
++
++(define_insn "aarch64_<sur>h<addsub><mode>"
++ [(set (match_operand:VQ_S 0 "register_operand" "=w")
++ (unspec:VQ_S [(match_operand:VQ_S 1 "register_operand" "w")
++ (match_operand:VQ_S 2 "register_operand" "w")]
++ HADDSUB))]
++ "TARGET_SIMD"
++ "<sur>h<addsub>\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_add")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; <r><addsub>hn<q>.
++
++(define_insn "aarch64_<sur><addsub>hn<mode>"
++ [(set (match_operand:<VNARROWQ> 0 "register_operand" "=w")
++ (unspec:<VNARROWQ> [(match_operand:VQN 1 "register_operand" "w")
++ (match_operand:VQN 2 "register_operand" "w")]
++ ADDSUBHN))]
++ "TARGET_SIMD"
++ "<sur><addsub>hn\\t%0.<Vntype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_addn")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_<sur><addsub>hn2<mode>"
++ [(set (match_operand:<VNARROWQ2> 0 "register_operand" "=w")
++ (unspec:<VNARROWQ2> [(match_operand:<VNARROWQ> 1 "register_operand" "0")
++ (match_operand:VQN 2 "register_operand" "w")
++ (match_operand:VQN 3 "register_operand" "w")]
++ ADDSUBHN2))]
++ "TARGET_SIMD"
++ "<sur><addsub>hn2\\t%0.<V2ntype>, %2.<Vtype>, %3.<Vtype>"
++ [(set_attr "simd_type" "simd_addn2")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; pmul.
++
++(define_insn "aarch64_pmul<mode>"
++ [(set (match_operand:VB 0 "register_operand" "=w")
++ (unspec:VB [(match_operand:VB 1 "register_operand" "w")
++ (match_operand:VB 2 "register_operand" "w")]
++ UNSPEC_PMUL))]
++ "TARGET_SIMD"
++ "pmul\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_mul")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; <su>q<addsub>
++
++(define_insn "aarch64_<su_optab><optab><mode>"
++ [(set (match_operand:VSDQ_I 0 "register_operand" "=w")
++ (BINQOPS:VSDQ_I (match_operand:VSDQ_I 1 "register_operand" "w")
++ (match_operand:VSDQ_I 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "<su_optab><optab>\\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
++ [(set_attr "simd_type" "simd_add")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; suqadd and usqadd
++
++(define_insn "aarch64_<sur>qadd<mode>"
++ [(set (match_operand:VSDQ_I 0 "register_operand" "=w")
++ (unspec:VSDQ_I [(match_operand:VSDQ_I 1 "register_operand" "0")
++ (match_operand:VSDQ_I 2 "register_operand" "w")]
++ USSUQADD))]
++ "TARGET_SIMD"
++ "<sur>qadd\\t%<v>0<Vmtype>, %<v>2<Vmtype>"
++ [(set_attr "simd_type" "simd_sat_add")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; sqmovun
++
++(define_insn "aarch64_sqmovun<mode>"
++ [(set (match_operand:<VNARROWQ> 0 "register_operand" "=w")
++ (unspec:<VNARROWQ> [(match_operand:VSQN_HSDI 1 "register_operand" "w")]
++ UNSPEC_SQXTUN))]
++ "TARGET_SIMD"
++ "sqxtun\\t%<vn2>0<Vmntype>, %<v>1<Vmtype>"
++ [(set_attr "simd_type" "simd_sat_shiftn_imm")
++ (set_attr "simd_mode" "<MODE>")]
++ )
++
++;; sqmovn and uqmovn
++
++(define_insn "aarch64_<sur>qmovn<mode>"
++ [(set (match_operand:<VNARROWQ> 0 "register_operand" "=w")
++ (unspec:<VNARROWQ> [(match_operand:VSQN_HSDI 1 "register_operand" "w")]
++ SUQMOVN))]
++ "TARGET_SIMD"
++ "<sur>qxtn\\t%<vn2>0<Vmntype>, %<v>1<Vmtype>"
++ [(set_attr "simd_type" "simd_sat_shiftn_imm")
++ (set_attr "simd_mode" "<MODE>")]
++ )
++
++;; <su>q<absneg>
++
++(define_insn "aarch64_s<optab><mode>"
++ [(set (match_operand:VSDQ_I_BHSI 0 "register_operand" "=w")
++ (UNQOPS:VSDQ_I_BHSI
++ (match_operand:VSDQ_I_BHSI 1 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "s<optab>\\t%<v>0<Vmtype>, %<v>1<Vmtype>"
++ [(set_attr "simd_type" "simd_sat_negabs")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; sq<r>dmulh.
++
++(define_insn "aarch64_sq<r>dmulh<mode>"
++ [(set (match_operand:VSDQ_HSI 0 "register_operand" "=w")
++ (unspec:VSDQ_HSI
++ [(match_operand:VSDQ_HSI 1 "register_operand" "w")
++ (match_operand:VSDQ_HSI 2 "register_operand" "w")]
++ VQDMULH))]
++ "TARGET_SIMD"
++ "sq<r>dmulh\\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
++ [(set_attr "simd_type" "simd_sat_mul")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; sq<r>dmulh_lane
++
++(define_insn "aarch64_sq<r>dmulh_lane<mode>"
++ [(set (match_operand:VDQHS 0 "register_operand" "=w")
++ (unspec:VDQHS
++ [(match_operand:VDQHS 1 "register_operand" "w")
++ (vec_select:<VEL>
++ (match_operand:<VCOND> 2 "register_operand" "<vwx>")
++ (parallel [(match_operand:SI 3 "immediate_operand" "i")]))]
++ VQDMULH))]
++ "TARGET_SIMD"
++ "*
++ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCOND>mode));
++ return \"sq<r>dmulh\\t%0.<Vtype>, %1.<Vtype>, %2.<Vetype>[%3]\";"
++ [(set_attr "simd_type" "simd_sat_mul")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_sq<r>dmulh_laneq<mode>"
++ [(set (match_operand:VDQHS 0 "register_operand" "=w")
++ (unspec:VDQHS
++ [(match_operand:VDQHS 1 "register_operand" "w")
++ (vec_select:<VEL>
++ (match_operand:<VCONQ> 2 "register_operand" "<vwx>")
++ (parallel [(match_operand:SI 3 "immediate_operand" "i")]))]
++ VQDMULH))]
++ "TARGET_SIMD"
++ "*
++ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCONQ>mode));
++ return \"sq<r>dmulh\\t%0.<Vtype>, %1.<Vtype>, %2.<Vetype>[%3]\";"
++ [(set_attr "simd_type" "simd_sat_mul")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_sq<r>dmulh_lane<mode>"
++ [(set (match_operand:SD_HSI 0 "register_operand" "=w")
++ (unspec:SD_HSI
++ [(match_operand:SD_HSI 1 "register_operand" "w")
++ (vec_select:<VEL>
++ (match_operand:<VCONQ> 2 "register_operand" "<vwx>")
++ (parallel [(match_operand:SI 3 "immediate_operand" "i")]))]
++ VQDMULH))]
++ "TARGET_SIMD"
++ "*
++ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCONQ>mode));
++ return \"sq<r>dmulh\\t%<v>0, %<v>1, %2.<v>[%3]\";"
++ [(set_attr "simd_type" "simd_sat_mul")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; vqdml[sa]l
++
++(define_insn "aarch64_sqdml<SBINQOPS:as>l<mode>"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (SBINQOPS:<VWIDE>
++ (match_operand:<VWIDE> 1 "register_operand" "0")
++ (ss_ashift:<VWIDE>
++ (mult:<VWIDE>
++ (sign_extend:<VWIDE>
++ (match_operand:VSD_HSI 2 "register_operand" "w"))
++ (sign_extend:<VWIDE>
++ (match_operand:VSD_HSI 3 "register_operand" "w")))
++ (const_int 1))))]
++ "TARGET_SIMD"
++ "sqdml<SBINQOPS:as>l\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %<v>3<Vmtype>"
++ [(set_attr "simd_type" "simd_sat_mlal")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; vqdml[sa]l_lane
++
++(define_insn "aarch64_sqdml<SBINQOPS:as>l_lane<mode>_internal"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (SBINQOPS:<VWIDE>
++ (match_operand:<VWIDE> 1 "register_operand" "0")
++ (ss_ashift:<VWIDE>
++ (mult:<VWIDE>
++ (sign_extend:<VWIDE>
++ (match_operand:VD_HSI 2 "register_operand" "w"))
++ (sign_extend:<VWIDE>
++ (vec_duplicate:VD_HSI
++ (vec_select:<VEL>
++ (match_operand:<VCON> 3 "register_operand" "<vwx>")
++ (parallel [(match_operand:SI 4 "immediate_operand" "i")])))
++ ))
++ (const_int 1))))]
++ "TARGET_SIMD"
++ "sqdml<SBINQOPS:as>l\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %3.<Vetype>[%4]"
++ [(set_attr "simd_type" "simd_sat_mlal")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_sqdml<SBINQOPS:as>l_lane<mode>_internal"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (SBINQOPS:<VWIDE>
++ (match_operand:<VWIDE> 1 "register_operand" "0")
++ (ss_ashift:<VWIDE>
++ (mult:<VWIDE>
++ (sign_extend:<VWIDE>
++ (match_operand:SD_HSI 2 "register_operand" "w"))
++ (sign_extend:<VWIDE>
++ (vec_select:<VEL>
++ (match_operand:<VCON> 3 "register_operand" "<vwx>")
++ (parallel [(match_operand:SI 4 "immediate_operand" "i")])))
++ )
++ (const_int 1))))]
++ "TARGET_SIMD"
++ "sqdml<SBINQOPS:as>l\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %3.<Vetype>[%4]"
++ [(set_attr "simd_type" "simd_sat_mlal")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "aarch64_sqdmlal_lane<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:<VWIDE> 1 "register_operand" "0")
++ (match_operand:VSD_HSI 2 "register_operand" "w")
++ (match_operand:<VCON> 3 "register_operand" "<vwx>")
++ (match_operand:SI 4 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCON>mode) / 2);
++ emit_insn (gen_aarch64_sqdmlal_lane<mode>_internal (operands[0], operands[1],
++ operands[2], operands[3],
++ operands[4]));
++ DONE;
++})
++
++(define_expand "aarch64_sqdmlal_laneq<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:<VWIDE> 1 "register_operand" "0")
++ (match_operand:VSD_HSI 2 "register_operand" "w")
++ (match_operand:<VCON> 3 "register_operand" "<vwx>")
++ (match_operand:SI 4 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCON>mode));
++ emit_insn (gen_aarch64_sqdmlal_lane<mode>_internal (operands[0], operands[1],
++ operands[2], operands[3],
++ operands[4]));
++ DONE;
++})
++
++(define_expand "aarch64_sqdmlsl_lane<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:<VWIDE> 1 "register_operand" "0")
++ (match_operand:VSD_HSI 2 "register_operand" "w")
++ (match_operand:<VCON> 3 "register_operand" "<vwx>")
++ (match_operand:SI 4 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCON>mode) / 2);
++ emit_insn (gen_aarch64_sqdmlsl_lane<mode>_internal (operands[0], operands[1],
++ operands[2], operands[3],
++ operands[4]));
++ DONE;
++})
++
++(define_expand "aarch64_sqdmlsl_laneq<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:<VWIDE> 1 "register_operand" "0")
++ (match_operand:VSD_HSI 2 "register_operand" "w")
++ (match_operand:<VCON> 3 "register_operand" "<vwx>")
++ (match_operand:SI 4 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCON>mode));
++ emit_insn (gen_aarch64_sqdmlsl_lane<mode>_internal (operands[0], operands[1],
++ operands[2], operands[3],
++ operands[4]));
++ DONE;
++})
++
++;; vqdml[sa]l_n
++
++(define_insn "aarch64_sqdml<SBINQOPS:as>l_n<mode>"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (SBINQOPS:<VWIDE>
++ (match_operand:<VWIDE> 1 "register_operand" "0")
++ (ss_ashift:<VWIDE>
++ (mult:<VWIDE>
++ (sign_extend:<VWIDE>
++ (match_operand:VD_HSI 2 "register_operand" "w"))
++ (sign_extend:<VWIDE>
++ (vec_duplicate:VD_HSI
++ (match_operand:<VEL> 3 "register_operand" "w"))))
++ (const_int 1))))]
++ "TARGET_SIMD"
++ "sqdml<SBINQOPS:as>l\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %3.<Vetype>[0]"
++ [(set_attr "simd_type" "simd_sat_mlal")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; sqdml[as]l2
++
++(define_insn "aarch64_sqdml<SBINQOPS:as>l2<mode>_internal"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (SBINQOPS:<VWIDE>
++ (match_operand:<VWIDE> 1 "register_operand" "0")
++ (ss_ashift:<VWIDE>
++ (mult:<VWIDE>
++ (sign_extend:<VWIDE>
++ (vec_select:<VHALF>
++ (match_operand:VQ_HSI 2 "register_operand" "w")
++ (match_operand:VQ_HSI 4 "vect_par_cnst_hi_half" "")))
++ (sign_extend:<VWIDE>
++ (vec_select:<VHALF>
++ (match_operand:VQ_HSI 3 "register_operand" "w")
++ (match_dup 4))))
++ (const_int 1))))]
++ "TARGET_SIMD"
++ "sqdml<SBINQOPS:as>l2\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %<v>3<Vmtype>"
++ [(set_attr "simd_type" "simd_sat_mlal")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "aarch64_sqdmlal2<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:<VWIDE> 1 "register_operand" "w")
++ (match_operand:VQ_HSI 2 "register_operand" "w")
++ (match_operand:VQ_HSI 3 "register_operand" "w")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ emit_insn (gen_aarch64_sqdmlal2<mode>_internal (operands[0], operands[1],
++ operands[2], operands[3], p));
++ DONE;
++})
++
++(define_expand "aarch64_sqdmlsl2<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:<VWIDE> 1 "register_operand" "w")
++ (match_operand:VQ_HSI 2 "register_operand" "w")
++ (match_operand:VQ_HSI 3 "register_operand" "w")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ emit_insn (gen_aarch64_sqdmlsl2<mode>_internal (operands[0], operands[1],
++ operands[2], operands[3], p));
++ DONE;
++})
++
++;; vqdml[sa]l2_lane
++
++(define_insn "aarch64_sqdml<SBINQOPS:as>l2_lane<mode>_internal"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (SBINQOPS:<VWIDE>
++ (match_operand:<VWIDE> 1 "register_operand" "0")
++ (ss_ashift:<VWIDE>
++ (mult:<VWIDE>
++ (sign_extend:<VWIDE>
++ (vec_select:<VHALF>
++ (match_operand:VQ_HSI 2 "register_operand" "w")
++ (match_operand:VQ_HSI 5 "vect_par_cnst_hi_half" "")))
++ (sign_extend:<VWIDE>
++ (vec_duplicate:<VHALF>
++ (vec_select:<VEL>
++ (match_operand:<VCON> 3 "register_operand" "<vwx>")
++ (parallel [(match_operand:SI 4 "immediate_operand" "i")])
++ ))))
++ (const_int 1))))]
++ "TARGET_SIMD"
++ "sqdml<SBINQOPS:as>l2\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %3.<Vetype>[%4]"
++ [(set_attr "simd_type" "simd_sat_mlal")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "aarch64_sqdmlal2_lane<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:<VWIDE> 1 "register_operand" "w")
++ (match_operand:VQ_HSI 2 "register_operand" "w")
++ (match_operand:<VCON> 3 "register_operand" "<vwx>")
++ (match_operand:SI 4 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode) / 2);
++ emit_insn (gen_aarch64_sqdmlal2_lane<mode>_internal (operands[0], operands[1],
++ operands[2], operands[3],
++ operands[4], p));
++ DONE;
++})
++
++(define_expand "aarch64_sqdmlal2_laneq<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:<VWIDE> 1 "register_operand" "w")
++ (match_operand:VQ_HSI 2 "register_operand" "w")
++ (match_operand:<VCON> 3 "register_operand" "<vwx>")
++ (match_operand:SI 4 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode));
++ emit_insn (gen_aarch64_sqdmlal2_lane<mode>_internal (operands[0], operands[1],
++ operands[2], operands[3],
++ operands[4], p));
++ DONE;
++})
++
++(define_expand "aarch64_sqdmlsl2_lane<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:<VWIDE> 1 "register_operand" "w")
++ (match_operand:VQ_HSI 2 "register_operand" "w")
++ (match_operand:<VCON> 3 "register_operand" "<vwx>")
++ (match_operand:SI 4 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode) / 2);
++ emit_insn (gen_aarch64_sqdmlsl2_lane<mode>_internal (operands[0], operands[1],
++ operands[2], operands[3],
++ operands[4], p));
++ DONE;
++})
++
++(define_expand "aarch64_sqdmlsl2_laneq<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:<VWIDE> 1 "register_operand" "w")
++ (match_operand:VQ_HSI 2 "register_operand" "w")
++ (match_operand:<VCON> 3 "register_operand" "<vwx>")
++ (match_operand:SI 4 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode));
++ emit_insn (gen_aarch64_sqdmlsl2_lane<mode>_internal (operands[0], operands[1],
++ operands[2], operands[3],
++ operands[4], p));
++ DONE;
++})
++
++(define_insn "aarch64_sqdml<SBINQOPS:as>l2_n<mode>_internal"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (SBINQOPS:<VWIDE>
++ (match_operand:<VWIDE> 1 "register_operand" "0")
++ (ss_ashift:<VWIDE>
++ (mult:<VWIDE>
++ (sign_extend:<VWIDE>
++ (vec_select:<VHALF>
++ (match_operand:VQ_HSI 2 "register_operand" "w")
++ (match_operand:VQ_HSI 4 "vect_par_cnst_hi_half" "")))
++ (sign_extend:<VWIDE>
++ (vec_duplicate:<VHALF>
++ (match_operand:<VEL> 3 "register_operand" "w"))))
++ (const_int 1))))]
++ "TARGET_SIMD"
++ "sqdml<SBINQOPS:as>l2\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %3.<Vetype>[0]"
++ [(set_attr "simd_type" "simd_sat_mlal")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "aarch64_sqdmlal2_n<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:<VWIDE> 1 "register_operand" "w")
++ (match_operand:VQ_HSI 2 "register_operand" "w")
++ (match_operand:<VEL> 3 "register_operand" "w")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ emit_insn (gen_aarch64_sqdmlal2_n<mode>_internal (operands[0], operands[1],
++ operands[2], operands[3],
++ p));
++ DONE;
++})
++
++(define_expand "aarch64_sqdmlsl2_n<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:<VWIDE> 1 "register_operand" "w")
++ (match_operand:VQ_HSI 2 "register_operand" "w")
++ (match_operand:<VEL> 3 "register_operand" "w")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ emit_insn (gen_aarch64_sqdmlsl2_n<mode>_internal (operands[0], operands[1],
++ operands[2], operands[3],
++ p));
++ DONE;
++})
++
++;; vqdmull
++
++(define_insn "aarch64_sqdmull<mode>"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (ss_ashift:<VWIDE>
++ (mult:<VWIDE>
++ (sign_extend:<VWIDE>
++ (match_operand:VSD_HSI 1 "register_operand" "w"))
++ (sign_extend:<VWIDE>
++ (match_operand:VSD_HSI 2 "register_operand" "w")))
++ (const_int 1)))]
++ "TARGET_SIMD"
++ "sqdmull\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
++ [(set_attr "simd_type" "simd_sat_mul")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; vqdmull_lane
++
++(define_insn "aarch64_sqdmull_lane<mode>_internal"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (ss_ashift:<VWIDE>
++ (mult:<VWIDE>
++ (sign_extend:<VWIDE>
++ (match_operand:VD_HSI 1 "register_operand" "w"))
++ (sign_extend:<VWIDE>
++ (vec_duplicate:VD_HSI
++ (vec_select:<VEL>
++ (match_operand:<VCON> 2 "register_operand" "<vwx>")
++ (parallel [(match_operand:SI 3 "immediate_operand" "i")])))
++ ))
++ (const_int 1)))]
++ "TARGET_SIMD"
++ "sqdmull\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %2.<Vetype>[%3]"
++ [(set_attr "simd_type" "simd_sat_mul")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_sqdmull_lane<mode>_internal"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (ss_ashift:<VWIDE>
++ (mult:<VWIDE>
++ (sign_extend:<VWIDE>
++ (match_operand:SD_HSI 1 "register_operand" "w"))
++ (sign_extend:<VWIDE>
++ (vec_select:<VEL>
++ (match_operand:<VCON> 2 "register_operand" "<vwx>")
++ (parallel [(match_operand:SI 3 "immediate_operand" "i")]))
++ ))
++ (const_int 1)))]
++ "TARGET_SIMD"
++ "sqdmull\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %2.<Vetype>[%3]"
++ [(set_attr "simd_type" "simd_sat_mul")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "aarch64_sqdmull_lane<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:VSD_HSI 1 "register_operand" "w")
++ (match_operand:<VCON> 2 "register_operand" "<vwx>")
++ (match_operand:SI 3 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCON>mode) / 2);
++ emit_insn (gen_aarch64_sqdmull_lane<mode>_internal (operands[0], operands[1],
++ operands[2], operands[3]));
++ DONE;
++})
++
++(define_expand "aarch64_sqdmull_laneq<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:VD_HSI 1 "register_operand" "w")
++ (match_operand:<VCON> 2 "register_operand" "<vwx>")
++ (match_operand:SI 3 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCON>mode));
++ emit_insn (gen_aarch64_sqdmull_lane<mode>_internal
++ (operands[0], operands[1], operands[2], operands[3]));
++ DONE;
++})
++
++;; vqdmull_n
++
++(define_insn "aarch64_sqdmull_n<mode>"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (ss_ashift:<VWIDE>
++ (mult:<VWIDE>
++ (sign_extend:<VWIDE>
++ (match_operand:VD_HSI 1 "register_operand" "w"))
++ (sign_extend:<VWIDE>
++ (vec_duplicate:VD_HSI
++ (match_operand:<VEL> 2 "register_operand" "w")))
++ )
++ (const_int 1)))]
++ "TARGET_SIMD"
++ "sqdmull\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %2.<Vetype>[0]"
++ [(set_attr "simd_type" "simd_sat_mul")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; vqdmull2
++
++
++
++(define_insn "aarch64_sqdmull2<mode>_internal"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (ss_ashift:<VWIDE>
++ (mult:<VWIDE>
++ (sign_extend:<VWIDE>
++ (vec_select:<VHALF>
++ (match_operand:VQ_HSI 1 "register_operand" "w")
++ (match_operand:VQ_HSI 3 "vect_par_cnst_hi_half" "")))
++ (sign_extend:<VWIDE>
++ (vec_select:<VHALF>
++ (match_operand:VQ_HSI 2 "register_operand" "w")
++ (match_dup 3)))
++ )
++ (const_int 1)))]
++ "TARGET_SIMD"
++ "sqdmull2\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
++ [(set_attr "simd_type" "simd_sat_mul")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "aarch64_sqdmull2<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:VQ_HSI 1 "register_operand" "w")
++ (match_operand:<VCON> 2 "register_operand" "w")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ emit_insn (gen_aarch64_sqdmull2<mode>_internal (operands[0], operands[1],
++ operands[2], p));
++ DONE;
++})
++
++;; vqdmull2_lane
++
++(define_insn "aarch64_sqdmull2_lane<mode>_internal"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (ss_ashift:<VWIDE>
++ (mult:<VWIDE>
++ (sign_extend:<VWIDE>
++ (vec_select:<VHALF>
++ (match_operand:VQ_HSI 1 "register_operand" "w")
++ (match_operand:VQ_HSI 4 "vect_par_cnst_hi_half" "")))
++ (sign_extend:<VWIDE>
++ (vec_duplicate:<VHALF>
++ (vec_select:<VEL>
++ (match_operand:<VCON> 2 "register_operand" "<vwx>")
++ (parallel [(match_operand:SI 3 "immediate_operand" "i")])))
++ ))
++ (const_int 1)))]
++ "TARGET_SIMD"
++ "sqdmull2\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %2.<Vetype>[%3]"
++ [(set_attr "simd_type" "simd_sat_mul")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "aarch64_sqdmull2_lane<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:VQ_HSI 1 "register_operand" "w")
++ (match_operand:<VCON> 2 "register_operand" "<vwx>")
++ (match_operand:SI 3 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<MODE>mode) / 2);
++ emit_insn (gen_aarch64_sqdmull2_lane<mode>_internal (operands[0], operands[1],
++ operands[2], operands[3],
++ p));
++ DONE;
++})
++
++(define_expand "aarch64_sqdmull2_laneq<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:VQ_HSI 1 "register_operand" "w")
++ (match_operand:<VCON> 2 "register_operand" "<vwx>")
++ (match_operand:SI 3 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<MODE>mode));
++ emit_insn (gen_aarch64_sqdmull2_lane<mode>_internal (operands[0], operands[1],
++ operands[2], operands[3],
++ p));
++ DONE;
++})
++
++;; vqdmull2_n
++
++(define_insn "aarch64_sqdmull2_n<mode>_internal"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (ss_ashift:<VWIDE>
++ (mult:<VWIDE>
++ (sign_extend:<VWIDE>
++ (vec_select:<VHALF>
++ (match_operand:VQ_HSI 1 "register_operand" "w")
++ (match_operand:VQ_HSI 3 "vect_par_cnst_hi_half" "")))
++ (sign_extend:<VWIDE>
++ (vec_duplicate:<VHALF>
++ (match_operand:<VEL> 2 "register_operand" "w")))
++ )
++ (const_int 1)))]
++ "TARGET_SIMD"
++ "sqdmull2\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %2.<Vetype>[0]"
++ [(set_attr "simd_type" "simd_sat_mul")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "aarch64_sqdmull2_n<mode>"
++ [(match_operand:<VWIDE> 0 "register_operand" "=w")
++ (match_operand:VQ_HSI 1 "register_operand" "w")
++ (match_operand:<VEL> 2 "register_operand" "w")]
++ "TARGET_SIMD"
++{
++ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
++ emit_insn (gen_aarch64_sqdmull2_n<mode>_internal (operands[0], operands[1],
++ operands[2], p));
++ DONE;
++})
++
++;; vshl
++
++(define_insn "aarch64_<sur>shl<mode>"
++ [(set (match_operand:VSDQ_I_DI 0 "register_operand" "=w")
++ (unspec:VSDQ_I_DI
++ [(match_operand:VSDQ_I_DI 1 "register_operand" "w")
++ (match_operand:VSDQ_I_DI 2 "register_operand" "w")]
++ VSHL))]
++ "TARGET_SIMD"
++ "<sur>shl\\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>";
++ [(set_attr "simd_type" "simd_shift")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++
++;; vqshl
++
++(define_insn "aarch64_<sur>q<r>shl<mode>"
++ [(set (match_operand:VSDQ_I 0 "register_operand" "=w")
++ (unspec:VSDQ_I
++ [(match_operand:VSDQ_I 1 "register_operand" "w")
++ (match_operand:VSDQ_I 2 "register_operand" "w")]
++ VQSHL))]
++ "TARGET_SIMD"
++ "<sur>q<r>shl\\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>";
++ [(set_attr "simd_type" "simd_sat_shift")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; vshl_n
++
++(define_expand "aarch64_sshl_n<mode>"
++ [(match_operand:VSDQ_I_DI 0 "register_operand" "=w")
++ (match_operand:VSDQ_I_DI 1 "register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ emit_insn (gen_ashl<mode>3 (operands[0], operands[1], operands[2]));
++ DONE;
++})
++
++(define_expand "aarch64_ushl_n<mode>"
++ [(match_operand:VSDQ_I_DI 0 "register_operand" "=w")
++ (match_operand:VSDQ_I_DI 1 "register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ emit_insn (gen_ashl<mode>3 (operands[0], operands[1], operands[2]));
++ DONE;
++})
++
++;; vshll_n
++
++(define_insn "aarch64_<sur>shll_n<mode>"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (unspec:<VWIDE> [(match_operand:VDW 1 "register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ VSHLL))]
++ "TARGET_SIMD"
++ "*
++ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
++ aarch64_simd_const_bounds (operands[2], 0, bit_width + 1);
++ if (INTVAL (operands[2]) == bit_width)
++ {
++ return \"shll\\t%0.<Vwtype>, %1.<Vtype>, %2\";
++ }
++ else {
++ return \"<sur>shll\\t%0.<Vwtype>, %1.<Vtype>, %2\";
++ }"
++ [(set_attr "simd_type" "simd_shift_imm")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; vshll_high_n
++
++(define_insn "aarch64_<sur>shll2_n<mode>"
++ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
++ (unspec:<VWIDE> [(match_operand:VQW 1 "register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ VSHLL))]
++ "TARGET_SIMD"
++ "*
++ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
++ aarch64_simd_const_bounds (operands[2], 0, bit_width + 1);
++ if (INTVAL (operands[2]) == bit_width)
++ {
++ return \"shll2\\t%0.<Vwtype>, %1.<Vtype>, %2\";
++ }
++ else {
++ return \"<sur>shll2\\t%0.<Vwtype>, %1.<Vtype>, %2\";
++ }"
++ [(set_attr "simd_type" "simd_shift_imm")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; vshr_n
++
++(define_expand "aarch64_sshr_n<mode>"
++ [(match_operand:VSDQ_I_DI 0 "register_operand" "=w")
++ (match_operand:VSDQ_I_DI 1 "register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ emit_insn (gen_ashr<mode>3 (operands[0], operands[1], operands[2]));
++ DONE;
++})
++
++(define_expand "aarch64_ushr_n<mode>"
++ [(match_operand:VSDQ_I_DI 0 "register_operand" "=w")
++ (match_operand:VSDQ_I_DI 1 "register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ emit_insn (gen_lshr<mode>3 (operands[0], operands[1], operands[2]));
++ DONE;
++})
++
++;; vrshr_n
++
++(define_insn "aarch64_<sur>shr_n<mode>"
++ [(set (match_operand:VSDQ_I_DI 0 "register_operand" "=w")
++ (unspec:VSDQ_I_DI [(match_operand:VSDQ_I_DI 1 "register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ VRSHR_N))]
++ "TARGET_SIMD"
++ "*
++ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
++ aarch64_simd_const_bounds (operands[2], 1, bit_width + 1);
++ return \"<sur>shr\\t%<v>0<Vmtype>, %<v>1<Vmtype>, %2\";"
++ [(set_attr "simd_type" "simd_shift_imm")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; v(r)sra_n
++
++(define_insn "aarch64_<sur>sra_n<mode>"
++ [(set (match_operand:VSDQ_I_DI 0 "register_operand" "=w")
++ (unspec:VSDQ_I_DI [(match_operand:VSDQ_I_DI 1 "register_operand" "0")
++ (match_operand:VSDQ_I_DI 2 "register_operand" "w")
++ (match_operand:SI 3 "immediate_operand" "i")]
++ VSRA))]
++ "TARGET_SIMD"
++ "*
++ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
++ aarch64_simd_const_bounds (operands[3], 1, bit_width + 1);
++ return \"<sur>sra\\t%<v>0<Vmtype>, %<v>2<Vmtype>, %3\";"
++ [(set_attr "simd_type" "simd_shift_imm_acc")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; vs<lr>i_n
++
++(define_insn "aarch64_<sur>s<lr>i_n<mode>"
++ [(set (match_operand:VSDQ_I_DI 0 "register_operand" "=w")
++ (unspec:VSDQ_I_DI [(match_operand:VSDQ_I_DI 1 "register_operand" "0")
++ (match_operand:VSDQ_I_DI 2 "register_operand" "w")
++ (match_operand:SI 3 "immediate_operand" "i")]
++ VSLRI))]
++ "TARGET_SIMD"
++ "*
++ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
++ aarch64_simd_const_bounds (operands[3], 1 - <VSLRI:offsetlr>,
++ bit_width - <VSLRI:offsetlr> + 1);
++ return \"s<lr>i\\t%<v>0<Vmtype>, %<v>2<Vmtype>, %3\";"
++ [(set_attr "simd_type" "simd_shift_imm")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; vqshl(u)
++
++(define_insn "aarch64_<sur>qshl<u>_n<mode>"
++ [(set (match_operand:VSDQ_I 0 "register_operand" "=w")
++ (unspec:VSDQ_I [(match_operand:VSDQ_I 1 "register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ VQSHL_N))]
++ "TARGET_SIMD"
++ "*
++ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
++ aarch64_simd_const_bounds (operands[2], 0, bit_width);
++ return \"<sur>qshl<u>\\t%<v>0<Vmtype>, %<v>1<Vmtype>, %2\";"
++ [(set_attr "simd_type" "simd_sat_shift_imm")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++
++;; vq(r)shr(u)n_n
++
++(define_insn "aarch64_<sur>q<r>shr<u>n_n<mode>"
++ [(set (match_operand:<VNARROWQ> 0 "register_operand" "=w")
++ (unspec:<VNARROWQ> [(match_operand:VSQN_HSDI 1 "register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ VQSHRN_N))]
++ "TARGET_SIMD"
++ "*
++ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
++ aarch64_simd_const_bounds (operands[2], 1, bit_width + 1);
++ return \"<sur>q<r>shr<u>n\\t%<vn2>0<Vmntype>, %<v>1<Vmtype>, %2\";"
++ [(set_attr "simd_type" "simd_sat_shiftn_imm")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++
++;; cm(eq|ge|le|lt|gt)
++
++(define_insn "aarch64_cm<cmp><mode>"
++ [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w,w")
++ (unspec:<V_cmp_result>
++ [(match_operand:VSDQ_I_DI 1 "register_operand" "w,w")
++ (match_operand:VSDQ_I_DI 2 "aarch64_simd_reg_or_zero" "w,Z")]
++ VCMP_S))]
++ "TARGET_SIMD"
++ "@
++ cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>
++ cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, #0"
++ [(set_attr "simd_type" "simd_cmp")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; cm(hs|hi|tst)
++
++(define_insn "aarch64_cm<cmp><mode>"
++ [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w")
++ (unspec:<V_cmp_result>
++ [(match_operand:VSDQ_I_DI 1 "register_operand" "w")
++ (match_operand:VSDQ_I_DI 2 "register_operand" "w")]
++ VCMP_U))]
++ "TARGET_SIMD"
++ "cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
++ [(set_attr "simd_type" "simd_cmp")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; fcm(eq|ge|le|lt|gt)
++
++(define_insn "aarch64_cm<cmp><mode>"
++ [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w,w")
++ (unspec:<V_cmp_result>
++ [(match_operand:VDQF 1 "register_operand" "w,w")
++ (match_operand:VDQF 2 "aarch64_simd_reg_or_zero" "w,Dz")]
++ VCMP_S))]
++ "TARGET_SIMD"
++ "@
++ fcm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>
++ fcm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, 0"
++ [(set_attr "simd_type" "simd_fcmp")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; addp
++
++(define_insn "aarch64_addp<mode>"
++ [(set (match_operand:VD_BHSI 0 "register_operand" "=w")
++ (unspec:VD_BHSI
++ [(match_operand:VD_BHSI 1 "register_operand" "w")
++ (match_operand:VD_BHSI 2 "register_operand" "w")]
++ UNSPEC_ADDP))]
++ "TARGET_SIMD"
++ "addp\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
++ [(set_attr "simd_type" "simd_add")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_addpdi"
++ [(set (match_operand:DI 0 "register_operand" "=w")
++ (unspec:DI
++ [(match_operand:V2DI 1 "register_operand" "w")]
++ UNSPEC_ADDP))]
++ "TARGET_SIMD"
++ "addp\t%d0, %1.2d"
++ [(set_attr "simd_type" "simd_add")
++ (set_attr "simd_mode" "DI")]
++)
++
++;; v(max|min)
++
++(define_expand "aarch64_<maxmin><mode>"
++ [(set (match_operand:VDQ_BHSI 0 "register_operand" "=w")
++ (MAXMIN:VDQ_BHSI (match_operand:VDQ_BHSI 1 "register_operand" "w")
++ (match_operand:VDQ_BHSI 2 "register_operand" "w")))]
++ "TARGET_SIMD"
++{
++ emit_insn (gen_<maxmin><mode>3 (operands[0], operands[1], operands[2]));
++ DONE;
++})
++
++
++(define_insn "aarch64_<fmaxmin><mode>"
++ [(set (match_operand:VDQF 0 "register_operand" "=w")
++ (unspec:VDQF [(match_operand:VDQF 1 "register_operand" "w")
++ (match_operand:VDQF 2 "register_operand" "w")]
++ FMAXMIN))]
++ "TARGET_SIMD"
++ "<fmaxmin>\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_fminmax")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; sqrt
++
++(define_insn "sqrt<mode>2"
++ [(set (match_operand:VDQF 0 "register_operand" "=w")
++ (sqrt:VDQF (match_operand:VDQF 1 "register_operand" "w")))]
++ "TARGET_SIMD"
++ "fsqrt\\t%0.<Vtype>, %1.<Vtype>"
++ [(set_attr "simd_type" "simd_fsqrt")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_expand "aarch64_sqrt<mode>"
++ [(match_operand:VDQF 0 "register_operand" "=w")
++ (match_operand:VDQF 1 "register_operand" "w")]
++ "TARGET_SIMD"
++{
++ emit_insn (gen_sqrt<mode>2 (operands[0], operands[1]));
++ DONE;
++})
++
++
++;; Patterns for vector struct loads and stores.
++
++(define_insn "vec_load_lanesoi<mode>"
++ [(set (match_operand:OI 0 "register_operand" "=w")
++ (unspec:OI [(match_operand:OI 1 "aarch64_simd_struct_operand" "Utv")
++ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_LD2))]
++ "TARGET_SIMD"
++ "ld2\\t{%S0.<Vtype> - %T0.<Vtype>}, %1"
++ [(set_attr "simd_type" "simd_load2")
++ (set_attr "simd_mode" "<MODE>")])
++
++(define_insn "vec_store_lanesoi<mode>"
++ [(set (match_operand:OI 0 "aarch64_simd_struct_operand" "=Utv")
++ (unspec:OI [(match_operand:OI 1 "register_operand" "w")
++ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_ST2))]
++ "TARGET_SIMD"
++ "st2\\t{%S1.<Vtype> - %T1.<Vtype>}, %0"
++ [(set_attr "simd_type" "simd_store2")
++ (set_attr "simd_mode" "<MODE>")])
++
++(define_insn "vec_load_lanesci<mode>"
++ [(set (match_operand:CI 0 "register_operand" "=w")
++ (unspec:CI [(match_operand:CI 1 "aarch64_simd_struct_operand" "Utv")
++ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_LD3))]
++ "TARGET_SIMD"
++ "ld3\\t{%S0.<Vtype> - %U0.<Vtype>}, %1"
++ [(set_attr "simd_type" "simd_load3")
++ (set_attr "simd_mode" "<MODE>")])
++
++(define_insn "vec_store_lanesci<mode>"
++ [(set (match_operand:CI 0 "aarch64_simd_struct_operand" "=Utv")
++ (unspec:CI [(match_operand:CI 1 "register_operand" "w")
++ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_ST3))]
++ "TARGET_SIMD"
++ "st3\\t{%S1.<Vtype> - %U1.<Vtype>}, %0"
++ [(set_attr "simd_type" "simd_store3")
++ (set_attr "simd_mode" "<MODE>")])
++
++(define_insn "vec_load_lanesxi<mode>"
++ [(set (match_operand:XI 0 "register_operand" "=w")
++ (unspec:XI [(match_operand:XI 1 "aarch64_simd_struct_operand" "Utv")
++ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_LD4))]
++ "TARGET_SIMD"
++ "ld4\\t{%S0.<Vtype> - %V0.<Vtype>}, %1"
++ [(set_attr "simd_type" "simd_load4")
++ (set_attr "simd_mode" "<MODE>")])
++
++(define_insn "vec_store_lanesxi<mode>"
++ [(set (match_operand:XI 0 "aarch64_simd_struct_operand" "=Utv")
++ (unspec:XI [(match_operand:XI 1 "register_operand" "w")
++ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_ST4))]
++ "TARGET_SIMD"
++ "st4\\t{%S1.<Vtype> - %V1.<Vtype>}, %0"
++ [(set_attr "simd_type" "simd_store4")
++ (set_attr "simd_mode" "<MODE>")])
++
++;; Reload patterns for AdvSIMD register list operands.
++
++(define_expand "mov<mode>"
++ [(set (match_operand:VSTRUCT 0 "aarch64_simd_nonimmediate_operand" "")
++ (match_operand:VSTRUCT 1 "aarch64_simd_general_operand" ""))]
++ "TARGET_SIMD"
++{
++ if (can_create_pseudo_p ())
++ {
++ if (GET_CODE (operands[0]) != REG)
++ operands[1] = force_reg (<MODE>mode, operands[1]);
++ }
++})
++
++(define_insn "*aarch64_mov<mode>"
++ [(set (match_operand:VSTRUCT 0 "aarch64_simd_nonimmediate_operand" "=w,Utv,w")
++ (match_operand:VSTRUCT 1 "aarch64_simd_general_operand" " w,w,Utv"))]
++ "TARGET_SIMD
++ && (register_operand (operands[0], <MODE>mode)
++ || register_operand (operands[1], <MODE>mode))"
++
++{
++ switch (which_alternative)
++ {
++ case 0: return "#";
++ case 1: return "st1\\t{%S1.16b - %<Vendreg>1.16b}, %0";
++ case 2: return "ld1\\t{%S0.16b - %<Vendreg>0.16b}, %1";
++ default: gcc_unreachable ();
++ }
++}
++ [(set_attr "simd_type" "simd_move,simd_store<nregs>,simd_load<nregs>")
++ (set (attr "length") (symbol_ref "aarch64_simd_attr_length_move (insn)"))
++ (set_attr "simd_mode" "<MODE>")])
++
++(define_split
++ [(set (match_operand:OI 0 "register_operand" "")
++ (match_operand:OI 1 "register_operand" ""))]
++ "TARGET_SIMD && reload_completed"
++ [(set (match_dup 0) (match_dup 1))
++ (set (match_dup 2) (match_dup 3))]
++{
++ int rdest = REGNO (operands[0]);
++ int rsrc = REGNO (operands[1]);
++ rtx dest[2], src[2];
++
++ dest[0] = gen_rtx_REG (TFmode, rdest);
++ src[0] = gen_rtx_REG (TFmode, rsrc);
++ dest[1] = gen_rtx_REG (TFmode, rdest + 1);
++ src[1] = gen_rtx_REG (TFmode, rsrc + 1);
++
++ aarch64_simd_disambiguate_copy (operands, dest, src, 2);
++})
++
++(define_split
++ [(set (match_operand:CI 0 "register_operand" "")
++ (match_operand:CI 1 "register_operand" ""))]
++ "TARGET_SIMD && reload_completed"
++ [(set (match_dup 0) (match_dup 1))
++ (set (match_dup 2) (match_dup 3))
++ (set (match_dup 4) (match_dup 5))]
++{
++ int rdest = REGNO (operands[0]);
++ int rsrc = REGNO (operands[1]);
++ rtx dest[3], src[3];
++
++ dest[0] = gen_rtx_REG (TFmode, rdest);
++ src[0] = gen_rtx_REG (TFmode, rsrc);
++ dest[1] = gen_rtx_REG (TFmode, rdest + 1);
++ src[1] = gen_rtx_REG (TFmode, rsrc + 1);
++ dest[2] = gen_rtx_REG (TFmode, rdest + 2);
++ src[2] = gen_rtx_REG (TFmode, rsrc + 2);
++
++ aarch64_simd_disambiguate_copy (operands, dest, src, 3);
++})
++
++(define_split
++ [(set (match_operand:XI 0 "register_operand" "")
++ (match_operand:XI 1 "register_operand" ""))]
++ "TARGET_SIMD && reload_completed"
++ [(set (match_dup 0) (match_dup 1))
++ (set (match_dup 2) (match_dup 3))
++ (set (match_dup 4) (match_dup 5))
++ (set (match_dup 6) (match_dup 7))]
++{
++ int rdest = REGNO (operands[0]);
++ int rsrc = REGNO (operands[1]);
++ rtx dest[4], src[4];
++
++ dest[0] = gen_rtx_REG (TFmode, rdest);
++ src[0] = gen_rtx_REG (TFmode, rsrc);
++ dest[1] = gen_rtx_REG (TFmode, rdest + 1);
++ src[1] = gen_rtx_REG (TFmode, rsrc + 1);
++ dest[2] = gen_rtx_REG (TFmode, rdest + 2);
++ src[2] = gen_rtx_REG (TFmode, rsrc + 2);
++ dest[3] = gen_rtx_REG (TFmode, rdest + 3);
++ src[3] = gen_rtx_REG (TFmode, rsrc + 3);
++
++ aarch64_simd_disambiguate_copy (operands, dest, src, 4);
++})
++
++(define_insn "aarch64_ld2<mode>_dreg"
++ [(set (match_operand:OI 0 "register_operand" "=w")
++ (subreg:OI
++ (vec_concat:<VRL2>
++ (vec_concat:<VDBL>
++ (unspec:VD [(match_operand:TI 1 "aarch64_simd_struct_operand" "Utv")]
++ UNSPEC_LD2)
++ (vec_duplicate:VD (const_int 0)))
++ (vec_concat:<VDBL>
++ (unspec:VD [(match_dup 1)]
++ UNSPEC_LD2)
++ (vec_duplicate:VD (const_int 0)))) 0))]
++ "TARGET_SIMD"
++ "ld2\\t{%S0.<Vtype> - %T0.<Vtype>}, %1"
++ [(set_attr "simd_type" "simd_load2")
++ (set_attr "simd_mode" "<MODE>")])
++
++(define_insn "aarch64_ld2<mode>_dreg"
++ [(set (match_operand:OI 0 "register_operand" "=w")
++ (subreg:OI
++ (vec_concat:<VRL2>
++ (vec_concat:<VDBL>
++ (unspec:DX [(match_operand:TI 1 "aarch64_simd_struct_operand" "Utv")]
++ UNSPEC_LD2)
++ (const_int 0))
++ (vec_concat:<VDBL>
++ (unspec:DX [(match_dup 1)]
++ UNSPEC_LD2)
++ (const_int 0))) 0))]
++ "TARGET_SIMD"
++ "ld1\\t{%S0.1d - %T0.1d}, %1"
++ [(set_attr "simd_type" "simd_load2")
++ (set_attr "simd_mode" "<MODE>")])
++
++(define_insn "aarch64_ld3<mode>_dreg"
++ [(set (match_operand:CI 0 "register_operand" "=w")
++ (subreg:CI
++ (vec_concat:<VRL3>
++ (vec_concat:<VRL2>
++ (vec_concat:<VDBL>
++ (unspec:VD [(match_operand:EI 1 "aarch64_simd_struct_operand" "Utv")]
++ UNSPEC_LD3)
++ (vec_duplicate:VD (const_int 0)))
++ (vec_concat:<VDBL>
++ (unspec:VD [(match_dup 1)]
++ UNSPEC_LD3)
++ (vec_duplicate:VD (const_int 0))))
++ (vec_concat:<VDBL>
++ (unspec:VD [(match_dup 1)]
++ UNSPEC_LD3)
++ (vec_duplicate:VD (const_int 0)))) 0))]
++ "TARGET_SIMD"
++ "ld3\\t{%S0.<Vtype> - %U0.<Vtype>}, %1"
++ [(set_attr "simd_type" "simd_load3")
++ (set_attr "simd_mode" "<MODE>")])
++
++(define_insn "aarch64_ld3<mode>_dreg"
++ [(set (match_operand:CI 0 "register_operand" "=w")
++ (subreg:CI
++ (vec_concat:<VRL3>
++ (vec_concat:<VRL2>
++ (vec_concat:<VDBL>
++ (unspec:DX [(match_operand:EI 1 "aarch64_simd_struct_operand" "Utv")]
++ UNSPEC_LD3)
++ (const_int 0))
++ (vec_concat:<VDBL>
++ (unspec:DX [(match_dup 1)]
++ UNSPEC_LD3)
++ (const_int 0)))
++ (vec_concat:<VDBL>
++ (unspec:DX [(match_dup 1)]
++ UNSPEC_LD3)
++ (const_int 0))) 0))]
++ "TARGET_SIMD"
++ "ld1\\t{%S0.1d - %U0.1d}, %1"
++ [(set_attr "simd_type" "simd_load3")
++ (set_attr "simd_mode" "<MODE>")])
++
++(define_insn "aarch64_ld4<mode>_dreg"
++ [(set (match_operand:XI 0 "register_operand" "=w")
++ (subreg:XI
++ (vec_concat:<VRL4>
++ (vec_concat:<VRL2>
++ (vec_concat:<VDBL>
++ (unspec:VD [(match_operand:OI 1 "aarch64_simd_struct_operand" "Utv")]
++ UNSPEC_LD4)
++ (vec_duplicate:VD (const_int 0)))
++ (vec_concat:<VDBL>
++ (unspec:VD [(match_dup 1)]
++ UNSPEC_LD4)
++ (vec_duplicate:VD (const_int 0))))
++ (vec_concat:<VRL2>
++ (vec_concat:<VDBL>
++ (unspec:VD [(match_dup 1)]
++ UNSPEC_LD4)
++ (vec_duplicate:VD (const_int 0)))
++ (vec_concat:<VDBL>
++ (unspec:VD [(match_dup 1)]
++ UNSPEC_LD4)
++ (vec_duplicate:VD (const_int 0))))) 0))]
++ "TARGET_SIMD"
++ "ld4\\t{%S0.<Vtype> - %V0.<Vtype>}, %1"
++ [(set_attr "simd_type" "simd_load4")
++ (set_attr "simd_mode" "<MODE>")])
++
++(define_insn "aarch64_ld4<mode>_dreg"
++ [(set (match_operand:XI 0 "register_operand" "=w")
++ (subreg:XI
++ (vec_concat:<VRL4>
++ (vec_concat:<VRL2>
++ (vec_concat:<VDBL>
++ (unspec:DX [(match_operand:OI 1 "aarch64_simd_struct_operand" "Utv")]
++ UNSPEC_LD4)
++ (const_int 0))
++ (vec_concat:<VDBL>
++ (unspec:DX [(match_dup 1)]
++ UNSPEC_LD4)
++ (const_int 0)))
++ (vec_concat:<VRL2>
++ (vec_concat:<VDBL>
++ (unspec:DX [(match_dup 1)]
++ UNSPEC_LD4)
++ (const_int 0))
++ (vec_concat:<VDBL>
++ (unspec:DX [(match_dup 1)]
++ UNSPEC_LD4)
++ (const_int 0)))) 0))]
++ "TARGET_SIMD"
++ "ld1\\t{%S0.1d - %V0.1d}, %1"
++ [(set_attr "simd_type" "simd_load4")
++ (set_attr "simd_mode" "<MODE>")])
++
++(define_expand "aarch64_ld<VSTRUCT:nregs><VDC:mode>"
++ [(match_operand:VSTRUCT 0 "register_operand" "=w")
++ (match_operand:DI 1 "register_operand" "r")
++ (unspec:VDC [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ "TARGET_SIMD"
++{
++ enum machine_mode mode = <VSTRUCT:VSTRUCT_DREG>mode;
++ rtx mem = gen_rtx_MEM (mode, operands[1]);
++
++ emit_insn (gen_aarch64_ld<VSTRUCT:nregs><VDC:mode>_dreg (operands[0], mem));
++ DONE;
++})
++
++(define_expand "aarch64_ld<VSTRUCT:nregs><VQ:mode>"
++ [(match_operand:VSTRUCT 0 "register_operand" "=w")
++ (match_operand:DI 1 "register_operand" "r")
++ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ "TARGET_SIMD"
++{
++ enum machine_mode mode = <VSTRUCT:MODE>mode;
++ rtx mem = gen_rtx_MEM (mode, operands[1]);
++
++ emit_insn (gen_vec_load_lanes<VSTRUCT:mode><VQ:mode> (operands[0], mem));
++ DONE;
++})
++
++;; Expanders for builtins to extract vector registers from large
++;; opaque integer modes.
++
++;; D-register list.
++
++(define_expand "aarch64_get_dreg<VSTRUCT:mode><VDC:mode>"
++ [(match_operand:VDC 0 "register_operand" "=w")
++ (match_operand:VSTRUCT 1 "register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ int part = INTVAL (operands[2]);
++ rtx temp = gen_reg_rtx (<VDC:VDBL>mode);
++ int offset = part * 16;
++
++ emit_move_insn (temp, gen_rtx_SUBREG (<VDC:VDBL>mode, operands[1], offset));
++ emit_move_insn (operands[0], gen_lowpart (<VDC:MODE>mode, temp));
++ DONE;
++})
++
++;; Q-register list.
++
++(define_expand "aarch64_get_qreg<VSTRUCT:mode><VQ:mode>"
++ [(match_operand:VQ 0 "register_operand" "=w")
++ (match_operand:VSTRUCT 1 "register_operand" "w")
++ (match_operand:SI 2 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ int part = INTVAL (operands[2]);
++ int offset = part * 16;
++
++ emit_move_insn (operands[0],
++ gen_rtx_SUBREG (<VQ:MODE>mode, operands[1], offset));
++ DONE;
++})
++
++;; Permuted-store expanders for neon intrinsics.
++
++;; Permute instructions
++
++;; vec_perm support
++
++(define_expand "vec_perm_const<mode>"
++ [(match_operand:VALL 0 "register_operand")
++ (match_operand:VALL 1 "register_operand")
++ (match_operand:VALL 2 "register_operand")
++ (match_operand:<V_cmp_result> 3)]
++ "TARGET_SIMD"
++{
++ if (aarch64_expand_vec_perm_const (operands[0], operands[1],
++ operands[2], operands[3]))
++ DONE;
++ else
++ FAIL;
++})
++
++(define_expand "vec_perm<mode>"
++ [(match_operand:VB 0 "register_operand")
++ (match_operand:VB 1 "register_operand")
++ (match_operand:VB 2 "register_operand")
++ (match_operand:VB 3 "register_operand")]
++ "TARGET_SIMD"
++{
++ aarch64_expand_vec_perm (operands[0], operands[1],
++ operands[2], operands[3]);
++ DONE;
++})
++
++(define_insn "aarch64_tbl1<mode>"
++ [(set (match_operand:VB 0 "register_operand" "=w")
++ (unspec:VB [(match_operand:V16QI 1 "register_operand" "w")
++ (match_operand:VB 2 "register_operand" "w")]
++ UNSPEC_TBL))]
++ "TARGET_SIMD"
++ "tbl\\t%0.<Vtype>, {%1.16b}, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_tbl")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++;; Two source registers.
++
++(define_insn "aarch64_tbl2v16qi"
++ [(set (match_operand:V16QI 0 "register_operand" "=w")
++ (unspec:V16QI [(match_operand:OI 1 "register_operand" "w")
++ (match_operand:V16QI 2 "register_operand" "w")]
++ UNSPEC_TBL))]
++ "TARGET_SIMD"
++ "tbl\\t%0.16b, {%S1.16b - %T1.16b}, %2.16b"
++ [(set_attr "simd_type" "simd_tbl")
++ (set_attr "simd_mode" "V16QI")]
++)
++
++(define_insn_and_split "aarch64_combinev16qi"
++ [(set (match_operand:OI 0 "register_operand" "=w")
++ (unspec:OI [(match_operand:V16QI 1 "register_operand" "w")
++ (match_operand:V16QI 2 "register_operand" "w")]
++ UNSPEC_CONCAT))]
++ "TARGET_SIMD"
++ "#"
++ "&& reload_completed"
++ [(const_int 0)]
++{
++ aarch64_split_combinev16qi (operands);
++ DONE;
++})
++
++(define_insn "aarch64_<PERMUTE:perm_insn><PERMUTE:perm_hilo><mode>"
++ [(set (match_operand:VALL 0 "register_operand" "=w")
++ (unspec:VALL [(match_operand:VALL 1 "register_operand" "w")
++ (match_operand:VALL 2 "register_operand" "w")]
++ PERMUTE))]
++ "TARGET_SIMD"
++ "<PERMUTE:perm_insn><PERMUTE:perm_hilo>\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
++ [(set_attr "simd_type" "simd_<PERMUTE:perm_insn>")
++ (set_attr "simd_mode" "<MODE>")]
++)
++
++(define_insn "aarch64_st2<mode>_dreg"
++ [(set (match_operand:TI 0 "aarch64_simd_struct_operand" "=Utv")
++ (unspec:TI [(match_operand:OI 1 "register_operand" "w")
++ (unspec:VD [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_ST2))]
++ "TARGET_SIMD"
++ "st2\\t{%S1.<Vtype> - %T1.<Vtype>}, %0"
++ [(set_attr "simd_type" "simd_store2")
++ (set_attr "simd_mode" "<MODE>")])
++
++(define_insn "aarch64_st2<mode>_dreg"
++ [(set (match_operand:TI 0 "aarch64_simd_struct_operand" "=Utv")
++ (unspec:TI [(match_operand:OI 1 "register_operand" "w")
++ (unspec:DX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_ST2))]
++ "TARGET_SIMD"
++ "st1\\t{%S1.1d - %T1.1d}, %0"
++ [(set_attr "simd_type" "simd_store2")
++ (set_attr "simd_mode" "<MODE>")])
++
++(define_insn "aarch64_st3<mode>_dreg"
++ [(set (match_operand:EI 0 "aarch64_simd_struct_operand" "=Utv")
++ (unspec:EI [(match_operand:CI 1 "register_operand" "w")
++ (unspec:VD [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_ST3))]
++ "TARGET_SIMD"
++ "st3\\t{%S1.<Vtype> - %U1.<Vtype>}, %0"
++ [(set_attr "simd_type" "simd_store3")
++ (set_attr "simd_mode" "<MODE>")])
++
++(define_insn "aarch64_st3<mode>_dreg"
++ [(set (match_operand:EI 0 "aarch64_simd_struct_operand" "=Utv")
++ (unspec:EI [(match_operand:CI 1 "register_operand" "w")
++ (unspec:DX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_ST3))]
++ "TARGET_SIMD"
++ "st1\\t{%S1.1d - %U1.1d}, %0"
++ [(set_attr "simd_type" "simd_store3")
++ (set_attr "simd_mode" "<MODE>")])
++
++(define_insn "aarch64_st4<mode>_dreg"
++ [(set (match_operand:OI 0 "aarch64_simd_struct_operand" "=Utv")
++ (unspec:OI [(match_operand:XI 1 "register_operand" "w")
++ (unspec:VD [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_ST4))]
++ "TARGET_SIMD"
++ "st4\\t{%S1.<Vtype> - %V1.<Vtype>}, %0"
++ [(set_attr "simd_type" "simd_store4")
++ (set_attr "simd_mode" "<MODE>")])
++
++(define_insn "aarch64_st4<mode>_dreg"
++ [(set (match_operand:OI 0 "aarch64_simd_struct_operand" "=Utv")
++ (unspec:OI [(match_operand:XI 1 "register_operand" "w")
++ (unspec:DX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ UNSPEC_ST4))]
++ "TARGET_SIMD"
++ "st1\\t{%S1.1d - %V1.1d}, %0"
++ [(set_attr "simd_type" "simd_store4")
++ (set_attr "simd_mode" "<MODE>")])
++
++(define_expand "aarch64_st<VSTRUCT:nregs><VDC:mode>"
++ [(match_operand:DI 0 "register_operand" "r")
++ (match_operand:VSTRUCT 1 "register_operand" "w")
++ (unspec:VDC [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ "TARGET_SIMD"
++{
++ enum machine_mode mode = <VSTRUCT:VSTRUCT_DREG>mode;
++ rtx mem = gen_rtx_MEM (mode, operands[0]);
++
++ emit_insn (gen_aarch64_st<VSTRUCT:nregs><VDC:mode>_dreg (mem, operands[1]));
++ DONE;
++})
++
++(define_expand "aarch64_st<VSTRUCT:nregs><VQ:mode>"
++ [(match_operand:DI 0 "register_operand" "r")
++ (match_operand:VSTRUCT 1 "register_operand" "w")
++ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
++ "TARGET_SIMD"
++{
++ enum machine_mode mode = <VSTRUCT:MODE>mode;
++ rtx mem = gen_rtx_MEM (mode, operands[0]);
++
++ emit_insn (gen_vec_store_lanes<VSTRUCT:mode><VQ:mode> (mem, operands[1]));
++ DONE;
++})
++
++;; Expander for builtins to insert vector registers into large
++;; opaque integer modes.
++
++;; Q-register list. We don't need a D-reg inserter as we zero
++;; extend them in arm_neon.h and insert the resulting Q-regs.
++
++(define_expand "aarch64_set_qreg<VSTRUCT:mode><VQ:mode>"
++ [(match_operand:VSTRUCT 0 "register_operand" "+w")
++ (match_operand:VSTRUCT 1 "register_operand" "0")
++ (match_operand:VQ 2 "register_operand" "w")
++ (match_operand:SI 3 "immediate_operand" "i")]
++ "TARGET_SIMD"
++{
++ int part = INTVAL (operands[3]);
++ int offset = part * 16;
++
++ emit_move_insn (operands[0], operands[1]);
++ emit_move_insn (gen_rtx_SUBREG (<VQ:MODE>mode, operands[0], offset),
++ operands[2]);
++ DONE;
++})
++
++;; Standard pattern name vec_init<mode>.
++
++(define_expand "vec_init<mode>"
++ [(match_operand:VALL 0 "register_operand" "")
++ (match_operand 1 "" "")]
++ "TARGET_SIMD"
++{
++ aarch64_expand_vector_init (operands[0], operands[1]);
++ DONE;
++})
++
++(define_insn "*aarch64_simd_ld1r<mode>"
++ [(set (match_operand:VALLDI 0 "register_operand" "=w")
++ (vec_duplicate:VALLDI
++ (match_operand:<VEL> 1 "aarch64_simd_struct_operand" "Utv")))]
++ "TARGET_SIMD"
++ "ld1r\\t{%0.<Vtype>}, %1"
++ [(set_attr "simd_type" "simd_load1r")
++ (set_attr "simd_mode" "<MODE>")])
+--- a/src/gcc/config/aarch64/aarch64-tune.md
++++ b/src/gcc/config/aarch64/aarch64-tune.md
+@@ -0,0 +1,5 @@
++;; -*- buffer-read-only: t -*-
++;; Generated automatically by gentune.sh from aarch64-cores.def
++(define_attr "tune"
++ "large,small"
++ (const (symbol_ref "((enum attr_tune) aarch64_tune)")))
--- a/src/gcc/config/aarch64/aarch64.c
+++ b/src/gcc/config/aarch64/aarch64.c
@@ -0,0 +1,7972 @@
@@ -9554,7 +15282,7 @@
+
+/* Implement REGNO_REG_CLASS. */
+
-+unsigned
++enum reg_class
+aarch64_regno_regclass (unsigned regno)
+{
+ if (GP_REGNUM_P (regno))
@@ -13852,258 +19580,6 @@
+struct gcc_target targetm = TARGET_INITIALIZER;
+
+#include "gt-aarch64.h"
---- a/src/gcc/config/aarch64/aarch64-cores.def
-+++ b/src/gcc/config/aarch64/aarch64-cores.def
-@@ -0,0 +1,38 @@
-+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc.
-+ Contributed by ARM Ltd.
-+
-+ This file is part of GCC.
-+
-+ GCC is free software; you can redistribute it and/or modify it
-+ under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 3, or (at your option)
-+ any later version.
-+
-+ GCC is distributed in the hope that it will be useful, but
-+ WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with GCC; see the file COPYING3. If not see
-+ <http://www.gnu.org/licenses/>. */
-+
-+/* This is a list of cores that implement AArch64.
-+
-+ Before using #include to read this file, define a macro:
-+
-+ AARCH64_CORE(CORE_NAME, CORE_IDENT, ARCH, FLAGS, COSTS)
-+
-+ The CORE_NAME is the name of the core, represented as a string constant.
-+ The CORE_IDENT is the name of the core, represented as an identifier.
-+ ARCH is the architecture revision implemented by the chip.
-+ FLAGS are the bitwise-or of the traits that apply to that core.
-+ This need not include flags implied by the architecture.
-+ COSTS is the name of the rtx_costs routine to use. */
-+
-+/* V8 Architecture Processors.
-+ This list currently contains example CPUs that implement AArch64, and
-+ therefore serves as a template for adding more CPUs in the future. */
-+
-+AARCH64_CORE("example-1", large, 8, AARCH64_FL_FPSIMD, generic)
-+AARCH64_CORE("example-2", small, 8, AARCH64_FL_FPSIMD, generic)
---- a/src/gcc/config/aarch64/aarch64-elf.h
-+++ b/src/gcc/config/aarch64/aarch64-elf.h
-@@ -0,0 +1,132 @@
-+/* Machine description for AArch64 architecture.
-+ Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
-+ Contributed by ARM Ltd.
-+
-+ This file is part of GCC.
-+
-+ GCC is free software; you can redistribute it and/or modify it
-+ under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 3, or (at your option)
-+ any later version.
-+
-+ GCC is distributed in the hope that it will be useful, but
-+ WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with GCC; see the file COPYING3. If not see
-+ <http://www.gnu.org/licenses/>. */
-+
-+#ifndef GCC_AARCH64_ELF_H
-+#define GCC_AARCH64_ELF_H
-+
-+
-+#define ASM_OUTPUT_LABELREF(FILE, NAME) \
-+ aarch64_asm_output_labelref (FILE, NAME)
-+
-+#define ASM_OUTPUT_DEF(FILE, NAME1, NAME2) \
-+ do \
-+ { \
-+ assemble_name (FILE, NAME1); \
-+ fputs (" = ", FILE); \
-+ assemble_name (FILE, NAME2); \
-+ fputc ('\n', FILE); \
-+ } while (0)
-+
-+#define TEXT_SECTION_ASM_OP "\t.text"
-+#define DATA_SECTION_ASM_OP "\t.data"
-+#define BSS_SECTION_ASM_OP "\t.bss"
-+
-+#define CTORS_SECTION_ASM_OP "\t.section\t.init_array,\"aw\",%init_array"
-+#define DTORS_SECTION_ASM_OP "\t.section\t.fini_array,\"aw\",%fini_array"
-+
-+#undef INIT_SECTION_ASM_OP
-+#undef FINI_SECTION_ASM_OP
-+#define INIT_ARRAY_SECTION_ASM_OP CTORS_SECTION_ASM_OP
-+#define FINI_ARRAY_SECTION_ASM_OP DTORS_SECTION_ASM_OP
-+
-+/* Since we use .init_array/.fini_array we don't need the markers at
-+ the start and end of the ctors/dtors arrays. */
-+#define CTOR_LIST_BEGIN asm (CTORS_SECTION_ASM_OP)
-+#define CTOR_LIST_END /* empty */
-+#define DTOR_LIST_BEGIN asm (DTORS_SECTION_ASM_OP)
-+#define DTOR_LIST_END /* empty */
-+
-+#undef TARGET_ASM_CONSTRUCTOR
-+#define TARGET_ASM_CONSTRUCTOR aarch64_elf_asm_constructor
-+
-+#undef TARGET_ASM_DESTRUCTOR
-+#define TARGET_ASM_DESTRUCTOR aarch64_elf_asm_destructor
-+
-+#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN
-+/* Support for -falign-* switches. Use .p2align to ensure that code
-+ sections are padded with NOP instructions, rather than zeros. */
-+#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE, LOG, MAX_SKIP) \
-+ do \
-+ { \
-+ if ((LOG) != 0) \
-+ { \
-+ if ((MAX_SKIP) == 0) \
-+ fprintf ((FILE), "\t.p2align %d\n", (int) (LOG)); \
-+ else \
-+ fprintf ((FILE), "\t.p2align %d,,%d\n", \
-+ (int) (LOG), (int) (MAX_SKIP)); \
-+ } \
-+ } while (0)
-+
-+#endif /* HAVE_GAS_MAX_SKIP_P2ALIGN */
-+
-+#define JUMP_TABLES_IN_TEXT_SECTION 0
-+
-+#define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL) \
-+ do { \
-+ switch (GET_MODE (BODY)) \
-+ { \
-+ case QImode: \
-+ asm_fprintf (STREAM, "\t.byte\t(%LL%d - %LLrtx%d) / 4\n", \
-+ VALUE, REL); \
-+ break; \
-+ case HImode: \
-+ asm_fprintf (STREAM, "\t.2byte\t(%LL%d - %LLrtx%d) / 4\n", \
-+ VALUE, REL); \
-+ break; \
-+ case SImode: \
-+ case DImode: /* See comment in aarch64_output_casesi. */ \
-+ asm_fprintf (STREAM, "\t.word\t(%LL%d - %LLrtx%d) / 4\n", \
-+ VALUE, REL); \
-+ break; \
-+ default: \
-+ gcc_unreachable (); \
-+ } \
-+ } while (0)
-+
-+#define ASM_OUTPUT_ALIGN(STREAM, POWER) \
-+ fprintf(STREAM, "\t.align\t%d\n", (int)POWER)
-+
-+#define ASM_COMMENT_START "//"
-+
-+#define REGISTER_PREFIX ""
-+#define LOCAL_LABEL_PREFIX "."
-+#define USER_LABEL_PREFIX ""
-+
-+#define GLOBAL_ASM_OP "\t.global\t"
-+
-+#ifndef ASM_SPEC
-+#define ASM_SPEC "\
-+%{mbig-endian:-EB} \
-+%{mlittle-endian:-EL} \
-+%{mcpu=*:-mcpu=%*} \
-+%{march=*:-march=%*}"
-+#endif
-+
-+#undef TYPE_OPERAND_FMT
-+#define TYPE_OPERAND_FMT "%%%s"
-+
-+#undef TARGET_ASM_NAMED_SECTION
-+#define TARGET_ASM_NAMED_SECTION aarch64_elf_asm_named_section
-+
-+/* Stabs debug not required. */
-+#undef DBX_DEBUGGING_INFO
-+
-+#endif /* GCC_AARCH64_ELF_H */
---- a/src/gcc/config/aarch64/aarch64-elf-raw.h
-+++ b/src/gcc/config/aarch64/aarch64-elf-raw.h
-@@ -0,0 +1,32 @@
-+/* Machine description for AArch64 architecture.
-+ Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
-+ Contributed by ARM Ltd.
-+
-+ This file is part of GCC.
-+
-+ GCC is free software; you can redistribute it and/or modify it
-+ under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 3, or (at your option)
-+ any later version.
-+
-+ GCC is distributed in the hope that it will be useful, but
-+ WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with GCC; see the file COPYING3. If not see
-+ <http://www.gnu.org/licenses/>. */
-+
-+/* Support for bare-metal builds. */
-+#ifndef GCC_AARCH64_ELF_RAW_H
-+#define GCC_AARCH64_ELF_RAW_H
-+
-+#define STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s"
-+#define ENDFILE_SPEC " crtend%O%s crtn%O%s"
-+
-+#ifndef LINK_SPEC
-+#define LINK_SPEC "%{mbig-endian:-EB} %{mlittle-endian:-EL} -X"
-+#endif
-+
-+#endif /* GCC_AARCH64_ELF_RAW_H */
---- a/src/gcc/config/aarch64/aarch64-generic.md
-+++ b/src/gcc/config/aarch64/aarch64-generic.md
-@@ -0,0 +1,38 @@
-+;; Machine description for AArch64 architecture.
-+;; Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
-+;; Contributed by ARM Ltd.
-+;;
-+;; This file is part of GCC.
-+;;
-+;; GCC is free software; you can redistribute it and/or modify it
-+;; under the terms of the GNU General Public License as published by
-+;; the Free Software Foundation; either version 3, or (at your option)
-+;; any later version.
-+;;
-+;; GCC is distributed in the hope that it will be useful, but
-+;; WITHOUT ANY WARRANTY; without even the implied warranty of
-+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+;; General Public License for more details.
-+;;
-+;; You should have received a copy of the GNU General Public License
-+;; along with GCC; see the file COPYING3. If not see
-+;; <http://www.gnu.org/licenses/>.
-+
-+;; Generic scheduler
-+
-+(define_automaton "aarch64")
-+
-+(define_cpu_unit "core" "aarch64")
-+
-+(define_attr "is_load" "yes,no"
-+ (if_then_else (eq_attr "v8type" "fpsimd_load,fpsimd_load2,load1,load2")
-+ (const_string "yes")
-+ (const_string "no")))
-+
-+(define_insn_reservation "load" 2
-+ (eq_attr "is_load" "yes")
-+ "core")
-+
-+(define_insn_reservation "nonload" 1
-+ (eq_attr "is_load" "no")
-+ "core")
--- a/src/gcc/config/aarch64/aarch64.h
+++ b/src/gcc/config/aarch64/aarch64.h
@@ -0,0 +1,823 @@
@@ -14930,53 +20406,6 @@
+ || (MODE) == V4SFmode || (MODE) == V2DImode || mode == V2DFmode)
+
+#endif /* GCC_AARCH64_H */
---- a/src/gcc/config/aarch64/aarch64-linux.h
-+++ b/src/gcc/config/aarch64/aarch64-linux.h
-@@ -0,0 +1,44 @@
-+/* Machine description for AArch64 architecture.
-+ Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
-+ Contributed by ARM Ltd.
-+
-+ This file is part of GCC.
-+
-+ GCC is free software; you can redistribute it and/or modify it
-+ under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 3, or (at your option)
-+ any later version.
-+
-+ GCC is distributed in the hope that it will be useful, but
-+ WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with GCC; see the file COPYING3. If not see
-+ <http://www.gnu.org/licenses/>. */
-+
-+#ifndef GCC_AARCH64_LINUX_H
-+#define GCC_AARCH64_LINUX_H
-+
-+#define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64.so.1"
-+
-+#define LINUX_TARGET_LINK_SPEC "%{h*} \
-+ %{static:-Bstatic} \
-+ %{shared:-shared} \
-+ %{symbolic:-Bsymbolic} \
-+ %{rdynamic:-export-dynamic} \
-+ -dynamic-linker " GNU_USER_DYNAMIC_LINKER " \
-+ -X \
-+ %{mbig-endian:-EB} %{mlittle-endian:-EL}"
-+
-+#define LINK_SPEC LINUX_TARGET_LINK_SPEC
-+
-+#define TARGET_OS_CPP_BUILTINS() \
-+ do \
-+ { \
-+ GNU_USER_TARGET_OS_CPP_BUILTINS(); \
-+ } \
-+ while (0)
-+
-+#endif /* GCC_AARCH64_LINUX_H */
--- a/src/gcc/config/aarch64/aarch64.md
+++ b/src/gcc/config/aarch64/aarch64.md
@@ -0,0 +1,3216 @@
@@ -18196,63 +23625,6 @@
+
+;; Atomic Operations
+(include "atomics.md")
---- a/src/gcc/config/aarch64/aarch64-modes.def
-+++ b/src/gcc/config/aarch64/aarch64-modes.def
-@@ -0,0 +1,54 @@
-+/* Machine description for AArch64 architecture.
-+ Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
-+ Contributed by ARM Ltd.
-+
-+ This file is part of GCC.
-+
-+ GCC is free software; you can redistribute it and/or modify it
-+ under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 3, or (at your option)
-+ any later version.
-+
-+ GCC is distributed in the hope that it will be useful, but
-+ WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with GCC; see the file COPYING3. If not see
-+ <http://www.gnu.org/licenses/>. */
-+
-+CC_MODE (CCFP);
-+CC_MODE (CCFPE);
-+CC_MODE (CC_SWP);
-+CC_MODE (CC_ZESWP); /* zero-extend LHS (but swap to make it RHS). */
-+CC_MODE (CC_SESWP); /* sign-extend LHS (but swap to make it RHS). */
-+CC_MODE (CC_NZ); /* Only N and Z bits of condition flags are valid. */
-+
-+/* Vector modes. */
-+VECTOR_MODES (INT, 8); /* V8QI V4HI V2SI. */
-+VECTOR_MODES (INT, 16); /* V16QI V8HI V4SI V2DI. */
-+VECTOR_MODES (FLOAT, 8); /* V2SF. */
-+VECTOR_MODES (FLOAT, 16); /* V4SF V2DF. */
-+
-+/* Oct Int: 256-bit integer mode needed for 32-byte vector arguments. */
-+INT_MODE (OI, 32);
-+
-+/* Opaque integer modes for 3, 6 or 8 Neon double registers (2 is
-+ TImode). */
-+INT_MODE (EI, 24);
-+INT_MODE (CI, 48);
-+INT_MODE (XI, 64);
-+
-+/* Vector modes for register lists. */
-+VECTOR_MODES (INT, 32); /* V32QI V16HI V8SI V4DI. */
-+VECTOR_MODES (FLOAT, 32); /* V8SF V4DF. */
-+
-+VECTOR_MODES (INT, 48); /* V32QI V16HI V8SI V4DI. */
-+VECTOR_MODES (FLOAT, 48); /* V8SF V4DF. */
-+
-+VECTOR_MODES (INT, 64); /* V32QI V16HI V8SI V4DI. */
-+VECTOR_MODES (FLOAT, 64); /* V8SF V4DF. */
-+
-+/* Quad float: 128-bit floating mode for long doubles. */
-+FLOAT_MODE (TF, 16, ieee_quad_format);
--- a/src/gcc/config/aarch64/aarch64.opt
+++ b/src/gcc/config/aarch64/aarch64.opt
@@ -0,0 +1,100 @@
@@ -18356,4358 +23728,6 @@
+mtune=
+Target RejectNegative Joined Var(aarch64_tune_string)
+-mtune=CPU Optimize for CPU
---- a/src/gcc/config/aarch64/aarch64-option-extensions.def
-+++ b/src/gcc/config/aarch64/aarch64-option-extensions.def
-@@ -0,0 +1,37 @@
-+/* Copyright (C) 2012 Free Software Foundation, Inc.
-+ Contributed by ARM Ltd.
-+
-+ This file is part of GCC.
-+
-+ GCC is free software; you can redistribute it and/or modify it
-+ under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 3, or (at your option)
-+ any later version.
-+
-+ GCC is distributed in the hope that it will be useful, but
-+ WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with GCC; see the file COPYING3. If not see
-+ <http://www.gnu.org/licenses/>. */
-+
-+/* This is a list of ISA extentsions in AArch64.
-+
-+ Before using #include to read this file, define a macro:
-+
-+ AARCH64_OPT_EXTENSION(EXT_NAME, FLAGS_ON, FLAGS_OFF)
-+
-+ EXT_NAME is the name of the extension, represented as a string constant.
-+ FLAGS_ON are the bitwise-or of the features that the extension adds.
-+ FLAGS_OFF are the bitwise-or of the features that the extension removes. */
-+
-+/* V8 Architecture Extensions.
-+ This list currently contains example extensions for CPUs that implement
-+ AArch64, and therefore serves as a template for adding more CPUs in the
-+ future. */
-+
-+AARCH64_OPT_EXTENSION("fp", AARCH64_FL_FP, AARCH64_FL_FPSIMD | AARCH64_FL_CRYPTO)
-+AARCH64_OPT_EXTENSION("simd", AARCH64_FL_FPSIMD, AARCH64_FL_SIMD | AARCH64_FL_CRYPTO)
-+AARCH64_OPT_EXTENSION("crypto", AARCH64_FL_CRYPTO | AARCH64_FL_FPSIMD, AARCH64_FL_CRYPTO)
---- a/src/gcc/config/aarch64/aarch64-opts.h
-+++ b/src/gcc/config/aarch64/aarch64-opts.h
-@@ -0,0 +1,64 @@
-+/* Copyright (C) 2011, 2012 Free Software Foundation, Inc.
-+ Contributed by ARM Ltd.
-+
-+ This file is part of GCC.
-+
-+ GCC is free software; you can redistribute it and/or modify it
-+ under the terms of the GNU General Public License as published
-+ by the Free Software Foundation; either version 3, or (at your
-+ option) any later version.
-+
-+ GCC is distributed in the hope that it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
-+ License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with GCC; see the file COPYING3. If not see
-+ <http://www.gnu.org/licenses/>. */
-+
-+/* Definitions for option handling for AArch64. */
-+
-+#ifndef GCC_AARCH64_OPTS_H
-+#define GCC_AARCH64_OPTS_H
-+
-+/* The various cores that implement AArch64. */
-+enum aarch64_processor
-+{
-+#define AARCH64_CORE(NAME, IDENT, ARCH, FLAGS, COSTS) \
-+ IDENT,
-+#include "aarch64-cores.def"
-+#undef AARCH64_CORE
-+ /* Used to indicate that no processor has been specified. */
-+ generic,
-+ /* Used to mark the end of the processor table. */
-+ aarch64_none
-+};
-+
-+/* TLS types. */
-+enum aarch64_tls_type {
-+ TLS_TRADITIONAL,
-+ TLS_DESCRIPTORS
-+};
-+
-+/* The code model defines the address generation strategy.
-+ Most have a PIC and non-PIC variant. */
-+enum aarch64_code_model {
-+ /* Static code and data fit within a 1MB region.
-+ Not fully implemented, mostly treated as SMALL. */
-+ AARCH64_CMODEL_TINY,
-+ /* Static code, data and GOT/PLT fit within a 1MB region.
-+ Not fully implemented, mostly treated as SMALL_PIC. */
-+ AARCH64_CMODEL_TINY_PIC,
-+ /* Static code and data fit within a 4GB region.
-+ The default non-PIC code model. */
-+ AARCH64_CMODEL_SMALL,
-+ /* Static code, data and GOT/PLT fit within a 4GB region.
-+ The default PIC code model. */
-+ AARCH64_CMODEL_SMALL_PIC,
-+ /* No assumptions about addresses of code and data.
-+ The PIC variant is not yet implemented. */
-+ AARCH64_CMODEL_LARGE
-+};
-+
-+#endif
---- a/src/gcc/config/aarch64/aarch64-protos.h
-+++ b/src/gcc/config/aarch64/aarch64-protos.h
-@@ -0,0 +1,254 @@
-+/* Machine description for AArch64 architecture.
-+ Copyright (C) 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
-+ Contributed by ARM Ltd.
-+
-+ This file is part of GCC.
-+
-+ GCC is free software; you can redistribute it and/or modify it
-+ under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 3, or (at your option)
-+ any later version.
-+
-+ GCC is distributed in the hope that it will be useful, but
-+ WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with GCC; see the file COPYING3. If not see
-+ <http://www.gnu.org/licenses/>. */
-+
-+
-+#ifndef GCC_AARCH64_PROTOS_H
-+#define GCC_AARCH64_PROTOS_H
-+
-+/*
-+ SYMBOL_CONTEXT_ADR
-+ The symbol is used in a load-address operation.
-+ SYMBOL_CONTEXT_MEM
-+ The symbol is used as the address in a MEM.
-+ */
-+enum aarch64_symbol_context
-+{
-+ SYMBOL_CONTEXT_MEM,
-+ SYMBOL_CONTEXT_ADR
-+};
-+
-+/* SYMBOL_SMALL_ABSOLUTE: Generate symbol accesses through
-+ high and lo relocs that calculate the base address using a PC
-+ relative reloc.
-+ So to get the address of foo, we generate
-+ adrp x0, foo
-+ add x0, x0, :lo12:foo
-+
-+ To load or store something to foo, we could use the corresponding
-+ load store variants that generate an
-+ ldr x0, [x0,:lo12:foo]
-+ or
-+ str x1, [x0, :lo12:foo]
-+
-+ This corresponds to the small code model of the compiler.
-+
-+ SYMBOL_SMALL_GOT: Similar to the one above but this
-+ gives us the GOT entry of the symbol being referred to :
-+ Thus calculating the GOT entry for foo is done using the
-+ following sequence of instructions. The ADRP instruction
-+ gets us to the page containing the GOT entry of the symbol
-+ and the got_lo12 gets us the actual offset in it.
-+
-+ adrp x0, :got:foo
-+ ldr x0, [x0, :gotoff_lo12:foo]
-+
-+ This corresponds to the small PIC model of the compiler.
-+
-+ SYMBOL_SMALL_TLSGD
-+ SYMBOL_SMALL_TLSDESC
-+ SYMBOL_SMALL_GOTTPREL
-+ SYMBOL_SMALL_TPREL
-+ Each of of these represents a thread-local symbol, and corresponds to the
-+ thread local storage relocation operator for the symbol being referred to.
-+
-+ SYMBOL_FORCE_TO_MEM : Global variables are addressed using
-+ constant pool. All variable addresses are spilled into constant
-+ pools. The constant pools themselves are addressed using PC
-+ relative accesses. This only works for the large code model.
-+ */
-+enum aarch64_symbol_type
-+{
-+ SYMBOL_SMALL_ABSOLUTE,
-+ SYMBOL_SMALL_GOT,
-+ SYMBOL_SMALL_TLSGD,
-+ SYMBOL_SMALL_TLSDESC,
-+ SYMBOL_SMALL_GOTTPREL,
-+ SYMBOL_SMALL_TPREL,
-+ SYMBOL_FORCE_TO_MEM
-+};
-+
-+/* A set of tuning parameters contains references to size and time
-+ cost models and vectors for address cost calculations, register
-+ move costs and memory move costs. */
-+
-+/* Extra costs for specific insns. Only records the cost above a
-+ single insn. */
-+
-+struct cpu_rtx_cost_table
-+{
-+ const int memory_load;
-+ const int memory_store;
-+ const int register_shift;
-+ const int int_divide;
-+ const int float_divide;
-+ const int double_divide;
-+ const int int_multiply;
-+ const int int_multiply_extend;
-+ const int int_multiply_add;
-+ const int int_multiply_extend_add;
-+ const int float_multiply;
-+ const int double_multiply;
-+};
-+
-+/* Additional cost for addresses. */
-+struct cpu_addrcost_table
-+{
-+ const int pre_modify;
-+ const int post_modify;
-+ const int register_offset;
-+ const int register_extend;
-+ const int imm_offset;
-+};
-+
-+/* Additional costs for register copies. Cost is for one register. */
-+struct cpu_regmove_cost
-+{
-+ const int GP2GP;
-+ const int GP2FP;
-+ const int FP2GP;
-+ const int FP2FP;
-+};
-+
-+struct tune_params
-+{
-+ const struct cpu_rtx_cost_table *const insn_extra_cost;
-+ const struct cpu_addrcost_table *const addr_cost;
-+ const struct cpu_regmove_cost *const regmove_cost;
-+ const int memmov_cost;
-+};
-+
-+HOST_WIDE_INT aarch64_initial_elimination_offset (unsigned, unsigned);
-+bool aarch64_bitmask_imm (HOST_WIDE_INT val, enum machine_mode);
-+bool aarch64_constant_address_p (rtx);
-+bool aarch64_float_const_zero_rtx_p (rtx);
-+bool aarch64_function_arg_regno_p (unsigned);
-+bool aarch64_gen_movmemqi (rtx *);
-+bool aarch64_is_extend_from_extract (enum machine_mode, rtx, rtx);
-+bool aarch64_is_long_call_p (rtx);
-+bool aarch64_label_mentioned_p (rtx);
-+bool aarch64_legitimate_pic_operand_p (rtx);
-+bool aarch64_move_imm (HOST_WIDE_INT, enum machine_mode);
-+bool aarch64_pad_arg_upward (enum machine_mode, const_tree);
-+bool aarch64_pad_reg_upward (enum machine_mode, const_tree, bool);
-+bool aarch64_regno_ok_for_base_p (int, bool);
-+bool aarch64_regno_ok_for_index_p (int, bool);
-+bool aarch64_simd_imm_scalar_p (rtx x, enum machine_mode mode);
-+bool aarch64_simd_imm_zero_p (rtx, enum machine_mode);
-+bool aarch64_simd_shift_imm_p (rtx, enum machine_mode, bool);
-+bool aarch64_symbolic_address_p (rtx);
-+bool aarch64_symbolic_constant_p (rtx, enum aarch64_symbol_context,
-+ enum aarch64_symbol_type *);
-+bool aarch64_uimm12_shift (HOST_WIDE_INT);
-+const char *aarch64_output_casesi (rtx *);
-+enum aarch64_symbol_type aarch64_classify_symbol (rtx,
-+ enum aarch64_symbol_context);
-+enum aarch64_symbol_type aarch64_classify_tls_symbol (rtx);
-+int aarch64_asm_preferred_eh_data_format (int, int);
-+int aarch64_hard_regno_mode_ok (unsigned, enum machine_mode);
-+int aarch64_hard_regno_nregs (unsigned, enum machine_mode);
-+int aarch64_simd_attr_length_move (rtx);
-+int aarch64_simd_immediate_valid_for_move (rtx, enum machine_mode, rtx *,
-+ int *, unsigned char *, int *,
-+ int *);
-+int aarch64_uxt_size (int, HOST_WIDE_INT);
-+rtx aarch64_final_eh_return_addr (void);
-+rtx aarch64_legitimize_reload_address (rtx *, enum machine_mode, int, int, int);
-+const char *aarch64_output_move_struct (rtx *operands);
-+rtx aarch64_return_addr (int, rtx);
-+rtx aarch64_simd_gen_const_vector_dup (enum machine_mode, int);
-+bool aarch64_simd_mem_operand_p (rtx);
-+rtx aarch64_simd_vect_par_cnst_half (enum machine_mode, bool);
-+rtx aarch64_tls_get_addr (void);
-+unsigned aarch64_dbx_register_number (unsigned);
-+unsigned aarch64_regno_regclass (unsigned);
-+unsigned aarch64_trampoline_size (void);
-+void aarch64_asm_output_labelref (FILE *, const char *);
-+void aarch64_elf_asm_named_section (const char *, unsigned, tree);
-+void aarch64_expand_epilogue (bool);
-+void aarch64_expand_mov_immediate (rtx, rtx);
-+void aarch64_expand_prologue (void);
-+void aarch64_expand_vector_init (rtx, rtx);
-+void aarch64_function_profiler (FILE *, int);
-+void aarch64_init_cumulative_args (CUMULATIVE_ARGS *, const_tree, rtx,
-+ const_tree, unsigned);
-+void aarch64_init_expanders (void);
-+void aarch64_print_operand (FILE *, rtx, char);
-+void aarch64_print_operand_address (FILE *, rtx);
-+
-+/* Initialize builtins for SIMD intrinsics. */
-+void init_aarch64_simd_builtins (void);
-+
-+void aarch64_simd_const_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT);
-+void aarch64_simd_disambiguate_copy (rtx *, rtx *, rtx *, unsigned int);
-+
-+/* Emit code to place a AdvSIMD pair result in memory locations (with equal
-+ registers). */
-+void aarch64_simd_emit_pair_result_insn (enum machine_mode,
-+ rtx (*intfn) (rtx, rtx, rtx), rtx,
-+ rtx);
-+
-+/* Expand builtins for SIMD intrinsics. */
-+rtx aarch64_simd_expand_builtin (int, tree, rtx);
-+
-+void aarch64_simd_lane_bounds (rtx, HOST_WIDE_INT, HOST_WIDE_INT);
-+
-+/* Emit code for reinterprets. */
-+void aarch64_simd_reinterpret (rtx, rtx);
-+
-+void aarch64_split_128bit_move (rtx, rtx);
-+
-+bool aarch64_split_128bit_move_p (rtx, rtx);
-+
-+/* Check for a legitimate floating point constant for FMOV. */
-+bool aarch64_float_const_representable_p (rtx);
-+
-+#if defined (RTX_CODE)
-+
-+bool aarch64_legitimate_address_p (enum machine_mode, rtx, RTX_CODE, bool);
-+enum machine_mode aarch64_select_cc_mode (RTX_CODE, rtx, rtx);
-+rtx aarch64_gen_compare_reg (RTX_CODE, rtx, rtx);
-+
-+void aarch64_expand_compare_and_swap (rtx op[]);
-+void aarch64_split_compare_and_swap (rtx op[]);
-+void aarch64_split_atomic_op (enum rtx_code, rtx, rtx, rtx, rtx, rtx, rtx);
-+
-+#endif /* RTX_CODE */
-+
-+rtx aarch64_load_tp (rtx target);
-+void aarch64_init_builtins (void);
-+rtx aarch64_expand_builtin (tree exp,
-+ rtx target,
-+ rtx subtarget ATTRIBUTE_UNUSED,
-+ enum machine_mode mode ATTRIBUTE_UNUSED,
-+ int ignore ATTRIBUTE_UNUSED);
-+tree aarch64_builtin_decl (unsigned, bool ATTRIBUTE_UNUSED);
-+
-+tree
-+aarch64_builtin_vectorized_function (tree fndecl,
-+ tree type_out,
-+ tree type_in);
-+
-+extern void aarch64_split_combinev16qi (rtx operands[3]);
-+extern void aarch64_expand_vec_perm (rtx target, rtx op0, rtx op1, rtx sel);
-+extern bool
-+aarch64_expand_vec_perm_const (rtx target, rtx op0, rtx op1, rtx sel);
-+
-+char* aarch64_output_simd_mov_immediate (rtx *, enum machine_mode, unsigned);
-+#endif /* GCC_AARCH64_PROTOS_H */
---- a/src/gcc/config/aarch64/aarch64-simd-builtins.def
-+++ b/src/gcc/config/aarch64/aarch64-simd-builtins.def
-@@ -0,0 +1,258 @@
-+/* Machine description for AArch64 architecture.
-+ Copyright (C) 2012-2013 Free Software Foundation, Inc.
-+ Contributed by ARM Ltd.
-+
-+ This file is part of GCC.
-+
-+ GCC is free software; you can redistribute it and/or modify it
-+ under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 3, or (at your option)
-+ any later version.
-+
-+ GCC is distributed in the hope that it will be useful, but
-+ WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with GCC; see the file COPYING3. If not see
-+ <http://www.gnu.org/licenses/>. */
-+
-+/* In the list below, the BUILTIN_<ITERATOR> macros should
-+ correspond to the iterator used to construct the instruction's
-+ patterns in aarch64-simd.md. A helpful idiom to follow when
-+ adding new builtins is to add a line for each pattern in the md
-+ file. Thus, ADDP, which has one pattern defined for the VD_BHSI
-+ iterator, and one for DImode, has two entries below. */
-+
-+ BUILTIN_VD_RE (CREATE, create)
-+ BUILTIN_VQ_S (GETLANE, get_lane_signed)
-+ BUILTIN_VDQ (GETLANE, get_lane_unsigned)
-+ BUILTIN_VDQF (GETLANE, get_lane)
-+ VAR1 (GETLANE, get_lane, di)
-+ BUILTIN_VDC (COMBINE, combine)
-+ BUILTIN_VB (BINOP, pmul)
-+ BUILTIN_VDQF (UNOP, sqrt)
-+ BUILTIN_VD_BHSI (BINOP, addp)
-+ VAR1 (UNOP, addp, di)
-+
-+ BUILTIN_VD_RE (REINTERP, reinterpretdi)
-+ BUILTIN_VDC (REINTERP, reinterpretv8qi)
-+ BUILTIN_VDC (REINTERP, reinterpretv4hi)
-+ BUILTIN_VDC (REINTERP, reinterpretv2si)
-+ BUILTIN_VDC (REINTERP, reinterpretv2sf)
-+ BUILTIN_VQ (REINTERP, reinterpretv16qi)
-+ BUILTIN_VQ (REINTERP, reinterpretv8hi)
-+ BUILTIN_VQ (REINTERP, reinterpretv4si)
-+ BUILTIN_VQ (REINTERP, reinterpretv4sf)
-+ BUILTIN_VQ (REINTERP, reinterpretv2di)
-+ BUILTIN_VQ (REINTERP, reinterpretv2df)
-+
-+ BUILTIN_VDQ_I (BINOP, dup_lane)
-+ BUILTIN_SDQ_I (BINOP, dup_lane)
-+ /* Implemented by aarch64_<sur>q<r>shl<mode>. */
-+ BUILTIN_VSDQ_I (BINOP, sqshl)
-+ BUILTIN_VSDQ_I (BINOP, uqshl)
-+ BUILTIN_VSDQ_I (BINOP, sqrshl)
-+ BUILTIN_VSDQ_I (BINOP, uqrshl)
-+ /* Implemented by aarch64_<su_optab><optab><mode>. */
-+ BUILTIN_VSDQ_I (BINOP, sqadd)
-+ BUILTIN_VSDQ_I (BINOP, uqadd)
-+ BUILTIN_VSDQ_I (BINOP, sqsub)
-+ BUILTIN_VSDQ_I (BINOP, uqsub)
-+ /* Implemented by aarch64_<sur>qadd<mode>. */
-+ BUILTIN_VSDQ_I (BINOP, suqadd)
-+ BUILTIN_VSDQ_I (BINOP, usqadd)
-+
-+ /* Implemented by aarch64_get_dreg<VSTRUCT:mode><VDC:mode>. */
-+ BUILTIN_VDC (GETLANE, get_dregoi)
-+ BUILTIN_VDC (GETLANE, get_dregci)
-+ BUILTIN_VDC (GETLANE, get_dregxi)
-+ /* Implemented by aarch64_get_qreg<VSTRUCT:mode><VQ:mode>. */
-+ BUILTIN_VQ (GETLANE, get_qregoi)
-+ BUILTIN_VQ (GETLANE, get_qregci)
-+ BUILTIN_VQ (GETLANE, get_qregxi)
-+ /* Implemented by aarch64_set_qreg<VSTRUCT:mode><VQ:mode>. */
-+ BUILTIN_VQ (SETLANE, set_qregoi)
-+ BUILTIN_VQ (SETLANE, set_qregci)
-+ BUILTIN_VQ (SETLANE, set_qregxi)
-+ /* Implemented by aarch64_ld<VSTRUCT:nregs><VDC:mode>. */
-+ BUILTIN_VDC (LOADSTRUCT, ld2)
-+ BUILTIN_VDC (LOADSTRUCT, ld3)
-+ BUILTIN_VDC (LOADSTRUCT, ld4)
-+ /* Implemented by aarch64_ld<VSTRUCT:nregs><VQ:mode>. */
-+ BUILTIN_VQ (LOADSTRUCT, ld2)
-+ BUILTIN_VQ (LOADSTRUCT, ld3)
-+ BUILTIN_VQ (LOADSTRUCT, ld4)
-+ /* Implemented by aarch64_st<VSTRUCT:nregs><VDC:mode>. */
-+ BUILTIN_VDC (STORESTRUCT, st2)
-+ BUILTIN_VDC (STORESTRUCT, st3)
-+ BUILTIN_VDC (STORESTRUCT, st4)
-+ /* Implemented by aarch64_st<VSTRUCT:nregs><VQ:mode>. */
-+ BUILTIN_VQ (STORESTRUCT, st2)
-+ BUILTIN_VQ (STORESTRUCT, st3)
-+ BUILTIN_VQ (STORESTRUCT, st4)
-+
-+ BUILTIN_VQW (BINOP, saddl2)
-+ BUILTIN_VQW (BINOP, uaddl2)
-+ BUILTIN_VQW (BINOP, ssubl2)
-+ BUILTIN_VQW (BINOP, usubl2)
-+ BUILTIN_VQW (BINOP, saddw2)
-+ BUILTIN_VQW (BINOP, uaddw2)
-+ BUILTIN_VQW (BINOP, ssubw2)
-+ BUILTIN_VQW (BINOP, usubw2)
-+ /* Implemented by aarch64_<ANY_EXTEND:su><ADDSUB:optab>l<mode>. */
-+ BUILTIN_VDW (BINOP, saddl)
-+ BUILTIN_VDW (BINOP, uaddl)
-+ BUILTIN_VDW (BINOP, ssubl)
-+ BUILTIN_VDW (BINOP, usubl)
-+ /* Implemented by aarch64_<ANY_EXTEND:su><ADDSUB:optab>w<mode>. */
-+ BUILTIN_VDW (BINOP, saddw)
-+ BUILTIN_VDW (BINOP, uaddw)
-+ BUILTIN_VDW (BINOP, ssubw)
-+ BUILTIN_VDW (BINOP, usubw)
-+ /* Implemented by aarch64_<sur>h<addsub><mode>. */
-+ BUILTIN_VQ_S (BINOP, shadd)
-+ BUILTIN_VQ_S (BINOP, uhadd)
-+ BUILTIN_VQ_S (BINOP, srhadd)
-+ BUILTIN_VQ_S (BINOP, urhadd)
-+ /* Implemented by aarch64_<sur><addsub>hn<mode>. */
-+ BUILTIN_VQN (BINOP, addhn)
-+ BUILTIN_VQN (BINOP, raddhn)
-+ /* Implemented by aarch64_<sur><addsub>hn2<mode>. */
-+ BUILTIN_VQN (TERNOP, addhn2)
-+ BUILTIN_VQN (TERNOP, raddhn2)
-+
-+ BUILTIN_VSQN_HSDI (UNOP, sqmovun)
-+ /* Implemented by aarch64_<sur>qmovn<mode>. */
-+ BUILTIN_VSQN_HSDI (UNOP, sqmovn)
-+ BUILTIN_VSQN_HSDI (UNOP, uqmovn)
-+ /* Implemented by aarch64_s<optab><mode>. */
-+ BUILTIN_VSDQ_I_BHSI (UNOP, sqabs)
-+ BUILTIN_VSDQ_I_BHSI (UNOP, sqneg)
-+
-+ BUILTIN_VSD_HSI (QUADOP, sqdmlal_lane)
-+ BUILTIN_VSD_HSI (QUADOP, sqdmlsl_lane)
-+ BUILTIN_VSD_HSI (QUADOP, sqdmlal_laneq)
-+ BUILTIN_VSD_HSI (QUADOP, sqdmlsl_laneq)
-+ BUILTIN_VQ_HSI (TERNOP, sqdmlal2)
-+ BUILTIN_VQ_HSI (TERNOP, sqdmlsl2)
-+ BUILTIN_VQ_HSI (QUADOP, sqdmlal2_lane)
-+ BUILTIN_VQ_HSI (QUADOP, sqdmlsl2_lane)
-+ BUILTIN_VQ_HSI (QUADOP, sqdmlal2_laneq)
-+ BUILTIN_VQ_HSI (QUADOP, sqdmlsl2_laneq)
-+ BUILTIN_VQ_HSI (TERNOP, sqdmlal2_n)
-+ BUILTIN_VQ_HSI (TERNOP, sqdmlsl2_n)
-+ /* Implemented by aarch64_sqdml<SBINQOPS:as>l<mode>. */
-+ BUILTIN_VSD_HSI (TERNOP, sqdmlal)
-+ BUILTIN_VSD_HSI (TERNOP, sqdmlsl)
-+ /* Implemented by aarch64_sqdml<SBINQOPS:as>l_n<mode>. */
-+ BUILTIN_VD_HSI (TERNOP, sqdmlal_n)
-+ BUILTIN_VD_HSI (TERNOP, sqdmlsl_n)
-+
-+ BUILTIN_VSD_HSI (BINOP, sqdmull)
-+ BUILTIN_VSD_HSI (TERNOP, sqdmull_lane)
-+ BUILTIN_VD_HSI (TERNOP, sqdmull_laneq)
-+ BUILTIN_VD_HSI (BINOP, sqdmull_n)
-+ BUILTIN_VQ_HSI (BINOP, sqdmull2)
-+ BUILTIN_VQ_HSI (TERNOP, sqdmull2_lane)
-+ BUILTIN_VQ_HSI (TERNOP, sqdmull2_laneq)
-+ BUILTIN_VQ_HSI (BINOP, sqdmull2_n)
-+ /* Implemented by aarch64_sq<r>dmulh<mode>. */
-+ BUILTIN_VSDQ_HSI (BINOP, sqdmulh)
-+ BUILTIN_VSDQ_HSI (BINOP, sqrdmulh)
-+ /* Implemented by aarch64_sq<r>dmulh_lane<q><mode>. */
-+ BUILTIN_VDQHS (TERNOP, sqdmulh_lane)
-+ BUILTIN_VDQHS (TERNOP, sqdmulh_laneq)
-+ BUILTIN_VDQHS (TERNOP, sqrdmulh_lane)
-+ BUILTIN_VDQHS (TERNOP, sqrdmulh_laneq)
-+ BUILTIN_SD_HSI (TERNOP, sqdmulh_lane)
-+ BUILTIN_SD_HSI (TERNOP, sqrdmulh_lane)
-+
-+ BUILTIN_VSDQ_I_DI (BINOP, sshl_n)
-+ BUILTIN_VSDQ_I_DI (BINOP, ushl_n)
-+ /* Implemented by aarch64_<sur>shl<mode>. */
-+ BUILTIN_VSDQ_I_DI (BINOP, sshl)
-+ BUILTIN_VSDQ_I_DI (BINOP, ushl)
-+ BUILTIN_VSDQ_I_DI (BINOP, srshl)
-+ BUILTIN_VSDQ_I_DI (BINOP, urshl)
-+
-+ BUILTIN_VSDQ_I_DI (SHIFTIMM, sshr_n)
-+ BUILTIN_VSDQ_I_DI (SHIFTIMM, ushr_n)
-+ /* Implemented by aarch64_<sur>shr_n<mode>. */
-+ BUILTIN_VSDQ_I_DI (SHIFTIMM, srshr_n)
-+ BUILTIN_VSDQ_I_DI (SHIFTIMM, urshr_n)
-+ /* Implemented by aarch64_<sur>sra_n<mode>. */
-+ BUILTIN_VSDQ_I_DI (SHIFTACC, ssra_n)
-+ BUILTIN_VSDQ_I_DI (SHIFTACC, usra_n)
-+ BUILTIN_VSDQ_I_DI (SHIFTACC, srsra_n)
-+ BUILTIN_VSDQ_I_DI (SHIFTACC, ursra_n)
-+ /* Implemented by aarch64_<sur>shll_n<mode>. */
-+ BUILTIN_VDW (SHIFTIMM, sshll_n)
-+ BUILTIN_VDW (SHIFTIMM, ushll_n)
-+ /* Implemented by aarch64_<sur>shll2_n<mode>. */
-+ BUILTIN_VQW (SHIFTIMM, sshll2_n)
-+ BUILTIN_VQW (SHIFTIMM, ushll2_n)
-+ /* Implemented by aarch64_<sur>q<r>shr<u>n_n<mode>. */
-+ BUILTIN_VSQN_HSDI (SHIFTIMM, sqshrun_n)
-+ BUILTIN_VSQN_HSDI (SHIFTIMM, sqrshrun_n)
-+ BUILTIN_VSQN_HSDI (SHIFTIMM, sqshrn_n)
-+ BUILTIN_VSQN_HSDI (SHIFTIMM, uqshrn_n)
-+ BUILTIN_VSQN_HSDI (SHIFTIMM, sqrshrn_n)
-+ BUILTIN_VSQN_HSDI (SHIFTIMM, uqrshrn_n)
-+ /* Implemented by aarch64_<sur>s<lr>i_n<mode>. */
-+ BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssri_n)
-+ BUILTIN_VSDQ_I_DI (SHIFTINSERT, usri_n)
-+ BUILTIN_VSDQ_I_DI (SHIFTINSERT, ssli_n)
-+ BUILTIN_VSDQ_I_DI (SHIFTINSERT, usli_n)
-+ /* Implemented by aarch64_<sur>qshl<u>_n<mode>. */
-+ BUILTIN_VSDQ_I (SHIFTIMM, sqshlu_n)
-+ BUILTIN_VSDQ_I (SHIFTIMM, sqshl_n)
-+ BUILTIN_VSDQ_I (SHIFTIMM, uqshl_n)
-+
-+ /* Implemented by aarch64_cm<cmp><mode>. */
-+ BUILTIN_VSDQ_I_DI (BINOP, cmeq)
-+ BUILTIN_VSDQ_I_DI (BINOP, cmge)
-+ BUILTIN_VSDQ_I_DI (BINOP, cmgt)
-+ BUILTIN_VSDQ_I_DI (BINOP, cmle)
-+ BUILTIN_VSDQ_I_DI (BINOP, cmlt)
-+ /* Implemented by aarch64_cm<cmp><mode>. */
-+ BUILTIN_VSDQ_I_DI (BINOP, cmhs)
-+ BUILTIN_VSDQ_I_DI (BINOP, cmhi)
-+ BUILTIN_VSDQ_I_DI (BINOP, cmtst)
-+
-+ /* Implemented by aarch64_<fmaxmin><mode>. */
-+ BUILTIN_VDQF (BINOP, fmax)
-+ BUILTIN_VDQF (BINOP, fmin)
-+ /* Implemented by aarch64_<maxmin><mode>. */
-+ BUILTIN_VDQ_BHSI (BINOP, smax)
-+ BUILTIN_VDQ_BHSI (BINOP, smin)
-+ BUILTIN_VDQ_BHSI (BINOP, umax)
-+ BUILTIN_VDQ_BHSI (BINOP, umin)
-+
-+ /* Implemented by aarch64_frint<frint_suffix><mode>. */
-+ BUILTIN_VDQF (UNOP, frintz)
-+ BUILTIN_VDQF (UNOP, frintp)
-+ BUILTIN_VDQF (UNOP, frintm)
-+ BUILTIN_VDQF (UNOP, frinti)
-+ BUILTIN_VDQF (UNOP, frintx)
-+ BUILTIN_VDQF (UNOP, frinta)
-+
-+ /* Implemented by aarch64_fcvt<frint_suffix><su><mode>. */
-+ BUILTIN_VDQF (UNOP, fcvtzs)
-+ BUILTIN_VDQF (UNOP, fcvtzu)
-+ BUILTIN_VDQF (UNOP, fcvtas)
-+ BUILTIN_VDQF (UNOP, fcvtau)
-+ BUILTIN_VDQF (UNOP, fcvtps)
-+ BUILTIN_VDQF (UNOP, fcvtpu)
-+ BUILTIN_VDQF (UNOP, fcvtms)
-+ BUILTIN_VDQF (UNOP, fcvtmu)
-+
-+ /* Implemented by
-+ aarch64_<PERMUTE:perm_insn><PERMUTE:perm_hilo><mode>. */
-+ BUILTIN_VALL (BINOP, zip1)
-+ BUILTIN_VALL (BINOP, zip2)
-+ BUILTIN_VALL (BINOP, uzp1)
-+ BUILTIN_VALL (BINOP, uzp2)
-+ BUILTIN_VALL (BINOP, trn1)
-+ BUILTIN_VALL (BINOP, trn2)
---- a/src/gcc/config/aarch64/aarch64-simd.md
-+++ b/src/gcc/config/aarch64/aarch64-simd.md
-@@ -0,0 +1,3716 @@
-+;; Machine description for AArch64 AdvSIMD architecture.
-+;; Copyright (C) 2011, 2012, 2013 Free Software Foundation, Inc.
-+;; Contributed by ARM Ltd.
-+;;
-+;; This file is part of GCC.
-+;;
-+;; GCC is free software; you can redistribute it and/or modify it
-+;; under the terms of the GNU General Public License as published by
-+;; the Free Software Foundation; either version 3, or (at your option)
-+;; any later version.
-+;;
-+;; GCC is distributed in the hope that it will be useful, but
-+;; WITHOUT ANY WARRANTY; without even the implied warranty of
-+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+;; General Public License for more details.
-+;;
-+;; You should have received a copy of the GNU General Public License
-+;; along with GCC; see the file COPYING3. If not see
-+;; <http://www.gnu.org/licenses/>.
-+
-+
-+; Main data types used by the insntructions
-+
-+(define_attr "simd_mode" "unknown,none,V8QI,V16QI,V4HI,V8HI,V2SI,V4SI,V2DI,V2SF,V4SF,V2DF,OI,CI,XI,DI,DF,SI,HI,QI"
-+ (const_string "unknown"))
-+
-+
-+; Classification of AdvSIMD instructions for scheduling purposes.
-+; Do not set this attribute and the "v8type" attribute together in
-+; any instruction pattern.
-+
-+; simd_abd integer absolute difference and accumulate.
-+; simd_abdl integer absolute difference and accumulate (long).
-+; simd_adal integer add and accumulate (long).
-+; simd_add integer addition/subtraction.
-+; simd_addl integer addition/subtraction (long).
-+; simd_addlv across lanes integer sum (long).
-+; simd_addn integer addition/subtraction (narrow).
-+; simd_addn2 integer addition/subtraction (narrow, high).
-+; simd_addv across lanes integer sum.
-+; simd_cls count leading sign/zero bits.
-+; simd_cmp compare / create mask.
-+; simd_cnt population count.
-+; simd_dup duplicate element.
-+; simd_dupgp duplicate general purpose register.
-+; simd_ext bitwise extract from pair.
-+; simd_fadd floating point add/sub.
-+; simd_fcmp floating point compare.
-+; simd_fcvti floating point convert to integer.
-+; simd_fcvtl floating-point convert upsize.
-+; simd_fcvtn floating-point convert downsize (narrow).
-+; simd_fcvtn2 floating-point convert downsize (narrow, high).
-+; simd_fdiv floating point division.
-+; simd_fminmax floating point min/max.
-+; simd_fminmaxv across lanes floating point min/max.
-+; simd_fmla floating point multiply-add.
-+; simd_fmla_elt floating point multiply-add (by element).
-+; simd_fmul floating point multiply.
-+; simd_fmul_elt floating point multiply (by element).
-+; simd_fnegabs floating point neg/abs.
-+; simd_frcpe floating point reciprocal estimate.
-+; simd_frcps floating point reciprocal step.
-+; simd_frecx floating point reciprocal exponent.
-+; simd_frint floating point round to integer.
-+; simd_fsqrt floating point square root.
-+; simd_icvtf integer convert to floating point.
-+; simd_ins insert element.
-+; simd_insgp insert general purpose register.
-+; simd_load1 load multiple structures to one register (LD1).
-+; simd_load1r load single structure to all lanes of one register (LD1R).
-+; simd_load1s load single structure to one lane of one register (LD1 [index]).
-+; simd_load2 load multiple structures to two registers (LD1, LD2).
-+; simd_load2r load single structure to all lanes of two registers (LD1R, LD2R).
-+; simd_load2s load single structure to one lane of two registers (LD2 [index]).
-+; simd_load3 load multiple structures to three registers (LD1, LD3).
-+; simd_load3r load single structure to all lanes of three registers (LD3R).
-+; simd_load3s load single structure to one lane of three registers (LD3 [index]).
-+; simd_load4 load multiple structures to four registers (LD1, LD2, LD4).
-+; simd_load4r load single structure to all lanes of four registers (LD4R).
-+; simd_load4s load single structure to one lane of four registers (LD4 [index]).
-+; simd_logic logical operation.
-+; simd_logic_imm logcial operation (immediate).
-+; simd_minmax integer min/max.
-+; simd_minmaxv across lanes integer min/max,
-+; simd_mla integer multiply-accumulate.
-+; simd_mla_elt integer multiply-accumulate (by element).
-+; simd_mlal integer multiply-accumulate (long).
-+; simd_mlal_elt integer multiply-accumulate (by element, long).
-+; simd_move move register.
-+; simd_move_imm move immediate.
-+; simd_movgp move element to general purpose register.
-+; simd_mul integer multiply.
-+; simd_mul_elt integer multiply (by element).
-+; simd_mull integer multiply (long).
-+; simd_mull_elt integer multiply (by element, long).
-+; simd_negabs integer negate/absolute.
-+; simd_rbit bitwise reverse.
-+; simd_rcpe integer reciprocal estimate.
-+; simd_rcps integer reciprocal square root.
-+; simd_rev element reverse.
-+; simd_sat_add integer saturating addition/subtraction.
-+; simd_sat_mlal integer saturating multiply-accumulate (long).
-+; simd_sat_mlal_elt integer saturating multiply-accumulate (by element, long).
-+; simd_sat_mul integer saturating multiply.
-+; simd_sat_mul_elt integer saturating multiply (by element).
-+; simd_sat_mull integer saturating multiply (long).
-+; simd_sat_mull_elt integer saturating multiply (by element, long).
-+; simd_sat_negabs integer saturating negate/absolute.
-+; simd_sat_shift integer saturating shift.
-+; simd_sat_shift_imm integer saturating shift (immediate).
-+; simd_sat_shiftn_imm integer saturating shift (narrow, immediate).
-+; simd_sat_shiftn2_imm integer saturating shift (narrow, high, immediate).
-+; simd_shift shift register/vector.
-+; simd_shift_acc shift accumulate.
-+; simd_shift_imm shift immediate.
-+; simd_shift_imm_acc shift immediate and accumualte.
-+; simd_shiftl shift register/vector (long).
-+; simd_shiftl_imm shift register/vector (long, immediate).
-+; simd_shiftn_imm shift register/vector (narrow, immediate).
-+; simd_shiftn2_imm shift register/vector (narrow, high, immediate).
-+; simd_store1 store multiple structures from one register (ST1).
-+; simd_store1s store single structure from one lane of one register (ST1 [index]).
-+; simd_store2 store multiple structures from two registers (ST1, ST2).
-+; simd_store2s store single structure from one lane of two registers (ST2 [index]).
-+; simd_store3 store multiple structures from three registers (ST1, ST3).
-+; simd_store3s store single structure from one lane of three register (ST3 [index]).
-+; simd_store4 store multiple structures from four registers (ST1, ST2, ST4).
-+; simd_store4s store single structure from one lane for four registers (ST4 [index]).
-+; simd_tbl table lookup.
-+; simd_trn transpose.
-+; simd_uzp unzip.
-+; simd_zip zip.
-+
-+(define_attr "simd_type"
-+ "simd_abd,\
-+ simd_abdl,\
-+ simd_adal,\
-+ simd_add,\
-+ simd_addl,\
-+ simd_addlv,\
-+ simd_addn,\
-+ simd_addn2,\
-+ simd_addv,\
-+ simd_cls,\
-+ simd_cmp,\
-+ simd_cnt,\
-+ simd_dup,\
-+ simd_dupgp,\
-+ simd_ext,\
-+ simd_fadd,\
-+ simd_fcmp,\
-+ simd_fcvti,\
-+ simd_fcvtl,\
-+ simd_fcvtn,\
-+ simd_fcvtn2,\
-+ simd_fdiv,\
-+ simd_fminmax,\
-+ simd_fminmaxv,\
-+ simd_fmla,\
-+ simd_fmla_elt,\
-+ simd_fmul,\
-+ simd_fmul_elt,\
-+ simd_fnegabs,\
-+ simd_frcpe,\
-+ simd_frcps,\
-+ simd_frecx,\
-+ simd_frint,\
-+ simd_fsqrt,\
-+ simd_icvtf,\
-+ simd_ins,\
-+ simd_insgp,\
-+ simd_load1,\
-+ simd_load1r,\
-+ simd_load1s,\
-+ simd_load2,\
-+ simd_load2r,\
-+ simd_load2s,\
-+ simd_load3,\
-+ simd_load3r,\
-+ simd_load3s,\
-+ simd_load4,\
-+ simd_load4r,\
-+ simd_load4s,\
-+ simd_logic,\
-+ simd_logic_imm,\
-+ simd_minmax,\
-+ simd_minmaxv,\
-+ simd_mla,\
-+ simd_mla_elt,\
-+ simd_mlal,\
-+ simd_mlal_elt,\
-+ simd_movgp,\
-+ simd_move,\
-+ simd_move_imm,\
-+ simd_mul,\
-+ simd_mul_elt,\
-+ simd_mull,\
-+ simd_mull_elt,\
-+ simd_negabs,\
-+ simd_rbit,\
-+ simd_rcpe,\
-+ simd_rcps,\
-+ simd_rev,\
-+ simd_sat_add,\
-+ simd_sat_mlal,\
-+ simd_sat_mlal_elt,\
-+ simd_sat_mul,\
-+ simd_sat_mul_elt,\
-+ simd_sat_mull,\
-+ simd_sat_mull_elt,\
-+ simd_sat_negabs,\
-+ simd_sat_shift,\
-+ simd_sat_shift_imm,\
-+ simd_sat_shiftn_imm,\
-+ simd_sat_shiftn2_imm,\
-+ simd_shift,\
-+ simd_shift_acc,\
-+ simd_shift_imm,\
-+ simd_shift_imm_acc,\
-+ simd_shiftl,\
-+ simd_shiftl_imm,\
-+ simd_shiftn_imm,\
-+ simd_shiftn2_imm,\
-+ simd_store1,\
-+ simd_store1s,\
-+ simd_store2,\
-+ simd_store2s,\
-+ simd_store3,\
-+ simd_store3s,\
-+ simd_store4,\
-+ simd_store4s,\
-+ simd_tbl,\
-+ simd_trn,\
-+ simd_uzp,\
-+ simd_zip,\
-+ none"
-+ (const_string "none"))
-+
-+
-+; The "neon_type" attribute is used by the AArch32 backend. Below is a mapping
-+; from "simd_type" to "neon_type".
-+
-+(define_attr "neon_type"
-+ "neon_int_1,neon_int_2,neon_int_3,neon_int_4,neon_int_5,neon_vqneg_vqabs,
-+ neon_vmov,neon_vaba,neon_vsma,neon_vaba_qqq,
-+ neon_mul_ddd_8_16_qdd_16_8_long_32_16_long,neon_mul_qqq_8_16_32_ddd_32,
-+ neon_mul_qdd_64_32_long_qqd_16_ddd_32_scalar_64_32_long_scalar,
-+ neon_mla_ddd_8_16_qdd_16_8_long_32_16_long,neon_mla_qqq_8_16,
-+ neon_mla_ddd_32_qqd_16_ddd_32_scalar_qdd_64_32_long_scalar_qdd_64_32_long,
-+ neon_mla_qqq_32_qqd_32_scalar,neon_mul_ddd_16_scalar_32_16_long_scalar,
-+ neon_mul_qqd_32_scalar,neon_mla_ddd_16_scalar_qdd_32_16_long_scalar,
-+ neon_shift_1,neon_shift_2,neon_shift_3,neon_vshl_ddd,
-+ neon_vqshl_vrshl_vqrshl_qqq,neon_vsra_vrsra,neon_fp_vadd_ddd_vabs_dd,
-+ neon_fp_vadd_qqq_vabs_qq,neon_fp_vsum,neon_fp_vmul_ddd,neon_fp_vmul_qqd,
-+ neon_fp_vmla_ddd,neon_fp_vmla_qqq,neon_fp_vmla_ddd_scalar,
-+ neon_fp_vmla_qqq_scalar,neon_fp_vrecps_vrsqrts_ddd,
-+ neon_fp_vrecps_vrsqrts_qqq,neon_bp_simple,neon_bp_2cycle,neon_bp_3cycle,
-+ neon_ldr,neon_str,neon_vld1_1_2_regs,neon_vld1_3_4_regs,
-+ neon_vld2_2_regs_vld1_vld2_all_lanes,neon_vld2_4_regs,neon_vld3_vld4,
-+ neon_vst1_1_2_regs_vst2_2_regs,neon_vst1_3_4_regs,
-+ neon_vst2_4_regs_vst3_vst4,neon_vst3_vst4,neon_vld1_vld2_lane,
-+ neon_vld3_vld4_lane,neon_vst1_vst2_lane,neon_vst3_vst4_lane,
-+ neon_vld3_vld4_all_lanes,neon_mcr,neon_mcr_2_mcrr,neon_mrc,neon_mrrc,
-+ neon_ldm_2,neon_stm_2,none,unknown"
-+ (cond [
-+ (eq_attr "simd_type" "simd_dup") (const_string "neon_bp_simple")
-+ (eq_attr "simd_type" "simd_movgp") (const_string "neon_bp_simple")
-+ (eq_attr "simd_type" "simd_add,simd_logic,simd_logic_imm") (const_string "neon_int_1")
-+ (eq_attr "simd_type" "simd_negabs,simd_addlv") (const_string "neon_int_3")
-+ (eq_attr "simd_type" "simd_addn,simd_addn2,simd_addl,simd_sat_add,simd_sat_negabs") (const_string "neon_int_4")
-+ (eq_attr "simd_type" "simd_move") (const_string "neon_vmov")
-+ (eq_attr "simd_type" "simd_ins") (const_string "neon_mcr")
-+ (and (eq_attr "simd_type" "simd_mul,simd_sat_mul") (eq_attr "simd_mode" "V8QI,V4HI")) (const_string "neon_mul_ddd_8_16_qdd_16_8_long_32_16_long")
-+ (and (eq_attr "simd_type" "simd_mul,simd_sat_mul") (eq_attr "simd_mode" "V2SI,V8QI,V16QI,V2SI")) (const_string "neon_mul_qqq_8_16_32_ddd_32")
-+ (and (eq_attr "simd_type" "simd_mull,simd_sat_mull") (eq_attr "simd_mode" "V8QI,V16QI,V4HI,V8HI")) (const_string "neon_mul_ddd_8_16_qdd_16_8_long_32_16_long")
-+ (and (eq_attr "simd_type" "simd_mull,simd_sat_mull") (eq_attr "simd_mode" "V2SI,V4SI,V2DI")) (const_string "neon_mul_qdd_64_32_long_qqd_16_ddd_32_scalar_64_32_long_scalar")
-+ (and (eq_attr "simd_type" "simd_mla,simd_sat_mlal") (eq_attr "simd_mode" "V8QI,V4HI")) (const_string "neon_mla_ddd_8_16_qdd_16_8_long_32_16_long")
-+ (and (eq_attr "simd_type" "simd_mla,simd_sat_mlal") (eq_attr "simd_mode" "V2SI")) (const_string "neon_mla_ddd_32_qqd_16_ddd_32_scalar_qdd_64_32_long_scalar_qdd_64_32_long")
-+ (and (eq_attr "simd_type" "simd_mla,simd_sat_mlal") (eq_attr "simd_mode" "V16QI,V8HI")) (const_string "neon_mla_qqq_8_16")
-+ (and (eq_attr "simd_type" "simd_mla,simd_sat_mlal") (eq_attr "simd_mode" "V4SI")) (const_string "neon_mla_qqq_32_qqd_32_scalar")
-+ (and (eq_attr "simd_type" "simd_mlal") (eq_attr "simd_mode" "V8QI,V16QI,V4HI,V8HI")) (const_string "neon_mla_ddd_8_16_qdd_16_8_long_32_16_long")
-+ (and (eq_attr "simd_type" "simd_mlal") (eq_attr "simd_mode" "V2SI,V4SI,V2DI")) (const_string "neon_mla_ddd_32_qqd_16_ddd_32_scalar_qdd_64_32_long_scalar_qdd_64_32_long")
-+ (and (eq_attr "simd_type" "simd_fmla") (eq_attr "simd_mode" "V2SF")) (const_string "neon_fp_vmla_ddd")
-+ (and (eq_attr "simd_type" "simd_fmla") (eq_attr "simd_mode" "V4SF,V2DF")) (const_string "neon_fp_vmla_qqq")
-+ (and (eq_attr "simd_type" "simd_fmla_elt") (eq_attr "simd_mode" "V2SF")) (const_string "neon_fp_vmla_ddd_scalar")
-+ (and (eq_attr "simd_type" "simd_fmla_elt") (eq_attr "simd_mode" "V4SF,V2DF")) (const_string "neon_fp_vmla_qqq_scalar")
-+ (and (eq_attr "simd_type" "simd_fmul,simd_fmul_elt,simd_fdiv,simd_fsqrt") (eq_attr "simd_mode" "V2SF")) (const_string "neon_fp_vmul_ddd")
-+ (and (eq_attr "simd_type" "simd_fmul,simd_fmul_elt,simd_fdiv,simd_fsqrt") (eq_attr "simd_mode" "V4SF,V2DF")) (const_string "neon_fp_vmul_qqd")
-+ (and (eq_attr "simd_type" "simd_fadd") (eq_attr "simd_mode" "V2SF")) (const_string "neon_fp_vadd_ddd_vabs_dd")
-+ (and (eq_attr "simd_type" "simd_fadd") (eq_attr "simd_mode" "V4SF,V2DF")) (const_string "neon_fp_vadd_qqq_vabs_qq")
-+ (and (eq_attr "simd_type" "simd_fnegabs,simd_fminmax,simd_fminmaxv") (eq_attr "simd_mode" "V2SF")) (const_string "neon_fp_vadd_ddd_vabs_dd")
-+ (and (eq_attr "simd_type" "simd_fnegabs,simd_fminmax,simd_fminmaxv") (eq_attr "simd_mode" "V4SF,V2DF")) (const_string "neon_fp_vadd_qqq_vabs_qq")
-+ (and (eq_attr "simd_type" "simd_shift,simd_shift_acc") (eq_attr "simd_mode" "V8QI,V4HI,V2SI")) (const_string "neon_vshl_ddd")
-+ (and (eq_attr "simd_type" "simd_shift,simd_shift_acc") (eq_attr "simd_mode" "V16QI,V8HI,V4SI,V2DI")) (const_string "neon_shift_3")
-+ (eq_attr "simd_type" "simd_minmax,simd_minmaxv") (const_string "neon_int_5")
-+ (eq_attr "simd_type" "simd_shiftn_imm,simd_shiftn2_imm,simd_shiftl_imm,") (const_string "neon_shift_1")
-+ (eq_attr "simd_type" "simd_load1,simd_load2") (const_string "neon_vld1_1_2_regs")
-+ (eq_attr "simd_type" "simd_load3,simd_load3") (const_string "neon_vld1_3_4_regs")
-+ (eq_attr "simd_type" "simd_load1r,simd_load2r,simd_load3r,simd_load4r") (const_string "neon_vld2_2_regs_vld1_vld2_all_lanes")
-+ (eq_attr "simd_type" "simd_load1s,simd_load2s") (const_string "neon_vld1_vld2_lane")
-+ (eq_attr "simd_type" "simd_load3s,simd_load4s") (const_string "neon_vld3_vld4_lane")
-+ (eq_attr "simd_type" "simd_store1,simd_store2") (const_string "neon_vst1_1_2_regs_vst2_2_regs")
-+ (eq_attr "simd_type" "simd_store3,simd_store4") (const_string "neon_vst1_3_4_regs")
-+ (eq_attr "simd_type" "simd_store1s,simd_store2s") (const_string "neon_vst1_vst2_lane")
-+ (eq_attr "simd_type" "simd_store3s,simd_store4s") (const_string "neon_vst3_vst4_lane")
-+ (and (eq_attr "simd_type" "simd_frcpe,simd_frcps") (eq_attr "simd_mode" "V2SF")) (const_string "neon_fp_vrecps_vrsqrts_ddd")
-+ (and (eq_attr "simd_type" "simd_frcpe,simd_frcps") (eq_attr "simd_mode" "V4SF,V2DF")) (const_string "neon_fp_vrecps_vrsqrts_qqq")
-+ (eq_attr "simd_type" "none") (const_string "none")
-+ ]
-+ (const_string "unknown")))
-+
-+
-+(define_expand "mov<mode>"
-+ [(set (match_operand:VALL 0 "aarch64_simd_nonimmediate_operand" "")
-+ (match_operand:VALL 1 "aarch64_simd_general_operand" ""))]
-+ "TARGET_SIMD"
-+ "
-+ if (GET_CODE (operands[0]) == MEM)
-+ operands[1] = force_reg (<MODE>mode, operands[1]);
-+ "
-+)
-+
-+(define_expand "movmisalign<mode>"
-+ [(set (match_operand:VALL 0 "aarch64_simd_nonimmediate_operand" "")
-+ (match_operand:VALL 1 "aarch64_simd_general_operand" ""))]
-+ "TARGET_SIMD"
-+{
-+ /* This pattern is not permitted to fail during expansion: if both arguments
-+ are non-registers (e.g. memory := constant, which can be created by the
-+ auto-vectorizer), force operand 1 into a register. */
-+ if (!register_operand (operands[0], <MODE>mode)
-+ && !register_operand (operands[1], <MODE>mode))
-+ operands[1] = force_reg (<MODE>mode, operands[1]);
-+})
-+
-+(define_insn "aarch64_simd_dup<mode>"
-+ [(set (match_operand:VDQ 0 "register_operand" "=w")
-+ (vec_duplicate:VDQ (match_operand:<VEL> 1 "register_operand" "r")))]
-+ "TARGET_SIMD"
-+ "dup\\t%0.<Vtype>, %<vw>1"
-+ [(set_attr "simd_type" "simd_dupgp")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_dup_lane<mode>"
-+ [(set (match_operand:VDQ_I 0 "register_operand" "=w")
-+ (vec_duplicate:VDQ_I
-+ (vec_select:<VEL>
-+ (match_operand:<VCON> 1 "register_operand" "w")
-+ (parallel [(match_operand:SI 2 "immediate_operand" "i")])
-+ )))]
-+ "TARGET_SIMD"
-+ "dup\\t%<v>0<Vmtype>, %1.<Vetype>[%2]"
-+ [(set_attr "simd_type" "simd_dup")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_dup_lane<mode>"
-+ [(set (match_operand:SDQ_I 0 "register_operand" "=w")
-+ (vec_select:<VEL>
-+ (match_operand:<VCON> 1 "register_operand" "w")
-+ (parallel [(match_operand:SI 2 "immediate_operand" "i")])
-+ ))]
-+ "TARGET_SIMD"
-+ "dup\\t%<v>0<Vmtype>, %1.<Vetype>[%2]"
-+ [(set_attr "simd_type" "simd_dup")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_simd_dup<mode>"
-+ [(set (match_operand:VDQF 0 "register_operand" "=w")
-+ (vec_duplicate:VDQF (match_operand:<VEL> 1 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "dup\\t%0.<Vtype>, %1.<Vetype>[0]"
-+ [(set_attr "simd_type" "simd_dup")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "*aarch64_simd_mov<mode>"
-+ [(set (match_operand:VD 0 "aarch64_simd_nonimmediate_operand"
-+ "=w, Utv, w, ?r, ?w, ?r, w")
-+ (match_operand:VD 1 "aarch64_simd_general_operand"
-+ "Utv, w, w, w, r, r, Dn"))]
-+ "TARGET_SIMD
-+ && (register_operand (operands[0], <MODE>mode)
-+ || register_operand (operands[1], <MODE>mode))"
-+{
-+ switch (which_alternative)
-+ {
-+ case 0: return "ld1\t{%0.<Vtype>}, %1";
-+ case 1: return "st1\t{%1.<Vtype>}, %0";
-+ case 2: return "orr\t%0.<Vbtype>, %1.<Vbtype>, %1.<Vbtype>";
-+ case 3: return "umov\t%0, %1.d[0]";
-+ case 4: return "ins\t%0.d[0], %1";
-+ case 5: return "mov\t%0, %1";
-+ case 6:
-+ return aarch64_output_simd_mov_immediate (&operands[1],
-+ <MODE>mode, 64);
-+ default: gcc_unreachable ();
-+ }
-+}
-+ [(set_attr "simd_type" "simd_load1,simd_store1,simd_move,simd_movgp,simd_insgp,simd_move,simd_move_imm")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "*aarch64_simd_mov<mode>"
-+ [(set (match_operand:VQ 0 "aarch64_simd_nonimmediate_operand"
-+ "=w, Utv, w, ?r, ?w, ?r, w")
-+ (match_operand:VQ 1 "aarch64_simd_general_operand"
-+ "Utv, w, w, w, r, r, Dn"))]
-+ "TARGET_SIMD
-+ && (register_operand (operands[0], <MODE>mode)
-+ || register_operand (operands[1], <MODE>mode))"
-+{
-+ switch (which_alternative)
-+ {
-+ case 0: return "ld1\t{%0.<Vtype>}, %1";
-+ case 1: return "st1\t{%1.<Vtype>}, %0";
-+ case 2: return "orr\t%0.<Vbtype>, %1.<Vbtype>, %1.<Vbtype>";
-+ case 3: return "umov\t%0, %1.d[0]\;umov\t%H0, %1.d[1]";
-+ case 4: return "ins\t%0.d[0], %1\;ins\t%0.d[1], %H1";
-+ case 5: return "#";
-+ case 6:
-+ return aarch64_output_simd_mov_immediate (&operands[1],
-+ <MODE>mode, 128);
-+ default: gcc_unreachable ();
-+ }
-+}
-+ [(set_attr "simd_type" "simd_load1,simd_store1,simd_move,simd_movgp,simd_insgp,simd_move,simd_move_imm")
-+ (set_attr "simd_mode" "<MODE>")
-+ (set_attr "length" "4,4,4,8,8,8,4")]
-+)
-+
-+(define_split
-+ [(set (match_operand:VQ 0 "register_operand" "")
-+ (match_operand:VQ 1 "register_operand" ""))]
-+ "TARGET_SIMD && reload_completed
-+ && GP_REGNUM_P (REGNO (operands[0]))
-+ && GP_REGNUM_P (REGNO (operands[1]))"
-+ [(set (match_dup 0) (match_dup 1))
-+ (set (match_dup 2) (match_dup 3))]
-+{
-+ int rdest = REGNO (operands[0]);
-+ int rsrc = REGNO (operands[1]);
-+ rtx dest[2], src[2];
-+
-+ dest[0] = gen_rtx_REG (DImode, rdest);
-+ src[0] = gen_rtx_REG (DImode, rsrc);
-+ dest[1] = gen_rtx_REG (DImode, rdest + 1);
-+ src[1] = gen_rtx_REG (DImode, rsrc + 1);
-+
-+ aarch64_simd_disambiguate_copy (operands, dest, src, 2);
-+})
-+
-+(define_insn "orn<mode>3"
-+ [(set (match_operand:VDQ 0 "register_operand" "=w")
-+ (ior:VDQ (not:VDQ (match_operand:VDQ 1 "register_operand" "w"))
-+ (match_operand:VDQ 2 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "orn\t%0.<Vbtype>, %2.<Vbtype>, %1.<Vbtype>"
-+ [(set_attr "simd_type" "simd_logic")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "bic<mode>3"
-+ [(set (match_operand:VDQ 0 "register_operand" "=w")
-+ (and:VDQ (not:VDQ (match_operand:VDQ 1 "register_operand" "w"))
-+ (match_operand:VDQ 2 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "bic\t%0.<Vbtype>, %2.<Vbtype>, %1.<Vbtype>"
-+ [(set_attr "simd_type" "simd_logic")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "add<mode>3"
-+ [(set (match_operand:VDQ 0 "register_operand" "=w")
-+ (plus:VDQ (match_operand:VDQ 1 "register_operand" "w")
-+ (match_operand:VDQ 2 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "add\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_add")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "sub<mode>3"
-+ [(set (match_operand:VDQ 0 "register_operand" "=w")
-+ (minus:VDQ (match_operand:VDQ 1 "register_operand" "w")
-+ (match_operand:VDQ 2 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "sub\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_add")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "mul<mode>3"
-+ [(set (match_operand:VDQM 0 "register_operand" "=w")
-+ (mult:VDQM (match_operand:VDQM 1 "register_operand" "w")
-+ (match_operand:VDQM 2 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "mul\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_mul")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "neg<mode>2"
-+ [(set (match_operand:VDQM 0 "register_operand" "=w")
-+ (neg:VDQM (match_operand:VDQM 1 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "neg\t%0.<Vtype>, %1.<Vtype>"
-+ [(set_attr "simd_type" "simd_negabs")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "abs<mode>2"
-+ [(set (match_operand:VDQ 0 "register_operand" "=w")
-+ (abs:VDQ (match_operand:VDQ 1 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "abs\t%0.<Vtype>, %1.<Vtype>"
-+ [(set_attr "simd_type" "simd_negabs")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "and<mode>3"
-+ [(set (match_operand:VDQ 0 "register_operand" "=w")
-+ (and:VDQ (match_operand:VDQ 1 "register_operand" "w")
-+ (match_operand:VDQ 2 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "and\t%0.<Vbtype>, %1.<Vbtype>, %2.<Vbtype>"
-+ [(set_attr "simd_type" "simd_logic")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "ior<mode>3"
-+ [(set (match_operand:VDQ 0 "register_operand" "=w")
-+ (ior:VDQ (match_operand:VDQ 1 "register_operand" "w")
-+ (match_operand:VDQ 2 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "orr\t%0.<Vbtype>, %1.<Vbtype>, %2.<Vbtype>"
-+ [(set_attr "simd_type" "simd_logic")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "xor<mode>3"
-+ [(set (match_operand:VDQ 0 "register_operand" "=w")
-+ (xor:VDQ (match_operand:VDQ 1 "register_operand" "w")
-+ (match_operand:VDQ 2 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "eor\t%0.<Vbtype>, %1.<Vbtype>, %2.<Vbtype>"
-+ [(set_attr "simd_type" "simd_logic")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "one_cmpl<mode>2"
-+ [(set (match_operand:VDQ 0 "register_operand" "=w")
-+ (not:VDQ (match_operand:VDQ 1 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "not\t%0.<Vbtype>, %1.<Vbtype>"
-+ [(set_attr "simd_type" "simd_logic")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_simd_vec_set<mode>"
-+ [(set (match_operand:VQ_S 0 "register_operand" "=w")
-+ (vec_merge:VQ_S
-+ (vec_duplicate:VQ_S
-+ (match_operand:<VEL> 1 "register_operand" "r"))
-+ (match_operand:VQ_S 3 "register_operand" "0")
-+ (match_operand:SI 2 "immediate_operand" "i")))]
-+ "TARGET_SIMD"
-+ "ins\t%0.<Vetype>[%p2], %w1";
-+ [(set_attr "simd_type" "simd_insgp")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_simd_lshr<mode>"
-+ [(set (match_operand:VDQ 0 "register_operand" "=w")
-+ (lshiftrt:VDQ (match_operand:VDQ 1 "register_operand" "w")
-+ (match_operand:VDQ 2 "aarch64_simd_rshift_imm" "Dr")))]
-+ "TARGET_SIMD"
-+ "ushr\t%0.<Vtype>, %1.<Vtype>, %2"
-+ [(set_attr "simd_type" "simd_shift_imm")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_simd_ashr<mode>"
-+ [(set (match_operand:VDQ 0 "register_operand" "=w")
-+ (ashiftrt:VDQ (match_operand:VDQ 1 "register_operand" "w")
-+ (match_operand:VDQ 2 "aarch64_simd_rshift_imm" "Dr")))]
-+ "TARGET_SIMD"
-+ "sshr\t%0.<Vtype>, %1.<Vtype>, %2"
-+ [(set_attr "simd_type" "simd_shift_imm")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_simd_imm_shl<mode>"
-+ [(set (match_operand:VDQ 0 "register_operand" "=w")
-+ (ashift:VDQ (match_operand:VDQ 1 "register_operand" "w")
-+ (match_operand:VDQ 2 "aarch64_simd_lshift_imm" "Dl")))]
-+ "TARGET_SIMD"
-+ "shl\t%0.<Vtype>, %1.<Vtype>, %2"
-+ [(set_attr "simd_type" "simd_shift_imm")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_simd_reg_sshl<mode>"
-+ [(set (match_operand:VDQ 0 "register_operand" "=w")
-+ (ashift:VDQ (match_operand:VDQ 1 "register_operand" "w")
-+ (match_operand:VDQ 2 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "sshl\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_shift")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_simd_reg_shl<mode>_unsigned"
-+ [(set (match_operand:VDQ 0 "register_operand" "=w")
-+ (unspec:VDQ [(match_operand:VDQ 1 "register_operand" "w")
-+ (match_operand:VDQ 2 "register_operand" "w")]
-+ UNSPEC_ASHIFT_UNSIGNED))]
-+ "TARGET_SIMD"
-+ "ushl\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_shift")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_simd_reg_shl<mode>_signed"
-+ [(set (match_operand:VDQ 0 "register_operand" "=w")
-+ (unspec:VDQ [(match_operand:VDQ 1 "register_operand" "w")
-+ (match_operand:VDQ 2 "register_operand" "w")]
-+ UNSPEC_ASHIFT_SIGNED))]
-+ "TARGET_SIMD"
-+ "sshl\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_shift")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "ashl<mode>3"
-+ [(match_operand:VDQ 0 "register_operand" "")
-+ (match_operand:VDQ 1 "register_operand" "")
-+ (match_operand:SI 2 "general_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
-+ int shift_amount;
-+
-+ if (CONST_INT_P (operands[2]))
-+ {
-+ shift_amount = INTVAL (operands[2]);
-+ if (shift_amount >= 0 && shift_amount < bit_width)
-+ {
-+ rtx tmp = aarch64_simd_gen_const_vector_dup (<MODE>mode,
-+ shift_amount);
-+ emit_insn (gen_aarch64_simd_imm_shl<mode> (operands[0],
-+ operands[1],
-+ tmp));
-+ DONE;
-+ }
-+ else
-+ {
-+ operands[2] = force_reg (SImode, operands[2]);
-+ }
-+ }
-+ else if (MEM_P (operands[2]))
-+ {
-+ operands[2] = force_reg (SImode, operands[2]);
-+ }
-+
-+ if (REG_P (operands[2]))
-+ {
-+ rtx tmp = gen_reg_rtx (<MODE>mode);
-+ emit_insn (gen_aarch64_simd_dup<mode> (tmp,
-+ convert_to_mode (<VEL>mode,
-+ operands[2],
-+ 0)));
-+ emit_insn (gen_aarch64_simd_reg_sshl<mode> (operands[0], operands[1],
-+ tmp));
-+ DONE;
-+ }
-+ else
-+ FAIL;
-+}
-+)
-+
-+(define_expand "lshr<mode>3"
-+ [(match_operand:VDQ 0 "register_operand" "")
-+ (match_operand:VDQ 1 "register_operand" "")
-+ (match_operand:SI 2 "general_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
-+ int shift_amount;
-+
-+ if (CONST_INT_P (operands[2]))
-+ {
-+ shift_amount = INTVAL (operands[2]);
-+ if (shift_amount > 0 && shift_amount <= bit_width)
-+ {
-+ rtx tmp = aarch64_simd_gen_const_vector_dup (<MODE>mode,
-+ shift_amount);
-+ emit_insn (gen_aarch64_simd_lshr<mode> (operands[0],
-+ operands[1],
-+ tmp));
-+ DONE;
-+ }
-+ else
-+ operands[2] = force_reg (SImode, operands[2]);
-+ }
-+ else if (MEM_P (operands[2]))
-+ {
-+ operands[2] = force_reg (SImode, operands[2]);
-+ }
-+
-+ if (REG_P (operands[2]))
-+ {
-+ rtx tmp = gen_reg_rtx (SImode);
-+ rtx tmp1 = gen_reg_rtx (<MODE>mode);
-+ emit_insn (gen_negsi2 (tmp, operands[2]));
-+ emit_insn (gen_aarch64_simd_dup<mode> (tmp1,
-+ convert_to_mode (<VEL>mode,
-+ tmp, 0)));
-+ emit_insn (gen_aarch64_simd_reg_shl<mode>_unsigned (operands[0],
-+ operands[1],
-+ tmp1));
-+ DONE;
-+ }
-+ else
-+ FAIL;
-+}
-+)
-+
-+(define_expand "ashr<mode>3"
-+ [(match_operand:VDQ 0 "register_operand" "")
-+ (match_operand:VDQ 1 "register_operand" "")
-+ (match_operand:SI 2 "general_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
-+ int shift_amount;
-+
-+ if (CONST_INT_P (operands[2]))
-+ {
-+ shift_amount = INTVAL (operands[2]);
-+ if (shift_amount > 0 && shift_amount <= bit_width)
-+ {
-+ rtx tmp = aarch64_simd_gen_const_vector_dup (<MODE>mode,
-+ shift_amount);
-+ emit_insn (gen_aarch64_simd_ashr<mode> (operands[0],
-+ operands[1],
-+ tmp));
-+ DONE;
-+ }
-+ else
-+ operands[2] = force_reg (SImode, operands[2]);
-+ }
-+ else if (MEM_P (operands[2]))
-+ {
-+ operands[2] = force_reg (SImode, operands[2]);
-+ }
-+
-+ if (REG_P (operands[2]))
-+ {
-+ rtx tmp = gen_reg_rtx (SImode);
-+ rtx tmp1 = gen_reg_rtx (<MODE>mode);
-+ emit_insn (gen_negsi2 (tmp, operands[2]));
-+ emit_insn (gen_aarch64_simd_dup<mode> (tmp1,
-+ convert_to_mode (<VEL>mode,
-+ tmp, 0)));
-+ emit_insn (gen_aarch64_simd_reg_shl<mode>_signed (operands[0],
-+ operands[1],
-+ tmp1));
-+ DONE;
-+ }
-+ else
-+ FAIL;
-+}
-+)
-+
-+(define_expand "vashl<mode>3"
-+ [(match_operand:VDQ 0 "register_operand" "")
-+ (match_operand:VDQ 1 "register_operand" "")
-+ (match_operand:VDQ 2 "register_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ emit_insn (gen_aarch64_simd_reg_sshl<mode> (operands[0], operands[1],
-+ operands[2]));
-+ DONE;
-+})
-+
-+;; Using mode VQ_S as there is no V2DImode neg!
-+;; Negating individual lanes most certainly offsets the
-+;; gain from vectorization.
-+(define_expand "vashr<mode>3"
-+ [(match_operand:VQ_S 0 "register_operand" "")
-+ (match_operand:VQ_S 1 "register_operand" "")
-+ (match_operand:VQ_S 2 "register_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ rtx neg = gen_reg_rtx (<MODE>mode);
-+ emit (gen_neg<mode>2 (neg, operands[2]));
-+ emit_insn (gen_aarch64_simd_reg_shl<mode>_signed (operands[0], operands[1],
-+ neg));
-+ DONE;
-+})
-+
-+(define_expand "vlshr<mode>3"
-+ [(match_operand:VQ_S 0 "register_operand" "")
-+ (match_operand:VQ_S 1 "register_operand" "")
-+ (match_operand:VQ_S 2 "register_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ rtx neg = gen_reg_rtx (<MODE>mode);
-+ emit (gen_neg<mode>2 (neg, operands[2]));
-+ emit_insn (gen_aarch64_simd_reg_shl<mode>_unsigned (operands[0], operands[1],
-+ neg));
-+ DONE;
-+})
-+
-+(define_expand "vec_set<mode>"
-+ [(match_operand:VQ_S 0 "register_operand" "+w")
-+ (match_operand:<VEL> 1 "register_operand" "r")
-+ (match_operand:SI 2 "immediate_operand" "")]
-+ "TARGET_SIMD"
-+ {
-+ HOST_WIDE_INT elem = (HOST_WIDE_INT) 1 << INTVAL (operands[2]);
-+ emit_insn (gen_aarch64_simd_vec_set<mode> (operands[0], operands[1],
-+ GEN_INT (elem), operands[0]));
-+ DONE;
-+ }
-+)
-+
-+(define_insn "aarch64_simd_vec_setv2di"
-+ [(set (match_operand:V2DI 0 "register_operand" "=w")
-+ (vec_merge:V2DI
-+ (vec_duplicate:V2DI
-+ (match_operand:DI 1 "register_operand" "r"))
-+ (match_operand:V2DI 3 "register_operand" "0")
-+ (match_operand:SI 2 "immediate_operand" "i")))]
-+ "TARGET_SIMD"
-+ "ins\t%0.d[%p2], %1";
-+ [(set_attr "simd_type" "simd_insgp")
-+ (set_attr "simd_mode" "V2DI")]
-+)
-+
-+(define_expand "vec_setv2di"
-+ [(match_operand:V2DI 0 "register_operand" "+w")
-+ (match_operand:DI 1 "register_operand" "r")
-+ (match_operand:SI 2 "immediate_operand" "")]
-+ "TARGET_SIMD"
-+ {
-+ HOST_WIDE_INT elem = (HOST_WIDE_INT) 1 << INTVAL (operands[2]);
-+ emit_insn (gen_aarch64_simd_vec_setv2di (operands[0], operands[1],
-+ GEN_INT (elem), operands[0]));
-+ DONE;
-+ }
-+)
-+
-+(define_insn "aarch64_simd_vec_set<mode>"
-+ [(set (match_operand:VDQF 0 "register_operand" "=w")
-+ (vec_merge:VDQF
-+ (vec_duplicate:VDQF
-+ (match_operand:<VEL> 1 "register_operand" "w"))
-+ (match_operand:VDQF 3 "register_operand" "0")
-+ (match_operand:SI 2 "immediate_operand" "i")))]
-+ "TARGET_SIMD"
-+ "ins\t%0.<Vetype>[%p2], %1.<Vetype>[0]";
-+ [(set_attr "simd_type" "simd_ins")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "vec_set<mode>"
-+ [(match_operand:VDQF 0 "register_operand" "+w")
-+ (match_operand:<VEL> 1 "register_operand" "w")
-+ (match_operand:SI 2 "immediate_operand" "")]
-+ "TARGET_SIMD"
-+ {
-+ HOST_WIDE_INT elem = (HOST_WIDE_INT) 1 << INTVAL (operands[2]);
-+ emit_insn (gen_aarch64_simd_vec_set<mode> (operands[0], operands[1],
-+ GEN_INT (elem), operands[0]));
-+ DONE;
-+ }
-+)
-+
-+
-+(define_insn "aarch64_mla<mode>"
-+ [(set (match_operand:VQ_S 0 "register_operand" "=w")
-+ (plus:VQ_S (mult:VQ_S (match_operand:VQ_S 2 "register_operand" "w")
-+ (match_operand:VQ_S 3 "register_operand" "w"))
-+ (match_operand:VQ_S 1 "register_operand" "0")))]
-+ "TARGET_SIMD"
-+ "mla\t%0.<Vtype>, %2.<Vtype>, %3.<Vtype>"
-+ [(set_attr "simd_type" "simd_mla")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_mls<mode>"
-+ [(set (match_operand:VQ_S 0 "register_operand" "=w")
-+ (minus:VQ_S (match_operand:VQ_S 1 "register_operand" "0")
-+ (mult:VQ_S (match_operand:VQ_S 2 "register_operand" "w")
-+ (match_operand:VQ_S 3 "register_operand" "w"))))]
-+ "TARGET_SIMD"
-+ "mls\t%0.<Vtype>, %2.<Vtype>, %3.<Vtype>"
-+ [(set_attr "simd_type" "simd_mla")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; Max/Min operations.
-+(define_insn "<maxmin><mode>3"
-+ [(set (match_operand:VQ_S 0 "register_operand" "=w")
-+ (MAXMIN:VQ_S (match_operand:VQ_S 1 "register_operand" "w")
-+ (match_operand:VQ_S 2 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "<maxmin>\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_minmax")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; Move into low-half clearing high half to 0.
-+
-+(define_insn "move_lo_quad_<mode>"
-+ [(set (match_operand:VQ 0 "register_operand" "=w")
-+ (vec_concat:VQ
-+ (match_operand:<VHALF> 1 "register_operand" "w")
-+ (vec_duplicate:<VHALF> (const_int 0))))]
-+ "TARGET_SIMD"
-+ "mov\\t%d0, %d1";
-+ [(set_attr "simd_type" "simd_dup")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; Move into high-half.
-+
-+(define_insn "aarch64_simd_move_hi_quad_<mode>"
-+ [(set (match_operand:VQ 0 "register_operand" "+w")
-+ (vec_concat:VQ
-+ (vec_select:<VHALF>
-+ (match_dup 0)
-+ (match_operand:VQ 2 "vect_par_cnst_lo_half" ""))
-+ (match_operand:<VHALF> 1 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "ins\\t%0.d[1], %1.d[0]";
-+ [(set_attr "simd_type" "simd_ins")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "move_hi_quad_<mode>"
-+ [(match_operand:VQ 0 "register_operand" "")
-+ (match_operand:<VHALF> 1 "register_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, false);
-+ emit_insn (gen_aarch64_simd_move_hi_quad_<mode> (operands[0],
-+ operands[1], p));
-+ DONE;
-+})
-+
-+;; Narrowing operations.
-+
-+;; For doubles.
-+(define_insn "aarch64_simd_vec_pack_trunc_<mode>"
-+ [(set (match_operand:<VNARROWQ> 0 "register_operand" "=w")
-+ (truncate:<VNARROWQ> (match_operand:VQN 1 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "xtn\\t%0.<Vntype>, %1.<Vtype>"
-+ [(set_attr "simd_type" "simd_shiftn_imm")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "vec_pack_trunc_<mode>"
-+ [(match_operand:<VNARROWD> 0 "register_operand" "")
-+ (match_operand:VDN 1 "register_operand" "")
-+ (match_operand:VDN 2 "register_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ rtx tempreg = gen_reg_rtx (<VDBL>mode);
-+
-+ emit_insn (gen_move_lo_quad_<Vdbl> (tempreg, operands[1]));
-+ emit_insn (gen_move_hi_quad_<Vdbl> (tempreg, operands[2]));
-+ emit_insn (gen_aarch64_simd_vec_pack_trunc_<Vdbl> (operands[0], tempreg));
-+ DONE;
-+})
-+
-+;; For quads.
-+
-+(define_insn "vec_pack_trunc_<mode>"
-+ [(set (match_operand:<VNARROWQ2> 0 "register_operand" "+&w")
-+ (vec_concat:<VNARROWQ2>
-+ (truncate:<VNARROWQ> (match_operand:VQN 1 "register_operand" "w"))
-+ (truncate:<VNARROWQ> (match_operand:VQN 2 "register_operand" "w"))))]
-+ "TARGET_SIMD"
-+ "xtn\\t%0.<Vntype>, %1.<Vtype>\;xtn2\\t%0.<V2ntype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_shiftn2_imm")
-+ (set_attr "simd_mode" "<MODE>")
-+ (set_attr "length" "8")]
-+)
-+
-+;; Widening operations.
-+
-+(define_insn "aarch64_simd_vec_unpack<su>_lo_<mode>"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (ANY_EXTEND:<VWIDE> (vec_select:<VHALF>
-+ (match_operand:VQW 1 "register_operand" "w")
-+ (match_operand:VQW 2 "vect_par_cnst_lo_half" "")
-+ )))]
-+ "TARGET_SIMD"
-+ "<su>shll %0.<Vwtype>, %1.<Vhalftype>, 0"
-+ [(set_attr "simd_type" "simd_shiftl_imm")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_simd_vec_unpack<su>_hi_<mode>"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (ANY_EXTEND:<VWIDE> (vec_select:<VHALF>
-+ (match_operand:VQW 1 "register_operand" "w")
-+ (match_operand:VQW 2 "vect_par_cnst_hi_half" "")
-+ )))]
-+ "TARGET_SIMD"
-+ "<su>shll2 %0.<Vwtype>, %1.<Vtype>, 0"
-+ [(set_attr "simd_type" "simd_shiftl_imm")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "vec_unpack<su>_hi_<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "")
-+ (ANY_EXTEND:<VWIDE> (match_operand:VQW 1 "register_operand"))]
-+ "TARGET_SIMD"
-+ {
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ emit_insn (gen_aarch64_simd_vec_unpack<su>_hi_<mode> (operands[0],
-+ operands[1], p));
-+ DONE;
-+ }
-+)
-+
-+(define_expand "vec_unpack<su>_lo_<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "")
-+ (ANY_EXTEND:<VWIDE> (match_operand:VQW 1 "register_operand" ""))]
-+ "TARGET_SIMD"
-+ {
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, false);
-+ emit_insn (gen_aarch64_simd_vec_unpack<su>_lo_<mode> (operands[0],
-+ operands[1], p));
-+ DONE;
-+ }
-+)
-+
-+;; Widening arithmetic.
-+
-+(define_insn "aarch64_simd_vec_<su>mult_lo_<mode>"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (mult:<VWIDE> (ANY_EXTEND:<VWIDE> (vec_select:<VHALF>
-+ (match_operand:VQW 1 "register_operand" "w")
-+ (match_operand:VQW 3 "vect_par_cnst_lo_half" "")))
-+ (ANY_EXTEND:<VWIDE> (vec_select:<VHALF>
-+ (match_operand:VQW 2 "register_operand" "w")
-+ (match_dup 3)))))]
-+ "TARGET_SIMD"
-+ "<su>mull\\t%0.<Vwtype>, %1.<Vhalftype>, %2.<Vhalftype>"
-+ [(set_attr "simd_type" "simd_mull")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "vec_widen_<su>mult_lo_<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "")
-+ (ANY_EXTEND:<VWIDE> (match_operand:VQW 1 "register_operand" ""))
-+ (ANY_EXTEND:<VWIDE> (match_operand:VQW 2 "register_operand" ""))]
-+ "TARGET_SIMD"
-+ {
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, false);
-+ emit_insn (gen_aarch64_simd_vec_<su>mult_lo_<mode> (operands[0],
-+ operands[1],
-+ operands[2], p));
-+ DONE;
-+ }
-+)
-+
-+(define_insn "aarch64_simd_vec_<su>mult_hi_<mode>"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (mult:<VWIDE> (ANY_EXTEND:<VWIDE> (vec_select:<VHALF>
-+ (match_operand:VQW 1 "register_operand" "w")
-+ (match_operand:VQW 3 "vect_par_cnst_hi_half" "")))
-+ (ANY_EXTEND:<VWIDE> (vec_select:<VHALF>
-+ (match_operand:VQW 2 "register_operand" "w")
-+ (match_dup 3)))))]
-+ "TARGET_SIMD"
-+ "<su>mull2\\t%0.<Vwtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_mull")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "vec_widen_<su>mult_hi_<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "")
-+ (ANY_EXTEND:<VWIDE> (match_operand:VQW 1 "register_operand" ""))
-+ (ANY_EXTEND:<VWIDE> (match_operand:VQW 2 "register_operand" ""))]
-+ "TARGET_SIMD"
-+ {
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ emit_insn (gen_aarch64_simd_vec_<su>mult_hi_<mode> (operands[0],
-+ operands[1],
-+ operands[2], p));
-+ DONE;
-+
-+ }
-+)
-+
-+;; FP vector operations.
-+;; AArch64 AdvSIMD supports single-precision (32-bit) and
-+;; double-precision (64-bit) floating-point data types and arithmetic as
-+;; defined by the IEEE 754-2008 standard. This makes them vectorizable
-+;; without the need for -ffast-math or -funsafe-math-optimizations.
-+;;
-+;; Floating-point operations can raise an exception. Vectorizing such
-+;; operations are safe because of reasons explained below.
-+;;
-+;; ARMv8 permits an extension to enable trapped floating-point
-+;; exception handling, however this is an optional feature. In the
-+;; event of a floating-point exception being raised by vectorised
-+;; code then:
-+;; 1. If trapped floating-point exceptions are available, then a trap
-+;; will be taken when any lane raises an enabled exception. A trap
-+;; handler may determine which lane raised the exception.
-+;; 2. Alternatively a sticky exception flag is set in the
-+;; floating-point status register (FPSR). Software may explicitly
-+;; test the exception flags, in which case the tests will either
-+;; prevent vectorisation, allowing precise identification of the
-+;; failing operation, or if tested outside of vectorisable regions
-+;; then the specific operation and lane are not of interest.
-+
-+;; FP arithmetic operations.
-+
-+(define_insn "add<mode>3"
-+ [(set (match_operand:VDQF 0 "register_operand" "=w")
-+ (plus:VDQF (match_operand:VDQF 1 "register_operand" "w")
-+ (match_operand:VDQF 2 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "fadd\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_fadd")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "sub<mode>3"
-+ [(set (match_operand:VDQF 0 "register_operand" "=w")
-+ (minus:VDQF (match_operand:VDQF 1 "register_operand" "w")
-+ (match_operand:VDQF 2 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "fsub\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_fadd")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "mul<mode>3"
-+ [(set (match_operand:VDQF 0 "register_operand" "=w")
-+ (mult:VDQF (match_operand:VDQF 1 "register_operand" "w")
-+ (match_operand:VDQF 2 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "fmul\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_fmul")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "div<mode>3"
-+ [(set (match_operand:VDQF 0 "register_operand" "=w")
-+ (div:VDQF (match_operand:VDQF 1 "register_operand" "w")
-+ (match_operand:VDQF 2 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "fdiv\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_fdiv")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "neg<mode>2"
-+ [(set (match_operand:VDQF 0 "register_operand" "=w")
-+ (neg:VDQF (match_operand:VDQF 1 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "fneg\\t%0.<Vtype>, %1.<Vtype>"
-+ [(set_attr "simd_type" "simd_fnegabs")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "abs<mode>2"
-+ [(set (match_operand:VDQF 0 "register_operand" "=w")
-+ (abs:VDQF (match_operand:VDQF 1 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "fabs\\t%0.<Vtype>, %1.<Vtype>"
-+ [(set_attr "simd_type" "simd_fnegabs")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "fma<mode>4"
-+ [(set (match_operand:VDQF 0 "register_operand" "=w")
-+ (fma:VDQF (match_operand:VDQF 1 "register_operand" "w")
-+ (match_operand:VDQF 2 "register_operand" "w")
-+ (match_operand:VDQF 3 "register_operand" "0")))]
-+ "TARGET_SIMD"
-+ "fmla\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_fmla")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_frint<frint_suffix><mode>"
-+ [(set (match_operand:VDQF 0 "register_operand" "=w")
-+ (unspec:VDQF [(match_operand:VDQF 1 "register_operand" "w")]
-+ FRINT))]
-+ "TARGET_SIMD"
-+ "frint<frint_suffix>\\t%0.<Vtype>, %1.<Vtype>"
-+ [(set_attr "simd_type" "simd_frint")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; Vector versions of the floating-point frint patterns.
-+;; Expands to btrunc, ceil, floor, nearbyint, rint, round.
-+(define_expand "<frint_pattern><mode>2"
-+ [(set (match_operand:VDQF 0 "register_operand")
-+ (unspec:VDQF [(match_operand:VDQF 1 "register_operand")]
-+ FRINT))]
-+ "TARGET_SIMD"
-+ {})
-+
-+(define_insn "aarch64_fcvt<frint_suffix><su><mode>"
-+ [(set (match_operand:<FCVT_TARGET> 0 "register_operand" "=w")
-+ (FIXUORS:<FCVT_TARGET> (unspec:<FCVT_TARGET>
-+ [(match_operand:VDQF 1 "register_operand" "w")]
-+ FCVT)))]
-+ "TARGET_SIMD"
-+ "fcvt<frint_suffix><su>\\t%0.<Vtype>, %1.<Vtype>"
-+ [(set_attr "simd_type" "simd_fcvti")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; Vector versions of the fcvt standard patterns.
-+;; Expands to lbtrunc, lround, lceil, lfloor
-+(define_expand "l<fcvt_pattern><su_optab><fcvt_target><VDQF:mode>2"
-+ [(set (match_operand:<FCVT_TARGET> 0 "register_operand")
-+ (FIXUORS:<FCVT_TARGET> (unspec:<FCVT_TARGET>
-+ [(match_operand:VDQF 1 "register_operand")]
-+ FCVT)))]
-+ "TARGET_SIMD"
-+ {})
-+
-+(define_insn "aarch64_vmls<mode>"
-+ [(set (match_operand:VDQF 0 "register_operand" "=w")
-+ (minus:VDQF (match_operand:VDQF 1 "register_operand" "0")
-+ (mult:VDQF (match_operand:VDQF 2 "register_operand" "w")
-+ (match_operand:VDQF 3 "register_operand" "w"))))]
-+ "TARGET_SIMD"
-+ "fmls\\t%0.<Vtype>, %2.<Vtype>, %3.<Vtype>"
-+ [(set_attr "simd_type" "simd_fmla")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; FP Max/Min
-+;; Max/Min are introduced by idiom recognition by GCC's mid-end. An
-+;; expression like:
-+;; a = (b < c) ? b : c;
-+;; is idiom-matched as MIN_EXPR<b,c> only if -ffinite-math-only is enabled
-+;; either explicitly or indirectly via -ffast-math.
-+;;
-+;; MIN_EXPR and MAX_EXPR eventually map to 'smin' and 'smax' in RTL.
-+;; The 'smax' and 'smin' RTL standard pattern names do not specify which
-+;; operand will be returned when both operands are zero (i.e. they may not
-+;; honour signed zeroes), or when either operand is NaN. Therefore GCC
-+;; only introduces MIN_EXPR/MAX_EXPR in fast math mode or when not honouring
-+;; NaNs.
-+
-+(define_insn "smax<mode>3"
-+ [(set (match_operand:VDQF 0 "register_operand" "=w")
-+ (smax:VDQF (match_operand:VDQF 1 "register_operand" "w")
-+ (match_operand:VDQF 2 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "fmaxnm\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_fminmax")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "smin<mode>3"
-+ [(set (match_operand:VDQF 0 "register_operand" "=w")
-+ (smin:VDQF (match_operand:VDQF 1 "register_operand" "w")
-+ (match_operand:VDQF 2 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "fminnm\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_fminmax")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; FP 'across lanes' max and min ops.
-+
-+(define_insn "reduc_s<fmaxminv>_v4sf"
-+ [(set (match_operand:V4SF 0 "register_operand" "=w")
-+ (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "w")]
-+ FMAXMINV))]
-+ "TARGET_SIMD"
-+ "f<fmaxminv>nmv\\t%s0, %1.4s";
-+ [(set_attr "simd_type" "simd_fminmaxv")
-+ (set_attr "simd_mode" "V4SF")]
-+)
-+
-+(define_insn "reduc_s<fmaxminv>_<mode>"
-+ [(set (match_operand:V2F 0 "register_operand" "=w")
-+ (unspec:V2F [(match_operand:V2F 1 "register_operand" "w")]
-+ FMAXMINV))]
-+ "TARGET_SIMD"
-+ "f<fmaxminv>nmp\\t%0.<Vtype>, %1.<Vtype>, %1.<Vtype>";
-+ [(set_attr "simd_type" "simd_fminmax")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; FP 'across lanes' add.
-+
-+(define_insn "aarch64_addvv4sf"
-+ [(set (match_operand:V4SF 0 "register_operand" "=w")
-+ (unspec:V4SF [(match_operand:V4SF 1 "register_operand" "w")]
-+ UNSPEC_FADDV))]
-+ "TARGET_SIMD"
-+ "faddp\\t%0.4s, %1.4s, %1.4s"
-+ [(set_attr "simd_type" "simd_fadd")
-+ (set_attr "simd_mode" "V4SF")]
-+)
-+
-+(define_expand "reduc_uplus_v4sf"
-+ [(set (match_operand:V4SF 0 "register_operand" "=w")
-+ (match_operand:V4SF 1 "register_operand" "w"))]
-+ "TARGET_SIMD"
-+{
-+ rtx tmp = gen_reg_rtx (V4SFmode);
-+ emit_insn (gen_aarch64_addvv4sf (tmp, operands[1]));
-+ emit_insn (gen_aarch64_addvv4sf (operands[0], tmp));
-+ DONE;
-+})
-+
-+(define_expand "reduc_splus_v4sf"
-+ [(set (match_operand:V4SF 0 "register_operand" "=w")
-+ (match_operand:V4SF 1 "register_operand" "w"))]
-+ "TARGET_SIMD"
-+{
-+ rtx tmp = gen_reg_rtx (V4SFmode);
-+ emit_insn (gen_aarch64_addvv4sf (tmp, operands[1]));
-+ emit_insn (gen_aarch64_addvv4sf (operands[0], tmp));
-+ DONE;
-+})
-+
-+(define_insn "aarch64_addv<mode>"
-+ [(set (match_operand:V2F 0 "register_operand" "=w")
-+ (unspec:V2F [(match_operand:V2F 1 "register_operand" "w")]
-+ UNSPEC_FADDV))]
-+ "TARGET_SIMD"
-+ "faddp\\t%<Vetype>0, %1.<Vtype>"
-+ [(set_attr "simd_type" "simd_fadd")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "reduc_uplus_<mode>"
-+ [(set (match_operand:V2F 0 "register_operand" "=w")
-+ (unspec:V2F [(match_operand:V2F 1 "register_operand" "w")]
-+ UNSPEC_FADDV))]
-+ "TARGET_SIMD"
-+ ""
-+)
-+
-+(define_expand "reduc_splus_<mode>"
-+ [(set (match_operand:V2F 0 "register_operand" "=w")
-+ (unspec:V2F [(match_operand:V2F 1 "register_operand" "w")]
-+ UNSPEC_FADDV))]
-+ "TARGET_SIMD"
-+ ""
-+)
-+
-+;; Reduction across lanes.
-+
-+(define_insn "aarch64_addv<mode>"
-+ [(set (match_operand:VDQV 0 "register_operand" "=w")
-+ (unspec:VDQV [(match_operand:VDQV 1 "register_operand" "w")]
-+ UNSPEC_ADDV))]
-+ "TARGET_SIMD"
-+ "addv\\t%<Vetype>0, %1.<Vtype>"
-+ [(set_attr "simd_type" "simd_addv")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "reduc_splus_<mode>"
-+ [(set (match_operand:VDQV 0 "register_operand" "=w")
-+ (unspec:VDQV [(match_operand:VDQV 1 "register_operand" "w")]
-+ UNSPEC_ADDV))]
-+ "TARGET_SIMD"
-+ ""
-+)
-+
-+(define_expand "reduc_uplus_<mode>"
-+ [(set (match_operand:VDQV 0 "register_operand" "=w")
-+ (unspec:VDQV [(match_operand:VDQV 1 "register_operand" "w")]
-+ UNSPEC_ADDV))]
-+ "TARGET_SIMD"
-+ ""
-+)
-+
-+(define_insn "aarch64_addvv2di"
-+ [(set (match_operand:V2DI 0 "register_operand" "=w")
-+ (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "w")]
-+ UNSPEC_ADDV))]
-+ "TARGET_SIMD"
-+ "addp\\t%d0, %1.2d"
-+ [(set_attr "simd_type" "simd_add")
-+ (set_attr "simd_mode" "V2DI")]
-+)
-+
-+(define_expand "reduc_uplus_v2di"
-+ [(set (match_operand:V2DI 0 "register_operand" "=w")
-+ (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "w")]
-+ UNSPEC_ADDV))]
-+ "TARGET_SIMD"
-+ ""
-+)
-+
-+(define_expand "reduc_splus_v2di"
-+ [(set (match_operand:V2DI 0 "register_operand" "=w")
-+ (unspec:V2DI [(match_operand:V2DI 1 "register_operand" "w")]
-+ UNSPEC_ADDV))]
-+ "TARGET_SIMD"
-+ ""
-+)
-+
-+(define_insn "aarch64_addvv2si"
-+ [(set (match_operand:V2SI 0 "register_operand" "=w")
-+ (unspec:V2SI [(match_operand:V2SI 1 "register_operand" "w")]
-+ UNSPEC_ADDV))]
-+ "TARGET_SIMD"
-+ "addp\\t%0.2s, %1.2s, %1.2s"
-+ [(set_attr "simd_type" "simd_add")
-+ (set_attr "simd_mode" "V2SI")]
-+)
-+
-+(define_expand "reduc_uplus_v2si"
-+ [(set (match_operand:V2SI 0 "register_operand" "=w")
-+ (unspec:V2SI [(match_operand:V2SI 1 "register_operand" "w")]
-+ UNSPEC_ADDV))]
-+ "TARGET_SIMD"
-+ ""
-+)
-+
-+(define_expand "reduc_splus_v2si"
-+ [(set (match_operand:V2SI 0 "register_operand" "=w")
-+ (unspec:V2SI [(match_operand:V2SI 1 "register_operand" "w")]
-+ UNSPEC_ADDV))]
-+ "TARGET_SIMD"
-+ ""
-+)
-+
-+(define_insn "reduc_<maxminv>_<mode>"
-+ [(set (match_operand:VDQV 0 "register_operand" "=w")
-+ (unspec:VDQV [(match_operand:VDQV 1 "register_operand" "w")]
-+ MAXMINV))]
-+ "TARGET_SIMD"
-+ "<maxminv>v\\t%<Vetype>0, %1.<Vtype>"
-+ [(set_attr "simd_type" "simd_minmaxv")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "reduc_<maxminv>_v2si"
-+ [(set (match_operand:V2SI 0 "register_operand" "=w")
-+ (unspec:V2SI [(match_operand:V2SI 1 "register_operand" "w")]
-+ MAXMINV))]
-+ "TARGET_SIMD"
-+ "<maxminv>p\\t%0.2s, %1.2s, %1.2s"
-+ [(set_attr "simd_type" "simd_minmax")
-+ (set_attr "simd_mode" "V2SI")]
-+)
-+
-+;; vbsl_* intrinsics may compile to any of bsl/bif/bit depending on register
-+;; allocation. For an intrinsic of form:
-+;; vD = bsl_* (vS, vN, vM)
-+;; We can use any of:
-+;; bsl vS, vN, vM (if D = S)
-+;; bit vD, vN, vS (if D = M, so 1-bits in vS choose bits from vN, else vM)
-+;; bif vD, vM, vS (if D = N, so 0-bits in vS choose bits from vM, else vN)
-+
-+(define_insn "aarch64_simd_bsl<mode>_internal"
-+ [(set (match_operand:VALL 0 "register_operand" "=w,w,w")
-+ (unspec:VALL
-+ [(match_operand:<V_cmp_result> 1 "register_operand" " 0,w,w")
-+ (match_operand:VALL 2 "register_operand" " w,w,0")
-+ (match_operand:VALL 3 "register_operand" " w,0,w")]
-+ UNSPEC_BSL))]
-+ "TARGET_SIMD"
-+ "@
-+ bsl\\t%0.<Vbtype>, %2.<Vbtype>, %3.<Vbtype>
-+ bit\\t%0.<Vbtype>, %2.<Vbtype>, %1.<Vbtype>
-+ bif\\t%0.<Vbtype>, %3.<Vbtype>, %1.<Vbtype>"
-+)
-+
-+(define_expand "aarch64_simd_bsl<mode>"
-+ [(set (match_operand:VALL 0 "register_operand")
-+ (unspec:VALL [(match_operand:<V_cmp_result> 1 "register_operand")
-+ (match_operand:VALL 2 "register_operand")
-+ (match_operand:VALL 3 "register_operand")]
-+ UNSPEC_BSL))]
-+ "TARGET_SIMD"
-+{
-+ /* We can't alias operands together if they have different modes. */
-+ operands[1] = gen_lowpart (<V_cmp_result>mode, operands[1]);
-+})
-+
-+(define_expand "aarch64_vcond_internal<mode>"
-+ [(set (match_operand:VDQ 0 "register_operand")
-+ (if_then_else:VDQ
-+ (match_operator 3 "comparison_operator"
-+ [(match_operand:VDQ 4 "register_operand")
-+ (match_operand:VDQ 5 "nonmemory_operand")])
-+ (match_operand:VDQ 1 "register_operand")
-+ (match_operand:VDQ 2 "register_operand")))]
-+ "TARGET_SIMD"
-+{
-+ int inverse = 0, has_zero_imm_form = 0;
-+ rtx mask = gen_reg_rtx (<MODE>mode);
-+
-+ switch (GET_CODE (operands[3]))
-+ {
-+ case LE:
-+ case LT:
-+ case NE:
-+ inverse = 1;
-+ /* Fall through. */
-+ case GE:
-+ case GT:
-+ case EQ:
-+ has_zero_imm_form = 1;
-+ break;
-+ case LEU:
-+ case LTU:
-+ inverse = 1;
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ if (!REG_P (operands[5])
-+ && (operands[5] != CONST0_RTX (<MODE>mode) || !has_zero_imm_form))
-+ operands[5] = force_reg (<MODE>mode, operands[5]);
-+
-+ switch (GET_CODE (operands[3]))
-+ {
-+ case LT:
-+ case GE:
-+ emit_insn (gen_aarch64_cmge<mode> (mask, operands[4], operands[5]));
-+ break;
-+
-+ case LE:
-+ case GT:
-+ emit_insn (gen_aarch64_cmgt<mode> (mask, operands[4], operands[5]));
-+ break;
-+
-+ case LTU:
-+ case GEU:
-+ emit_insn (gen_aarch64_cmhs<mode> (mask, operands[4], operands[5]));
-+ break;
-+
-+ case LEU:
-+ case GTU:
-+ emit_insn (gen_aarch64_cmhi<mode> (mask, operands[4], operands[5]));
-+ break;
-+
-+ case NE:
-+ case EQ:
-+ emit_insn (gen_aarch64_cmeq<mode> (mask, operands[4], operands[5]));
-+ break;
-+
-+ default:
-+ gcc_unreachable ();
-+ }
-+
-+ if (inverse)
-+ emit_insn (gen_aarch64_simd_bsl<mode> (operands[0], mask, operands[2],
-+ operands[1]));
-+ else
-+ emit_insn (gen_aarch64_simd_bsl<mode> (operands[0], mask, operands[1],
-+ operands[2]));
-+
-+ DONE;
-+})
-+
-+(define_expand "aarch64_vcond_internal<mode>"
-+ [(set (match_operand:VDQF 0 "register_operand")
-+ (if_then_else:VDQF
-+ (match_operator 3 "comparison_operator"
-+ [(match_operand:VDQF 4 "register_operand")
-+ (match_operand:VDQF 5 "nonmemory_operand")])
-+ (match_operand:VDQF 1 "register_operand")
-+ (match_operand:VDQF 2 "register_operand")))]
-+ "TARGET_SIMD"
-+{
-+ int inverse = 0;
-+ int use_zero_form = 0;
-+ int swap_bsl_operands = 0;
-+ rtx mask = gen_reg_rtx (<V_cmp_result>mode);
-+ rtx tmp = gen_reg_rtx (<V_cmp_result>mode);
-+
-+ rtx (*base_comparison) (rtx, rtx, rtx);
-+ rtx (*complimentary_comparison) (rtx, rtx, rtx);
-+
-+ switch (GET_CODE (operands[3]))
-+ {
-+ case GE:
-+ case GT:
-+ case LE:
-+ case LT:
-+ case EQ:
-+ if (operands[5] == CONST0_RTX (<MODE>mode))
-+ {
-+ use_zero_form = 1;
-+ break;
-+ }
-+ /* Fall through. */
-+ default:
-+ if (!REG_P (operands[5]))
-+ operands[5] = force_reg (<MODE>mode, operands[5]);
-+ }
-+
-+ switch (GET_CODE (operands[3]))
-+ {
-+ case LT:
-+ case UNLT:
-+ inverse = 1;
-+ /* Fall through. */
-+ case GE:
-+ case UNGE:
-+ case ORDERED:
-+ case UNORDERED:
-+ base_comparison = gen_aarch64_cmge<mode>;
-+ complimentary_comparison = gen_aarch64_cmgt<mode>;
-+ break;
-+ case LE:
-+ case UNLE:
-+ inverse = 1;
-+ /* Fall through. */
-+ case GT:
-+ case UNGT:
-+ base_comparison = gen_aarch64_cmgt<mode>;
-+ complimentary_comparison = gen_aarch64_cmge<mode>;
-+ break;
-+ case EQ:
-+ case NE:
-+ case UNEQ:
-+ base_comparison = gen_aarch64_cmeq<mode>;
-+ complimentary_comparison = gen_aarch64_cmeq<mode>;
-+ break;
-+ default:
-+ gcc_unreachable ();
-+ }
-+
-+ switch (GET_CODE (operands[3]))
-+ {
-+ case LT:
-+ case LE:
-+ case GT:
-+ case GE:
-+ case EQ:
-+ /* The easy case. Here we emit one of FCMGE, FCMGT or FCMEQ.
-+ As a LT b <=> b GE a && a LE b <=> b GT a. Our transformations are:
-+ a GE b -> a GE b
-+ a GT b -> a GT b
-+ a LE b -> b GE a
-+ a LT b -> b GT a
-+ a EQ b -> a EQ b
-+ Note that there also exist direct comparison against 0 forms,
-+ so catch those as a special case. */
-+ if (use_zero_form)
-+ {
-+ inverse = 0;
-+ switch (GET_CODE (operands[3]))
-+ {
-+ case LT:
-+ base_comparison = gen_aarch64_cmlt<mode>;
-+ break;
-+ case LE:
-+ base_comparison = gen_aarch64_cmle<mode>;
-+ break;
-+ default:
-+ /* Do nothing, other zero form cases already have the correct
-+ base_comparison. */
-+ break;
-+ }
-+ }
-+
-+ if (!inverse)
-+ emit_insn (base_comparison (mask, operands[4], operands[5]));
-+ else
-+ emit_insn (complimentary_comparison (mask, operands[5], operands[4]));
-+ break;
-+ case UNLT:
-+ case UNLE:
-+ case UNGT:
-+ case UNGE:
-+ case NE:
-+ /* FCM returns false for lanes which are unordered, so if we use
-+ the inverse of the comparison we actually want to emit, then
-+ swap the operands to BSL, we will end up with the correct result.
-+ Note that a NE NaN and NaN NE b are true for all a, b.
-+
-+ Our transformations are:
-+ a GE b -> !(b GT a)
-+ a GT b -> !(b GE a)
-+ a LE b -> !(a GT b)
-+ a LT b -> !(a GE b)
-+ a NE b -> !(a EQ b) */
-+
-+ if (inverse)
-+ emit_insn (base_comparison (mask, operands[4], operands[5]));
-+ else
-+ emit_insn (complimentary_comparison (mask, operands[5], operands[4]));
-+
-+ swap_bsl_operands = 1;
-+ break;
-+ case UNEQ:
-+ /* We check (a > b || b > a). combining these comparisons give us
-+ true iff !(a != b && a ORDERED b), swapping the operands to BSL
-+ will then give us (a == b || a UNORDERED b) as intended. */
-+
-+ emit_insn (gen_aarch64_cmgt<mode> (mask, operands[4], operands[5]));
-+ emit_insn (gen_aarch64_cmgt<mode> (tmp, operands[5], operands[4]));
-+ emit_insn (gen_ior<v_cmp_result>3 (mask, mask, tmp));
-+ swap_bsl_operands = 1;
-+ break;
-+ case UNORDERED:
-+ /* Operands are ORDERED iff (a > b || b >= a).
-+ Swapping the operands to BSL will give the UNORDERED case. */
-+ swap_bsl_operands = 1;
-+ /* Fall through. */
-+ case ORDERED:
-+ emit_insn (gen_aarch64_cmgt<mode> (tmp, operands[4], operands[5]));
-+ emit_insn (gen_aarch64_cmge<mode> (mask, operands[5], operands[4]));
-+ emit_insn (gen_ior<v_cmp_result>3 (mask, mask, tmp));
-+ break;
-+ default:
-+ gcc_unreachable ();
-+ }
-+
-+ if (swap_bsl_operands)
-+ emit_insn (gen_aarch64_simd_bsl<mode> (operands[0], mask, operands[2],
-+ operands[1]));
-+ else
-+ emit_insn (gen_aarch64_simd_bsl<mode> (operands[0], mask, operands[1],
-+ operands[2]));
-+ DONE;
-+})
-+
-+(define_expand "vcond<mode><mode>"
-+ [(set (match_operand:VALL 0 "register_operand")
-+ (if_then_else:VALL
-+ (match_operator 3 "comparison_operator"
-+ [(match_operand:VALL 4 "register_operand")
-+ (match_operand:VALL 5 "nonmemory_operand")])
-+ (match_operand:VALL 1 "register_operand")
-+ (match_operand:VALL 2 "register_operand")))]
-+ "TARGET_SIMD"
-+{
-+ emit_insn (gen_aarch64_vcond_internal<mode> (operands[0], operands[1],
-+ operands[2], operands[3],
-+ operands[4], operands[5]));
-+ DONE;
-+})
-+
-+
-+(define_expand "vcondu<mode><mode>"
-+ [(set (match_operand:VDQ 0 "register_operand")
-+ (if_then_else:VDQ
-+ (match_operator 3 "comparison_operator"
-+ [(match_operand:VDQ 4 "register_operand")
-+ (match_operand:VDQ 5 "nonmemory_operand")])
-+ (match_operand:VDQ 1 "register_operand")
-+ (match_operand:VDQ 2 "register_operand")))]
-+ "TARGET_SIMD"
-+{
-+ emit_insn (gen_aarch64_vcond_internal<mode> (operands[0], operands[1],
-+ operands[2], operands[3],
-+ operands[4], operands[5]));
-+ DONE;
-+})
-+
-+;; Patterns for AArch64 SIMD Intrinsics.
-+
-+(define_expand "aarch64_create<mode>"
-+ [(match_operand:VD_RE 0 "register_operand" "")
-+ (match_operand:DI 1 "general_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ rtx src = gen_lowpart (<MODE>mode, operands[1]);
-+ emit_move_insn (operands[0], src);
-+ DONE;
-+})
-+
-+(define_insn "aarch64_get_lane_signed<mode>"
-+ [(set (match_operand:<VEL> 0 "register_operand" "=r")
-+ (sign_extend:<VEL>
-+ (vec_select:<VEL>
-+ (match_operand:VQ_S 1 "register_operand" "w")
-+ (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
-+ "TARGET_SIMD"
-+ "smov\\t%0, %1.<Vetype>[%2]"
-+ [(set_attr "simd_type" "simd_movgp")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_get_lane_unsigned<mode>"
-+ [(set (match_operand:<VEL> 0 "register_operand" "=r")
-+ (zero_extend:<VEL>
-+ (vec_select:<VEL>
-+ (match_operand:VDQ 1 "register_operand" "w")
-+ (parallel [(match_operand:SI 2 "immediate_operand" "i")]))))]
-+ "TARGET_SIMD"
-+ "umov\\t%<vw>0, %1.<Vetype>[%2]"
-+ [(set_attr "simd_type" "simd_movgp")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_get_lane<mode>"
-+ [(set (match_operand:<VEL> 0 "register_operand" "=w")
-+ (vec_select:<VEL>
-+ (match_operand:VDQF 1 "register_operand" "w")
-+ (parallel [(match_operand:SI 2 "immediate_operand" "i")])))]
-+ "TARGET_SIMD"
-+ "mov\\t%0.<Vetype>[0], %1.<Vetype>[%2]"
-+ [(set_attr "simd_type" "simd_ins")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "aarch64_get_lanedi"
-+ [(match_operand:DI 0 "register_operand" "=r")
-+ (match_operand:DI 1 "register_operand" "w")
-+ (match_operand:SI 2 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_simd_lane_bounds (operands[2], 0, 1);
-+ emit_move_insn (operands[0], operands[1]);
-+ DONE;
-+})
-+
-+(define_expand "aarch64_reinterpretv8qi<mode>"
-+ [(match_operand:V8QI 0 "register_operand" "")
-+ (match_operand:VDC 1 "register_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_simd_reinterpret (operands[0], operands[1]);
-+ DONE;
-+})
-+
-+(define_expand "aarch64_reinterpretv4hi<mode>"
-+ [(match_operand:V4HI 0 "register_operand" "")
-+ (match_operand:VDC 1 "register_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_simd_reinterpret (operands[0], operands[1]);
-+ DONE;
-+})
-+
-+(define_expand "aarch64_reinterpretv2si<mode>"
-+ [(match_operand:V2SI 0 "register_operand" "")
-+ (match_operand:VDC 1 "register_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_simd_reinterpret (operands[0], operands[1]);
-+ DONE;
-+})
-+
-+(define_expand "aarch64_reinterpretv2sf<mode>"
-+ [(match_operand:V2SF 0 "register_operand" "")
-+ (match_operand:VDC 1 "register_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_simd_reinterpret (operands[0], operands[1]);
-+ DONE;
-+})
-+
-+(define_expand "aarch64_reinterpretdi<mode>"
-+ [(match_operand:DI 0 "register_operand" "")
-+ (match_operand:VD_RE 1 "register_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_simd_reinterpret (operands[0], operands[1]);
-+ DONE;
-+})
-+
-+(define_expand "aarch64_reinterpretv16qi<mode>"
-+ [(match_operand:V16QI 0 "register_operand" "")
-+ (match_operand:VQ 1 "register_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_simd_reinterpret (operands[0], operands[1]);
-+ DONE;
-+})
-+
-+(define_expand "aarch64_reinterpretv8hi<mode>"
-+ [(match_operand:V8HI 0 "register_operand" "")
-+ (match_operand:VQ 1 "register_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_simd_reinterpret (operands[0], operands[1]);
-+ DONE;
-+})
-+
-+(define_expand "aarch64_reinterpretv4si<mode>"
-+ [(match_operand:V4SI 0 "register_operand" "")
-+ (match_operand:VQ 1 "register_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_simd_reinterpret (operands[0], operands[1]);
-+ DONE;
-+})
-+
-+(define_expand "aarch64_reinterpretv4sf<mode>"
-+ [(match_operand:V4SF 0 "register_operand" "")
-+ (match_operand:VQ 1 "register_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_simd_reinterpret (operands[0], operands[1]);
-+ DONE;
-+})
-+
-+(define_expand "aarch64_reinterpretv2di<mode>"
-+ [(match_operand:V2DI 0 "register_operand" "")
-+ (match_operand:VQ 1 "register_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_simd_reinterpret (operands[0], operands[1]);
-+ DONE;
-+})
-+
-+(define_expand "aarch64_reinterpretv2df<mode>"
-+ [(match_operand:V2DF 0 "register_operand" "")
-+ (match_operand:VQ 1 "register_operand" "")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_simd_reinterpret (operands[0], operands[1]);
-+ DONE;
-+})
-+
-+;; In this insn, operand 1 should be low, and operand 2 the high part of the
-+;; dest vector.
-+
-+(define_insn "*aarch64_combinez<mode>"
-+ [(set (match_operand:<VDBL> 0 "register_operand" "=&w")
-+ (vec_concat:<VDBL>
-+ (match_operand:VDIC 1 "register_operand" "w")
-+ (match_operand:VDIC 2 "aarch64_simd_imm_zero" "Dz")))]
-+ "TARGET_SIMD"
-+ "mov\\t%0.8b, %1.8b"
-+ [(set_attr "simd_type" "simd_move")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_combine<mode>"
-+ [(set (match_operand:<VDBL> 0 "register_operand" "=&w")
-+ (vec_concat:<VDBL> (match_operand:VDC 1 "register_operand" "w")
-+ (match_operand:VDC 2 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "mov\\t%0.d[0], %1.d[0]\;ins\\t%0.d[1], %2.d[0]"
-+ [(set_attr "simd_type" "simd_ins")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; <su><addsub>l<q>.
-+
-+(define_insn "aarch64_<ANY_EXTEND:su><ADDSUB:optab>l2<mode>_internal"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (ADDSUB:<VWIDE> (ANY_EXTEND:<VWIDE> (vec_select:<VHALF>
-+ (match_operand:VQW 1 "register_operand" "w")
-+ (match_operand:VQW 3 "vect_par_cnst_hi_half" "")))
-+ (ANY_EXTEND:<VWIDE> (vec_select:<VHALF>
-+ (match_operand:VQW 2 "register_operand" "w")
-+ (match_dup 3)))))]
-+ "TARGET_SIMD"
-+ "<ANY_EXTEND:su><ADDSUB:optab>l2 %0.<Vwtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_addl")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "aarch64_saddl2<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:VQW 1 "register_operand" "w")
-+ (match_operand:VQW 2 "register_operand" "w")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ emit_insn (gen_aarch64_saddl2<mode>_internal (operands[0], operands[1],
-+ operands[2], p));
-+ DONE;
-+})
-+
-+(define_expand "aarch64_uaddl2<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:VQW 1 "register_operand" "w")
-+ (match_operand:VQW 2 "register_operand" "w")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ emit_insn (gen_aarch64_uaddl2<mode>_internal (operands[0], operands[1],
-+ operands[2], p));
-+ DONE;
-+})
-+
-+(define_expand "aarch64_ssubl2<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:VQW 1 "register_operand" "w")
-+ (match_operand:VQW 2 "register_operand" "w")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ emit_insn (gen_aarch64_ssubl2<mode>_internal (operands[0], operands[1],
-+ operands[2], p));
-+ DONE;
-+})
-+
-+(define_expand "aarch64_usubl2<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:VQW 1 "register_operand" "w")
-+ (match_operand:VQW 2 "register_operand" "w")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ emit_insn (gen_aarch64_usubl2<mode>_internal (operands[0], operands[1],
-+ operands[2], p));
-+ DONE;
-+})
-+
-+(define_insn "aarch64_<ANY_EXTEND:su><ADDSUB:optab>l<mode>"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (ADDSUB:<VWIDE> (ANY_EXTEND:<VWIDE>
-+ (match_operand:VDW 1 "register_operand" "w"))
-+ (ANY_EXTEND:<VWIDE>
-+ (match_operand:VDW 2 "register_operand" "w"))))]
-+ "TARGET_SIMD"
-+ "<ANY_EXTEND:su><ADDSUB:optab>l %0.<Vwtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_addl")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; <su><addsub>w<q>.
-+
-+(define_insn "aarch64_<ANY_EXTEND:su><ADDSUB:optab>w<mode>"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (ADDSUB:<VWIDE> (match_operand:<VWIDE> 1 "register_operand" "w")
-+ (ANY_EXTEND:<VWIDE>
-+ (match_operand:VDW 2 "register_operand" "w"))))]
-+ "TARGET_SIMD"
-+ "<ANY_EXTEND:su><ADDSUB:optab>w\\t%0.<Vwtype>, %1.<Vwtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_addl")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_<ANY_EXTEND:su><ADDSUB:optab>w2<mode>_internal"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (ADDSUB:<VWIDE> (match_operand:<VWIDE> 1 "register_operand" "w")
-+ (ANY_EXTEND:<VWIDE>
-+ (vec_select:<VHALF>
-+ (match_operand:VQW 2 "register_operand" "w")
-+ (match_operand:VQW 3 "vect_par_cnst_hi_half" "")))))]
-+ "TARGET_SIMD"
-+ "<ANY_EXTEND:su><ADDSUB:optab>w2\\t%0.<Vwtype>, %1.<Vwtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_addl")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "aarch64_saddw2<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:<VWIDE> 1 "register_operand" "w")
-+ (match_operand:VQW 2 "register_operand" "w")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ emit_insn (gen_aarch64_saddw2<mode>_internal (operands[0], operands[1],
-+ operands[2], p));
-+ DONE;
-+})
-+
-+(define_expand "aarch64_uaddw2<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:<VWIDE> 1 "register_operand" "w")
-+ (match_operand:VQW 2 "register_operand" "w")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ emit_insn (gen_aarch64_uaddw2<mode>_internal (operands[0], operands[1],
-+ operands[2], p));
-+ DONE;
-+})
-+
-+
-+(define_expand "aarch64_ssubw2<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:<VWIDE> 1 "register_operand" "w")
-+ (match_operand:VQW 2 "register_operand" "w")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ emit_insn (gen_aarch64_ssubw2<mode>_internal (operands[0], operands[1],
-+ operands[2], p));
-+ DONE;
-+})
-+
-+(define_expand "aarch64_usubw2<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:<VWIDE> 1 "register_operand" "w")
-+ (match_operand:VQW 2 "register_operand" "w")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ emit_insn (gen_aarch64_usubw2<mode>_internal (operands[0], operands[1],
-+ operands[2], p));
-+ DONE;
-+})
-+
-+;; <su><r>h<addsub>.
-+
-+(define_insn "aarch64_<sur>h<addsub><mode>"
-+ [(set (match_operand:VQ_S 0 "register_operand" "=w")
-+ (unspec:VQ_S [(match_operand:VQ_S 1 "register_operand" "w")
-+ (match_operand:VQ_S 2 "register_operand" "w")]
-+ HADDSUB))]
-+ "TARGET_SIMD"
-+ "<sur>h<addsub>\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_add")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; <r><addsub>hn<q>.
-+
-+(define_insn "aarch64_<sur><addsub>hn<mode>"
-+ [(set (match_operand:<VNARROWQ> 0 "register_operand" "=w")
-+ (unspec:<VNARROWQ> [(match_operand:VQN 1 "register_operand" "w")
-+ (match_operand:VQN 2 "register_operand" "w")]
-+ ADDSUBHN))]
-+ "TARGET_SIMD"
-+ "<sur><addsub>hn\\t%0.<Vntype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_addn")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_<sur><addsub>hn2<mode>"
-+ [(set (match_operand:<VNARROWQ2> 0 "register_operand" "=w")
-+ (unspec:<VNARROWQ2> [(match_operand:<VNARROWQ> 1 "register_operand" "0")
-+ (match_operand:VQN 2 "register_operand" "w")
-+ (match_operand:VQN 3 "register_operand" "w")]
-+ ADDSUBHN2))]
-+ "TARGET_SIMD"
-+ "<sur><addsub>hn2\\t%0.<V2ntype>, %2.<Vtype>, %3.<Vtype>"
-+ [(set_attr "simd_type" "simd_addn2")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; pmul.
-+
-+(define_insn "aarch64_pmul<mode>"
-+ [(set (match_operand:VB 0 "register_operand" "=w")
-+ (unspec:VB [(match_operand:VB 1 "register_operand" "w")
-+ (match_operand:VB 2 "register_operand" "w")]
-+ UNSPEC_PMUL))]
-+ "TARGET_SIMD"
-+ "pmul\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_mul")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; <su>q<addsub>
-+
-+(define_insn "aarch64_<su_optab><optab><mode>"
-+ [(set (match_operand:VSDQ_I 0 "register_operand" "=w")
-+ (BINQOPS:VSDQ_I (match_operand:VSDQ_I 1 "register_operand" "w")
-+ (match_operand:VSDQ_I 2 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "<su_optab><optab>\\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
-+ [(set_attr "simd_type" "simd_add")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; suqadd and usqadd
-+
-+(define_insn "aarch64_<sur>qadd<mode>"
-+ [(set (match_operand:VSDQ_I 0 "register_operand" "=w")
-+ (unspec:VSDQ_I [(match_operand:VSDQ_I 1 "register_operand" "0")
-+ (match_operand:VSDQ_I 2 "register_operand" "w")]
-+ USSUQADD))]
-+ "TARGET_SIMD"
-+ "<sur>qadd\\t%<v>0<Vmtype>, %<v>2<Vmtype>"
-+ [(set_attr "simd_type" "simd_sat_add")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; sqmovun
-+
-+(define_insn "aarch64_sqmovun<mode>"
-+ [(set (match_operand:<VNARROWQ> 0 "register_operand" "=w")
-+ (unspec:<VNARROWQ> [(match_operand:VSQN_HSDI 1 "register_operand" "w")]
-+ UNSPEC_SQXTUN))]
-+ "TARGET_SIMD"
-+ "sqxtun\\t%<vn2>0<Vmntype>, %<v>1<Vmtype>"
-+ [(set_attr "simd_type" "simd_sat_shiftn_imm")
-+ (set_attr "simd_mode" "<MODE>")]
-+ )
-+
-+;; sqmovn and uqmovn
-+
-+(define_insn "aarch64_<sur>qmovn<mode>"
-+ [(set (match_operand:<VNARROWQ> 0 "register_operand" "=w")
-+ (unspec:<VNARROWQ> [(match_operand:VSQN_HSDI 1 "register_operand" "w")]
-+ SUQMOVN))]
-+ "TARGET_SIMD"
-+ "<sur>qxtn\\t%<vn2>0<Vmntype>, %<v>1<Vmtype>"
-+ [(set_attr "simd_type" "simd_sat_shiftn_imm")
-+ (set_attr "simd_mode" "<MODE>")]
-+ )
-+
-+;; <su>q<absneg>
-+
-+(define_insn "aarch64_s<optab><mode>"
-+ [(set (match_operand:VSDQ_I_BHSI 0 "register_operand" "=w")
-+ (UNQOPS:VSDQ_I_BHSI
-+ (match_operand:VSDQ_I_BHSI 1 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "s<optab>\\t%<v>0<Vmtype>, %<v>1<Vmtype>"
-+ [(set_attr "simd_type" "simd_sat_negabs")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; sq<r>dmulh.
-+
-+(define_insn "aarch64_sq<r>dmulh<mode>"
-+ [(set (match_operand:VSDQ_HSI 0 "register_operand" "=w")
-+ (unspec:VSDQ_HSI
-+ [(match_operand:VSDQ_HSI 1 "register_operand" "w")
-+ (match_operand:VSDQ_HSI 2 "register_operand" "w")]
-+ VQDMULH))]
-+ "TARGET_SIMD"
-+ "sq<r>dmulh\\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
-+ [(set_attr "simd_type" "simd_sat_mul")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; sq<r>dmulh_lane
-+
-+(define_insn "aarch64_sq<r>dmulh_lane<mode>"
-+ [(set (match_operand:VDQHS 0 "register_operand" "=w")
-+ (unspec:VDQHS
-+ [(match_operand:VDQHS 1 "register_operand" "w")
-+ (vec_select:<VEL>
-+ (match_operand:<VCOND> 2 "register_operand" "<vwx>")
-+ (parallel [(match_operand:SI 3 "immediate_operand" "i")]))]
-+ VQDMULH))]
-+ "TARGET_SIMD"
-+ "*
-+ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCOND>mode));
-+ return \"sq<r>dmulh\\t%0.<Vtype>, %1.<Vtype>, %2.<Vetype>[%3]\";"
-+ [(set_attr "simd_type" "simd_sat_mul")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_sq<r>dmulh_laneq<mode>"
-+ [(set (match_operand:VDQHS 0 "register_operand" "=w")
-+ (unspec:VDQHS
-+ [(match_operand:VDQHS 1 "register_operand" "w")
-+ (vec_select:<VEL>
-+ (match_operand:<VCONQ> 2 "register_operand" "<vwx>")
-+ (parallel [(match_operand:SI 3 "immediate_operand" "i")]))]
-+ VQDMULH))]
-+ "TARGET_SIMD"
-+ "*
-+ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCONQ>mode));
-+ return \"sq<r>dmulh\\t%0.<Vtype>, %1.<Vtype>, %2.<Vetype>[%3]\";"
-+ [(set_attr "simd_type" "simd_sat_mul")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_sq<r>dmulh_lane<mode>"
-+ [(set (match_operand:SD_HSI 0 "register_operand" "=w")
-+ (unspec:SD_HSI
-+ [(match_operand:SD_HSI 1 "register_operand" "w")
-+ (vec_select:<VEL>
-+ (match_operand:<VCONQ> 2 "register_operand" "<vwx>")
-+ (parallel [(match_operand:SI 3 "immediate_operand" "i")]))]
-+ VQDMULH))]
-+ "TARGET_SIMD"
-+ "*
-+ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCONQ>mode));
-+ return \"sq<r>dmulh\\t%<v>0, %<v>1, %2.<v>[%3]\";"
-+ [(set_attr "simd_type" "simd_sat_mul")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; vqdml[sa]l
-+
-+(define_insn "aarch64_sqdml<SBINQOPS:as>l<mode>"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (SBINQOPS:<VWIDE>
-+ (match_operand:<VWIDE> 1 "register_operand" "0")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (match_operand:VSD_HSI 2 "register_operand" "w"))
-+ (sign_extend:<VWIDE>
-+ (match_operand:VSD_HSI 3 "register_operand" "w")))
-+ (const_int 1))))]
-+ "TARGET_SIMD"
-+ "sqdml<SBINQOPS:as>l\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %<v>3<Vmtype>"
-+ [(set_attr "simd_type" "simd_sat_mlal")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; vqdml[sa]l_lane
-+
-+(define_insn "aarch64_sqdml<SBINQOPS:as>l_lane<mode>_internal"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (SBINQOPS:<VWIDE>
-+ (match_operand:<VWIDE> 1 "register_operand" "0")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (match_operand:VD_HSI 2 "register_operand" "w"))
-+ (sign_extend:<VWIDE>
-+ (vec_duplicate:VD_HSI
-+ (vec_select:<VEL>
-+ (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (parallel [(match_operand:SI 4 "immediate_operand" "i")])))
-+ ))
-+ (const_int 1))))]
-+ "TARGET_SIMD"
-+ "sqdml<SBINQOPS:as>l\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %3.<Vetype>[%4]"
-+ [(set_attr "simd_type" "simd_sat_mlal")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_sqdml<SBINQOPS:as>l_lane<mode>_internal"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (SBINQOPS:<VWIDE>
-+ (match_operand:<VWIDE> 1 "register_operand" "0")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (match_operand:SD_HSI 2 "register_operand" "w"))
-+ (sign_extend:<VWIDE>
-+ (vec_select:<VEL>
-+ (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (parallel [(match_operand:SI 4 "immediate_operand" "i")])))
-+ )
-+ (const_int 1))))]
-+ "TARGET_SIMD"
-+ "sqdml<SBINQOPS:as>l\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %3.<Vetype>[%4]"
-+ [(set_attr "simd_type" "simd_sat_mlal")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "aarch64_sqdmlal_lane<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:<VWIDE> 1 "register_operand" "0")
-+ (match_operand:VSD_HSI 2 "register_operand" "w")
-+ (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (match_operand:SI 4 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCON>mode) / 2);
-+ emit_insn (gen_aarch64_sqdmlal_lane<mode>_internal (operands[0], operands[1],
-+ operands[2], operands[3],
-+ operands[4]));
-+ DONE;
-+})
-+
-+(define_expand "aarch64_sqdmlal_laneq<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:<VWIDE> 1 "register_operand" "0")
-+ (match_operand:VSD_HSI 2 "register_operand" "w")
-+ (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (match_operand:SI 4 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCON>mode));
-+ emit_insn (gen_aarch64_sqdmlal_lane<mode>_internal (operands[0], operands[1],
-+ operands[2], operands[3],
-+ operands[4]));
-+ DONE;
-+})
-+
-+(define_expand "aarch64_sqdmlsl_lane<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:<VWIDE> 1 "register_operand" "0")
-+ (match_operand:VSD_HSI 2 "register_operand" "w")
-+ (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (match_operand:SI 4 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCON>mode) / 2);
-+ emit_insn (gen_aarch64_sqdmlsl_lane<mode>_internal (operands[0], operands[1],
-+ operands[2], operands[3],
-+ operands[4]));
-+ DONE;
-+})
-+
-+(define_expand "aarch64_sqdmlsl_laneq<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:<VWIDE> 1 "register_operand" "0")
-+ (match_operand:VSD_HSI 2 "register_operand" "w")
-+ (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (match_operand:SI 4 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<VCON>mode));
-+ emit_insn (gen_aarch64_sqdmlsl_lane<mode>_internal (operands[0], operands[1],
-+ operands[2], operands[3],
-+ operands[4]));
-+ DONE;
-+})
-+
-+;; vqdml[sa]l_n
-+
-+(define_insn "aarch64_sqdml<SBINQOPS:as>l_n<mode>"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (SBINQOPS:<VWIDE>
-+ (match_operand:<VWIDE> 1 "register_operand" "0")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (match_operand:VD_HSI 2 "register_operand" "w"))
-+ (sign_extend:<VWIDE>
-+ (vec_duplicate:VD_HSI
-+ (match_operand:<VEL> 3 "register_operand" "w"))))
-+ (const_int 1))))]
-+ "TARGET_SIMD"
-+ "sqdml<SBINQOPS:as>l\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %3.<Vetype>[0]"
-+ [(set_attr "simd_type" "simd_sat_mlal")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; sqdml[as]l2
-+
-+(define_insn "aarch64_sqdml<SBINQOPS:as>l2<mode>_internal"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (SBINQOPS:<VWIDE>
-+ (match_operand:<VWIDE> 1 "register_operand" "0")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (vec_select:<VHALF>
-+ (match_operand:VQ_HSI 2 "register_operand" "w")
-+ (match_operand:VQ_HSI 4 "vect_par_cnst_hi_half" "")))
-+ (sign_extend:<VWIDE>
-+ (vec_select:<VHALF>
-+ (match_operand:VQ_HSI 3 "register_operand" "w")
-+ (match_dup 4))))
-+ (const_int 1))))]
-+ "TARGET_SIMD"
-+ "sqdml<SBINQOPS:as>l2\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %<v>3<Vmtype>"
-+ [(set_attr "simd_type" "simd_sat_mlal")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "aarch64_sqdmlal2<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:<VWIDE> 1 "register_operand" "w")
-+ (match_operand:VQ_HSI 2 "register_operand" "w")
-+ (match_operand:VQ_HSI 3 "register_operand" "w")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ emit_insn (gen_aarch64_sqdmlal2<mode>_internal (operands[0], operands[1],
-+ operands[2], operands[3], p));
-+ DONE;
-+})
-+
-+(define_expand "aarch64_sqdmlsl2<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:<VWIDE> 1 "register_operand" "w")
-+ (match_operand:VQ_HSI 2 "register_operand" "w")
-+ (match_operand:VQ_HSI 3 "register_operand" "w")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ emit_insn (gen_aarch64_sqdmlsl2<mode>_internal (operands[0], operands[1],
-+ operands[2], operands[3], p));
-+ DONE;
-+})
-+
-+;; vqdml[sa]l2_lane
-+
-+(define_insn "aarch64_sqdml<SBINQOPS:as>l2_lane<mode>_internal"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (SBINQOPS:<VWIDE>
-+ (match_operand:<VWIDE> 1 "register_operand" "0")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (vec_select:<VHALF>
-+ (match_operand:VQ_HSI 2 "register_operand" "w")
-+ (match_operand:VQ_HSI 5 "vect_par_cnst_hi_half" "")))
-+ (sign_extend:<VWIDE>
-+ (vec_duplicate:<VHALF>
-+ (vec_select:<VEL>
-+ (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (parallel [(match_operand:SI 4 "immediate_operand" "i")])
-+ ))))
-+ (const_int 1))))]
-+ "TARGET_SIMD"
-+ "sqdml<SBINQOPS:as>l2\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %3.<Vetype>[%4]"
-+ [(set_attr "simd_type" "simd_sat_mlal")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "aarch64_sqdmlal2_lane<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:<VWIDE> 1 "register_operand" "w")
-+ (match_operand:VQ_HSI 2 "register_operand" "w")
-+ (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (match_operand:SI 4 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode) / 2);
-+ emit_insn (gen_aarch64_sqdmlal2_lane<mode>_internal (operands[0], operands[1],
-+ operands[2], operands[3],
-+ operands[4], p));
-+ DONE;
-+})
-+
-+(define_expand "aarch64_sqdmlal2_laneq<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:<VWIDE> 1 "register_operand" "w")
-+ (match_operand:VQ_HSI 2 "register_operand" "w")
-+ (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (match_operand:SI 4 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode));
-+ emit_insn (gen_aarch64_sqdmlal2_lane<mode>_internal (operands[0], operands[1],
-+ operands[2], operands[3],
-+ operands[4], p));
-+ DONE;
-+})
-+
-+(define_expand "aarch64_sqdmlsl2_lane<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:<VWIDE> 1 "register_operand" "w")
-+ (match_operand:VQ_HSI 2 "register_operand" "w")
-+ (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (match_operand:SI 4 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode) / 2);
-+ emit_insn (gen_aarch64_sqdmlsl2_lane<mode>_internal (operands[0], operands[1],
-+ operands[2], operands[3],
-+ operands[4], p));
-+ DONE;
-+})
-+
-+(define_expand "aarch64_sqdmlsl2_laneq<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:<VWIDE> 1 "register_operand" "w")
-+ (match_operand:VQ_HSI 2 "register_operand" "w")
-+ (match_operand:<VCON> 3 "register_operand" "<vwx>")
-+ (match_operand:SI 4 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ aarch64_simd_lane_bounds (operands[4], 0, GET_MODE_NUNITS (<MODE>mode));
-+ emit_insn (gen_aarch64_sqdmlsl2_lane<mode>_internal (operands[0], operands[1],
-+ operands[2], operands[3],
-+ operands[4], p));
-+ DONE;
-+})
-+
-+(define_insn "aarch64_sqdml<SBINQOPS:as>l2_n<mode>_internal"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (SBINQOPS:<VWIDE>
-+ (match_operand:<VWIDE> 1 "register_operand" "0")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (vec_select:<VHALF>
-+ (match_operand:VQ_HSI 2 "register_operand" "w")
-+ (match_operand:VQ_HSI 4 "vect_par_cnst_hi_half" "")))
-+ (sign_extend:<VWIDE>
-+ (vec_duplicate:<VHALF>
-+ (match_operand:<VEL> 3 "register_operand" "w"))))
-+ (const_int 1))))]
-+ "TARGET_SIMD"
-+ "sqdml<SBINQOPS:as>l2\\t%<vw2>0<Vmwtype>, %<v>2<Vmtype>, %3.<Vetype>[0]"
-+ [(set_attr "simd_type" "simd_sat_mlal")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "aarch64_sqdmlal2_n<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:<VWIDE> 1 "register_operand" "w")
-+ (match_operand:VQ_HSI 2 "register_operand" "w")
-+ (match_operand:<VEL> 3 "register_operand" "w")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ emit_insn (gen_aarch64_sqdmlal2_n<mode>_internal (operands[0], operands[1],
-+ operands[2], operands[3],
-+ p));
-+ DONE;
-+})
-+
-+(define_expand "aarch64_sqdmlsl2_n<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:<VWIDE> 1 "register_operand" "w")
-+ (match_operand:VQ_HSI 2 "register_operand" "w")
-+ (match_operand:<VEL> 3 "register_operand" "w")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ emit_insn (gen_aarch64_sqdmlsl2_n<mode>_internal (operands[0], operands[1],
-+ operands[2], operands[3],
-+ p));
-+ DONE;
-+})
-+
-+;; vqdmull
-+
-+(define_insn "aarch64_sqdmull<mode>"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (match_operand:VSD_HSI 1 "register_operand" "w"))
-+ (sign_extend:<VWIDE>
-+ (match_operand:VSD_HSI 2 "register_operand" "w")))
-+ (const_int 1)))]
-+ "TARGET_SIMD"
-+ "sqdmull\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
-+ [(set_attr "simd_type" "simd_sat_mul")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; vqdmull_lane
-+
-+(define_insn "aarch64_sqdmull_lane<mode>_internal"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (match_operand:VD_HSI 1 "register_operand" "w"))
-+ (sign_extend:<VWIDE>
-+ (vec_duplicate:VD_HSI
-+ (vec_select:<VEL>
-+ (match_operand:<VCON> 2 "register_operand" "<vwx>")
-+ (parallel [(match_operand:SI 3 "immediate_operand" "i")])))
-+ ))
-+ (const_int 1)))]
-+ "TARGET_SIMD"
-+ "sqdmull\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %2.<Vetype>[%3]"
-+ [(set_attr "simd_type" "simd_sat_mul")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_sqdmull_lane<mode>_internal"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (match_operand:SD_HSI 1 "register_operand" "w"))
-+ (sign_extend:<VWIDE>
-+ (vec_select:<VEL>
-+ (match_operand:<VCON> 2 "register_operand" "<vwx>")
-+ (parallel [(match_operand:SI 3 "immediate_operand" "i")]))
-+ ))
-+ (const_int 1)))]
-+ "TARGET_SIMD"
-+ "sqdmull\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %2.<Vetype>[%3]"
-+ [(set_attr "simd_type" "simd_sat_mul")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "aarch64_sqdmull_lane<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:VSD_HSI 1 "register_operand" "w")
-+ (match_operand:<VCON> 2 "register_operand" "<vwx>")
-+ (match_operand:SI 3 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCON>mode) / 2);
-+ emit_insn (gen_aarch64_sqdmull_lane<mode>_internal (operands[0], operands[1],
-+ operands[2], operands[3]));
-+ DONE;
-+})
-+
-+(define_expand "aarch64_sqdmull_laneq<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:VD_HSI 1 "register_operand" "w")
-+ (match_operand:<VCON> 2 "register_operand" "<vwx>")
-+ (match_operand:SI 3 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<VCON>mode));
-+ emit_insn (gen_aarch64_sqdmull_lane<mode>_internal
-+ (operands[0], operands[1], operands[2], operands[3]));
-+ DONE;
-+})
-+
-+;; vqdmull_n
-+
-+(define_insn "aarch64_sqdmull_n<mode>"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (match_operand:VD_HSI 1 "register_operand" "w"))
-+ (sign_extend:<VWIDE>
-+ (vec_duplicate:VD_HSI
-+ (match_operand:<VEL> 2 "register_operand" "w")))
-+ )
-+ (const_int 1)))]
-+ "TARGET_SIMD"
-+ "sqdmull\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %2.<Vetype>[0]"
-+ [(set_attr "simd_type" "simd_sat_mul")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; vqdmull2
-+
-+
-+
-+(define_insn "aarch64_sqdmull2<mode>_internal"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (vec_select:<VHALF>
-+ (match_operand:VQ_HSI 1 "register_operand" "w")
-+ (match_operand:VQ_HSI 3 "vect_par_cnst_hi_half" "")))
-+ (sign_extend:<VWIDE>
-+ (vec_select:<VHALF>
-+ (match_operand:VQ_HSI 2 "register_operand" "w")
-+ (match_dup 3)))
-+ )
-+ (const_int 1)))]
-+ "TARGET_SIMD"
-+ "sqdmull2\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
-+ [(set_attr "simd_type" "simd_sat_mul")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "aarch64_sqdmull2<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:VQ_HSI 1 "register_operand" "w")
-+ (match_operand:<VCON> 2 "register_operand" "w")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ emit_insn (gen_aarch64_sqdmull2<mode>_internal (operands[0], operands[1],
-+ operands[2], p));
-+ DONE;
-+})
-+
-+;; vqdmull2_lane
-+
-+(define_insn "aarch64_sqdmull2_lane<mode>_internal"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (vec_select:<VHALF>
-+ (match_operand:VQ_HSI 1 "register_operand" "w")
-+ (match_operand:VQ_HSI 4 "vect_par_cnst_hi_half" "")))
-+ (sign_extend:<VWIDE>
-+ (vec_duplicate:<VHALF>
-+ (vec_select:<VEL>
-+ (match_operand:<VCON> 2 "register_operand" "<vwx>")
-+ (parallel [(match_operand:SI 3 "immediate_operand" "i")])))
-+ ))
-+ (const_int 1)))]
-+ "TARGET_SIMD"
-+ "sqdmull2\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %2.<Vetype>[%3]"
-+ [(set_attr "simd_type" "simd_sat_mul")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "aarch64_sqdmull2_lane<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:VQ_HSI 1 "register_operand" "w")
-+ (match_operand:<VCON> 2 "register_operand" "<vwx>")
-+ (match_operand:SI 3 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<MODE>mode) / 2);
-+ emit_insn (gen_aarch64_sqdmull2_lane<mode>_internal (operands[0], operands[1],
-+ operands[2], operands[3],
-+ p));
-+ DONE;
-+})
-+
-+(define_expand "aarch64_sqdmull2_laneq<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:VQ_HSI 1 "register_operand" "w")
-+ (match_operand:<VCON> 2 "register_operand" "<vwx>")
-+ (match_operand:SI 3 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ aarch64_simd_lane_bounds (operands[3], 0, GET_MODE_NUNITS (<MODE>mode));
-+ emit_insn (gen_aarch64_sqdmull2_lane<mode>_internal (operands[0], operands[1],
-+ operands[2], operands[3],
-+ p));
-+ DONE;
-+})
-+
-+;; vqdmull2_n
-+
-+(define_insn "aarch64_sqdmull2_n<mode>_internal"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (ss_ashift:<VWIDE>
-+ (mult:<VWIDE>
-+ (sign_extend:<VWIDE>
-+ (vec_select:<VHALF>
-+ (match_operand:VQ_HSI 1 "register_operand" "w")
-+ (match_operand:VQ_HSI 3 "vect_par_cnst_hi_half" "")))
-+ (sign_extend:<VWIDE>
-+ (vec_duplicate:<VHALF>
-+ (match_operand:<VEL> 2 "register_operand" "w")))
-+ )
-+ (const_int 1)))]
-+ "TARGET_SIMD"
-+ "sqdmull2\\t%<vw2>0<Vmwtype>, %<v>1<Vmtype>, %2.<Vetype>[0]"
-+ [(set_attr "simd_type" "simd_sat_mul")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "aarch64_sqdmull2_n<mode>"
-+ [(match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (match_operand:VQ_HSI 1 "register_operand" "w")
-+ (match_operand:<VEL> 2 "register_operand" "w")]
-+ "TARGET_SIMD"
-+{
-+ rtx p = aarch64_simd_vect_par_cnst_half (<MODE>mode, true);
-+ emit_insn (gen_aarch64_sqdmull2_n<mode>_internal (operands[0], operands[1],
-+ operands[2], p));
-+ DONE;
-+})
-+
-+;; vshl
-+
-+(define_insn "aarch64_<sur>shl<mode>"
-+ [(set (match_operand:VSDQ_I_DI 0 "register_operand" "=w")
-+ (unspec:VSDQ_I_DI
-+ [(match_operand:VSDQ_I_DI 1 "register_operand" "w")
-+ (match_operand:VSDQ_I_DI 2 "register_operand" "w")]
-+ VSHL))]
-+ "TARGET_SIMD"
-+ "<sur>shl\\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>";
-+ [(set_attr "simd_type" "simd_shift")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+
-+;; vqshl
-+
-+(define_insn "aarch64_<sur>q<r>shl<mode>"
-+ [(set (match_operand:VSDQ_I 0 "register_operand" "=w")
-+ (unspec:VSDQ_I
-+ [(match_operand:VSDQ_I 1 "register_operand" "w")
-+ (match_operand:VSDQ_I 2 "register_operand" "w")]
-+ VQSHL))]
-+ "TARGET_SIMD"
-+ "<sur>q<r>shl\\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>";
-+ [(set_attr "simd_type" "simd_sat_shift")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; vshl_n
-+
-+(define_expand "aarch64_sshl_n<mode>"
-+ [(match_operand:VSDQ_I_DI 0 "register_operand" "=w")
-+ (match_operand:VSDQ_I_DI 1 "register_operand" "w")
-+ (match_operand:SI 2 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ emit_insn (gen_ashl<mode>3 (operands[0], operands[1], operands[2]));
-+ DONE;
-+})
-+
-+(define_expand "aarch64_ushl_n<mode>"
-+ [(match_operand:VSDQ_I_DI 0 "register_operand" "=w")
-+ (match_operand:VSDQ_I_DI 1 "register_operand" "w")
-+ (match_operand:SI 2 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ emit_insn (gen_ashl<mode>3 (operands[0], operands[1], operands[2]));
-+ DONE;
-+})
-+
-+;; vshll_n
-+
-+(define_insn "aarch64_<sur>shll_n<mode>"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (unspec:<VWIDE> [(match_operand:VDW 1 "register_operand" "w")
-+ (match_operand:SI 2 "immediate_operand" "i")]
-+ VSHLL))]
-+ "TARGET_SIMD"
-+ "*
-+ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
-+ aarch64_simd_const_bounds (operands[2], 0, bit_width + 1);
-+ if (INTVAL (operands[2]) == bit_width)
-+ {
-+ return \"shll\\t%0.<Vwtype>, %1.<Vtype>, %2\";
-+ }
-+ else {
-+ return \"<sur>shll\\t%0.<Vwtype>, %1.<Vtype>, %2\";
-+ }"
-+ [(set_attr "simd_type" "simd_shift_imm")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; vshll_high_n
-+
-+(define_insn "aarch64_<sur>shll2_n<mode>"
-+ [(set (match_operand:<VWIDE> 0 "register_operand" "=w")
-+ (unspec:<VWIDE> [(match_operand:VQW 1 "register_operand" "w")
-+ (match_operand:SI 2 "immediate_operand" "i")]
-+ VSHLL))]
-+ "TARGET_SIMD"
-+ "*
-+ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
-+ aarch64_simd_const_bounds (operands[2], 0, bit_width + 1);
-+ if (INTVAL (operands[2]) == bit_width)
-+ {
-+ return \"shll2\\t%0.<Vwtype>, %1.<Vtype>, %2\";
-+ }
-+ else {
-+ return \"<sur>shll2\\t%0.<Vwtype>, %1.<Vtype>, %2\";
-+ }"
-+ [(set_attr "simd_type" "simd_shift_imm")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; vshr_n
-+
-+(define_expand "aarch64_sshr_n<mode>"
-+ [(match_operand:VSDQ_I_DI 0 "register_operand" "=w")
-+ (match_operand:VSDQ_I_DI 1 "register_operand" "w")
-+ (match_operand:SI 2 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ emit_insn (gen_ashr<mode>3 (operands[0], operands[1], operands[2]));
-+ DONE;
-+})
-+
-+(define_expand "aarch64_ushr_n<mode>"
-+ [(match_operand:VSDQ_I_DI 0 "register_operand" "=w")
-+ (match_operand:VSDQ_I_DI 1 "register_operand" "w")
-+ (match_operand:SI 2 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ emit_insn (gen_lshr<mode>3 (operands[0], operands[1], operands[2]));
-+ DONE;
-+})
-+
-+;; vrshr_n
-+
-+(define_insn "aarch64_<sur>shr_n<mode>"
-+ [(set (match_operand:VSDQ_I_DI 0 "register_operand" "=w")
-+ (unspec:VSDQ_I_DI [(match_operand:VSDQ_I_DI 1 "register_operand" "w")
-+ (match_operand:SI 2 "immediate_operand" "i")]
-+ VRSHR_N))]
-+ "TARGET_SIMD"
-+ "*
-+ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
-+ aarch64_simd_const_bounds (operands[2], 1, bit_width + 1);
-+ return \"<sur>shr\\t%<v>0<Vmtype>, %<v>1<Vmtype>, %2\";"
-+ [(set_attr "simd_type" "simd_shift_imm")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; v(r)sra_n
-+
-+(define_insn "aarch64_<sur>sra_n<mode>"
-+ [(set (match_operand:VSDQ_I_DI 0 "register_operand" "=w")
-+ (unspec:VSDQ_I_DI [(match_operand:VSDQ_I_DI 1 "register_operand" "0")
-+ (match_operand:VSDQ_I_DI 2 "register_operand" "w")
-+ (match_operand:SI 3 "immediate_operand" "i")]
-+ VSRA))]
-+ "TARGET_SIMD"
-+ "*
-+ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
-+ aarch64_simd_const_bounds (operands[3], 1, bit_width + 1);
-+ return \"<sur>sra\\t%<v>0<Vmtype>, %<v>2<Vmtype>, %3\";"
-+ [(set_attr "simd_type" "simd_shift_imm_acc")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; vs<lr>i_n
-+
-+(define_insn "aarch64_<sur>s<lr>i_n<mode>"
-+ [(set (match_operand:VSDQ_I_DI 0 "register_operand" "=w")
-+ (unspec:VSDQ_I_DI [(match_operand:VSDQ_I_DI 1 "register_operand" "0")
-+ (match_operand:VSDQ_I_DI 2 "register_operand" "w")
-+ (match_operand:SI 3 "immediate_operand" "i")]
-+ VSLRI))]
-+ "TARGET_SIMD"
-+ "*
-+ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
-+ aarch64_simd_const_bounds (operands[3], 1 - <VSLRI:offsetlr>,
-+ bit_width - <VSLRI:offsetlr> + 1);
-+ return \"s<lr>i\\t%<v>0<Vmtype>, %<v>2<Vmtype>, %3\";"
-+ [(set_attr "simd_type" "simd_shift_imm")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; vqshl(u)
-+
-+(define_insn "aarch64_<sur>qshl<u>_n<mode>"
-+ [(set (match_operand:VSDQ_I 0 "register_operand" "=w")
-+ (unspec:VSDQ_I [(match_operand:VSDQ_I 1 "register_operand" "w")
-+ (match_operand:SI 2 "immediate_operand" "i")]
-+ VQSHL_N))]
-+ "TARGET_SIMD"
-+ "*
-+ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
-+ aarch64_simd_const_bounds (operands[2], 0, bit_width);
-+ return \"<sur>qshl<u>\\t%<v>0<Vmtype>, %<v>1<Vmtype>, %2\";"
-+ [(set_attr "simd_type" "simd_sat_shift_imm")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+
-+;; vq(r)shr(u)n_n
-+
-+(define_insn "aarch64_<sur>q<r>shr<u>n_n<mode>"
-+ [(set (match_operand:<VNARROWQ> 0 "register_operand" "=w")
-+ (unspec:<VNARROWQ> [(match_operand:VSQN_HSDI 1 "register_operand" "w")
-+ (match_operand:SI 2 "immediate_operand" "i")]
-+ VQSHRN_N))]
-+ "TARGET_SIMD"
-+ "*
-+ int bit_width = GET_MODE_UNIT_SIZE (<MODE>mode) * BITS_PER_UNIT;
-+ aarch64_simd_const_bounds (operands[2], 1, bit_width + 1);
-+ return \"<sur>q<r>shr<u>n\\t%<vn2>0<Vmntype>, %<v>1<Vmtype>, %2\";"
-+ [(set_attr "simd_type" "simd_sat_shiftn_imm")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+
-+;; cm(eq|ge|le|lt|gt)
-+
-+(define_insn "aarch64_cm<cmp><mode>"
-+ [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w,w")
-+ (unspec:<V_cmp_result>
-+ [(match_operand:VSDQ_I_DI 1 "register_operand" "w,w")
-+ (match_operand:VSDQ_I_DI 2 "aarch64_simd_reg_or_zero" "w,Z")]
-+ VCMP_S))]
-+ "TARGET_SIMD"
-+ "@
-+ cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>
-+ cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, #0"
-+ [(set_attr "simd_type" "simd_cmp")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; cm(hs|hi|tst)
-+
-+(define_insn "aarch64_cm<cmp><mode>"
-+ [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w")
-+ (unspec:<V_cmp_result>
-+ [(match_operand:VSDQ_I_DI 1 "register_operand" "w")
-+ (match_operand:VSDQ_I_DI 2 "register_operand" "w")]
-+ VCMP_U))]
-+ "TARGET_SIMD"
-+ "cm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
-+ [(set_attr "simd_type" "simd_cmp")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; fcm(eq|ge|le|lt|gt)
-+
-+(define_insn "aarch64_cm<cmp><mode>"
-+ [(set (match_operand:<V_cmp_result> 0 "register_operand" "=w,w")
-+ (unspec:<V_cmp_result>
-+ [(match_operand:VDQF 1 "register_operand" "w,w")
-+ (match_operand:VDQF 2 "aarch64_simd_reg_or_zero" "w,Dz")]
-+ VCMP_S))]
-+ "TARGET_SIMD"
-+ "@
-+ fcm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>
-+ fcm<cmp>\t%<v>0<Vmtype>, %<v>1<Vmtype>, 0"
-+ [(set_attr "simd_type" "simd_fcmp")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; addp
-+
-+(define_insn "aarch64_addp<mode>"
-+ [(set (match_operand:VD_BHSI 0 "register_operand" "=w")
-+ (unspec:VD_BHSI
-+ [(match_operand:VD_BHSI 1 "register_operand" "w")
-+ (match_operand:VD_BHSI 2 "register_operand" "w")]
-+ UNSPEC_ADDP))]
-+ "TARGET_SIMD"
-+ "addp\t%<v>0<Vmtype>, %<v>1<Vmtype>, %<v>2<Vmtype>"
-+ [(set_attr "simd_type" "simd_add")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_addpdi"
-+ [(set (match_operand:DI 0 "register_operand" "=w")
-+ (unspec:DI
-+ [(match_operand:V2DI 1 "register_operand" "w")]
-+ UNSPEC_ADDP))]
-+ "TARGET_SIMD"
-+ "addp\t%d0, %1.2d"
-+ [(set_attr "simd_type" "simd_add")
-+ (set_attr "simd_mode" "DI")]
-+)
-+
-+;; v(max|min)
-+
-+(define_expand "aarch64_<maxmin><mode>"
-+ [(set (match_operand:VDQ_BHSI 0 "register_operand" "=w")
-+ (MAXMIN:VDQ_BHSI (match_operand:VDQ_BHSI 1 "register_operand" "w")
-+ (match_operand:VDQ_BHSI 2 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+{
-+ emit_insn (gen_<maxmin><mode>3 (operands[0], operands[1], operands[2]));
-+ DONE;
-+})
-+
-+
-+(define_insn "aarch64_<fmaxmin><mode>"
-+ [(set (match_operand:VDQF 0 "register_operand" "=w")
-+ (unspec:VDQF [(match_operand:VDQF 1 "register_operand" "w")
-+ (match_operand:VDQF 2 "register_operand" "w")]
-+ FMAXMIN))]
-+ "TARGET_SIMD"
-+ "<fmaxmin>\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_fminmax")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; sqrt
-+
-+(define_insn "sqrt<mode>2"
-+ [(set (match_operand:VDQF 0 "register_operand" "=w")
-+ (sqrt:VDQF (match_operand:VDQF 1 "register_operand" "w")))]
-+ "TARGET_SIMD"
-+ "fsqrt\\t%0.<Vtype>, %1.<Vtype>"
-+ [(set_attr "simd_type" "simd_fsqrt")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_expand "aarch64_sqrt<mode>"
-+ [(match_operand:VDQF 0 "register_operand" "=w")
-+ (match_operand:VDQF 1 "register_operand" "w")]
-+ "TARGET_SIMD"
-+{
-+ emit_insn (gen_sqrt<mode>2 (operands[0], operands[1]));
-+ DONE;
-+})
-+
-+
-+;; Patterns for vector struct loads and stores.
-+
-+(define_insn "vec_load_lanesoi<mode>"
-+ [(set (match_operand:OI 0 "register_operand" "=w")
-+ (unspec:OI [(match_operand:OI 1 "aarch64_simd_struct_operand" "Utv")
-+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
-+ UNSPEC_LD2))]
-+ "TARGET_SIMD"
-+ "ld2\\t{%S0.<Vtype> - %T0.<Vtype>}, %1"
-+ [(set_attr "simd_type" "simd_load2")
-+ (set_attr "simd_mode" "<MODE>")])
-+
-+(define_insn "vec_store_lanesoi<mode>"
-+ [(set (match_operand:OI 0 "aarch64_simd_struct_operand" "=Utv")
-+ (unspec:OI [(match_operand:OI 1 "register_operand" "w")
-+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
-+ UNSPEC_ST2))]
-+ "TARGET_SIMD"
-+ "st2\\t{%S1.<Vtype> - %T1.<Vtype>}, %0"
-+ [(set_attr "simd_type" "simd_store2")
-+ (set_attr "simd_mode" "<MODE>")])
-+
-+(define_insn "vec_load_lanesci<mode>"
-+ [(set (match_operand:CI 0 "register_operand" "=w")
-+ (unspec:CI [(match_operand:CI 1 "aarch64_simd_struct_operand" "Utv")
-+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
-+ UNSPEC_LD3))]
-+ "TARGET_SIMD"
-+ "ld3\\t{%S0.<Vtype> - %U0.<Vtype>}, %1"
-+ [(set_attr "simd_type" "simd_load3")
-+ (set_attr "simd_mode" "<MODE>")])
-+
-+(define_insn "vec_store_lanesci<mode>"
-+ [(set (match_operand:CI 0 "aarch64_simd_struct_operand" "=Utv")
-+ (unspec:CI [(match_operand:CI 1 "register_operand" "w")
-+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
-+ UNSPEC_ST3))]
-+ "TARGET_SIMD"
-+ "st3\\t{%S1.<Vtype> - %U1.<Vtype>}, %0"
-+ [(set_attr "simd_type" "simd_store3")
-+ (set_attr "simd_mode" "<MODE>")])
-+
-+(define_insn "vec_load_lanesxi<mode>"
-+ [(set (match_operand:XI 0 "register_operand" "=w")
-+ (unspec:XI [(match_operand:XI 1 "aarch64_simd_struct_operand" "Utv")
-+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
-+ UNSPEC_LD4))]
-+ "TARGET_SIMD"
-+ "ld4\\t{%S0.<Vtype> - %V0.<Vtype>}, %1"
-+ [(set_attr "simd_type" "simd_load4")
-+ (set_attr "simd_mode" "<MODE>")])
-+
-+(define_insn "vec_store_lanesxi<mode>"
-+ [(set (match_operand:XI 0 "aarch64_simd_struct_operand" "=Utv")
-+ (unspec:XI [(match_operand:XI 1 "register_operand" "w")
-+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
-+ UNSPEC_ST4))]
-+ "TARGET_SIMD"
-+ "st4\\t{%S1.<Vtype> - %V1.<Vtype>}, %0"
-+ [(set_attr "simd_type" "simd_store4")
-+ (set_attr "simd_mode" "<MODE>")])
-+
-+;; Reload patterns for AdvSIMD register list operands.
-+
-+(define_expand "mov<mode>"
-+ [(set (match_operand:VSTRUCT 0 "aarch64_simd_nonimmediate_operand" "")
-+ (match_operand:VSTRUCT 1 "aarch64_simd_general_operand" ""))]
-+ "TARGET_SIMD"
-+{
-+ if (can_create_pseudo_p ())
-+ {
-+ if (GET_CODE (operands[0]) != REG)
-+ operands[1] = force_reg (<MODE>mode, operands[1]);
-+ }
-+})
-+
-+(define_insn "*aarch64_mov<mode>"
-+ [(set (match_operand:VSTRUCT 0 "aarch64_simd_nonimmediate_operand" "=w,Utv,w")
-+ (match_operand:VSTRUCT 1 "aarch64_simd_general_operand" " w,w,Utv"))]
-+ "TARGET_SIMD
-+ && (register_operand (operands[0], <MODE>mode)
-+ || register_operand (operands[1], <MODE>mode))"
-+
-+{
-+ switch (which_alternative)
-+ {
-+ case 0: return "#";
-+ case 1: return "st1\\t{%S1.16b - %<Vendreg>1.16b}, %0";
-+ case 2: return "ld1\\t{%S0.16b - %<Vendreg>0.16b}, %1";
-+ default: gcc_unreachable ();
-+ }
-+}
-+ [(set_attr "simd_type" "simd_move,simd_store<nregs>,simd_load<nregs>")
-+ (set (attr "length") (symbol_ref "aarch64_simd_attr_length_move (insn)"))
-+ (set_attr "simd_mode" "<MODE>")])
-+
-+(define_split
-+ [(set (match_operand:OI 0 "register_operand" "")
-+ (match_operand:OI 1 "register_operand" ""))]
-+ "TARGET_SIMD && reload_completed"
-+ [(set (match_dup 0) (match_dup 1))
-+ (set (match_dup 2) (match_dup 3))]
-+{
-+ int rdest = REGNO (operands[0]);
-+ int rsrc = REGNO (operands[1]);
-+ rtx dest[2], src[2];
-+
-+ dest[0] = gen_rtx_REG (TFmode, rdest);
-+ src[0] = gen_rtx_REG (TFmode, rsrc);
-+ dest[1] = gen_rtx_REG (TFmode, rdest + 1);
-+ src[1] = gen_rtx_REG (TFmode, rsrc + 1);
-+
-+ aarch64_simd_disambiguate_copy (operands, dest, src, 2);
-+})
-+
-+(define_split
-+ [(set (match_operand:CI 0 "register_operand" "")
-+ (match_operand:CI 1 "register_operand" ""))]
-+ "TARGET_SIMD && reload_completed"
-+ [(set (match_dup 0) (match_dup 1))
-+ (set (match_dup 2) (match_dup 3))
-+ (set (match_dup 4) (match_dup 5))]
-+{
-+ int rdest = REGNO (operands[0]);
-+ int rsrc = REGNO (operands[1]);
-+ rtx dest[3], src[3];
-+
-+ dest[0] = gen_rtx_REG (TFmode, rdest);
-+ src[0] = gen_rtx_REG (TFmode, rsrc);
-+ dest[1] = gen_rtx_REG (TFmode, rdest + 1);
-+ src[1] = gen_rtx_REG (TFmode, rsrc + 1);
-+ dest[2] = gen_rtx_REG (TFmode, rdest + 2);
-+ src[2] = gen_rtx_REG (TFmode, rsrc + 2);
-+
-+ aarch64_simd_disambiguate_copy (operands, dest, src, 3);
-+})
-+
-+(define_split
-+ [(set (match_operand:XI 0 "register_operand" "")
-+ (match_operand:XI 1 "register_operand" ""))]
-+ "TARGET_SIMD && reload_completed"
-+ [(set (match_dup 0) (match_dup 1))
-+ (set (match_dup 2) (match_dup 3))
-+ (set (match_dup 4) (match_dup 5))
-+ (set (match_dup 6) (match_dup 7))]
-+{
-+ int rdest = REGNO (operands[0]);
-+ int rsrc = REGNO (operands[1]);
-+ rtx dest[4], src[4];
-+
-+ dest[0] = gen_rtx_REG (TFmode, rdest);
-+ src[0] = gen_rtx_REG (TFmode, rsrc);
-+ dest[1] = gen_rtx_REG (TFmode, rdest + 1);
-+ src[1] = gen_rtx_REG (TFmode, rsrc + 1);
-+ dest[2] = gen_rtx_REG (TFmode, rdest + 2);
-+ src[2] = gen_rtx_REG (TFmode, rsrc + 2);
-+ dest[3] = gen_rtx_REG (TFmode, rdest + 3);
-+ src[3] = gen_rtx_REG (TFmode, rsrc + 3);
-+
-+ aarch64_simd_disambiguate_copy (operands, dest, src, 4);
-+})
-+
-+(define_insn "aarch64_ld2<mode>_dreg"
-+ [(set (match_operand:OI 0 "register_operand" "=w")
-+ (subreg:OI
-+ (vec_concat:<VRL2>
-+ (vec_concat:<VDBL>
-+ (unspec:VD [(match_operand:TI 1 "aarch64_simd_struct_operand" "Utv")]
-+ UNSPEC_LD2)
-+ (vec_duplicate:VD (const_int 0)))
-+ (vec_concat:<VDBL>
-+ (unspec:VD [(match_dup 1)]
-+ UNSPEC_LD2)
-+ (vec_duplicate:VD (const_int 0)))) 0))]
-+ "TARGET_SIMD"
-+ "ld2\\t{%S0.<Vtype> - %T0.<Vtype>}, %1"
-+ [(set_attr "simd_type" "simd_load2")
-+ (set_attr "simd_mode" "<MODE>")])
-+
-+(define_insn "aarch64_ld2<mode>_dreg"
-+ [(set (match_operand:OI 0 "register_operand" "=w")
-+ (subreg:OI
-+ (vec_concat:<VRL2>
-+ (vec_concat:<VDBL>
-+ (unspec:DX [(match_operand:TI 1 "aarch64_simd_struct_operand" "Utv")]
-+ UNSPEC_LD2)
-+ (const_int 0))
-+ (vec_concat:<VDBL>
-+ (unspec:DX [(match_dup 1)]
-+ UNSPEC_LD2)
-+ (const_int 0))) 0))]
-+ "TARGET_SIMD"
-+ "ld1\\t{%S0.1d - %T0.1d}, %1"
-+ [(set_attr "simd_type" "simd_load2")
-+ (set_attr "simd_mode" "<MODE>")])
-+
-+(define_insn "aarch64_ld3<mode>_dreg"
-+ [(set (match_operand:CI 0 "register_operand" "=w")
-+ (subreg:CI
-+ (vec_concat:<VRL3>
-+ (vec_concat:<VRL2>
-+ (vec_concat:<VDBL>
-+ (unspec:VD [(match_operand:EI 1 "aarch64_simd_struct_operand" "Utv")]
-+ UNSPEC_LD3)
-+ (vec_duplicate:VD (const_int 0)))
-+ (vec_concat:<VDBL>
-+ (unspec:VD [(match_dup 1)]
-+ UNSPEC_LD3)
-+ (vec_duplicate:VD (const_int 0))))
-+ (vec_concat:<VDBL>
-+ (unspec:VD [(match_dup 1)]
-+ UNSPEC_LD3)
-+ (vec_duplicate:VD (const_int 0)))) 0))]
-+ "TARGET_SIMD"
-+ "ld3\\t{%S0.<Vtype> - %U0.<Vtype>}, %1"
-+ [(set_attr "simd_type" "simd_load3")
-+ (set_attr "simd_mode" "<MODE>")])
-+
-+(define_insn "aarch64_ld3<mode>_dreg"
-+ [(set (match_operand:CI 0 "register_operand" "=w")
-+ (subreg:CI
-+ (vec_concat:<VRL3>
-+ (vec_concat:<VRL2>
-+ (vec_concat:<VDBL>
-+ (unspec:DX [(match_operand:EI 1 "aarch64_simd_struct_operand" "Utv")]
-+ UNSPEC_LD3)
-+ (const_int 0))
-+ (vec_concat:<VDBL>
-+ (unspec:DX [(match_dup 1)]
-+ UNSPEC_LD3)
-+ (const_int 0)))
-+ (vec_concat:<VDBL>
-+ (unspec:DX [(match_dup 1)]
-+ UNSPEC_LD3)
-+ (const_int 0))) 0))]
-+ "TARGET_SIMD"
-+ "ld1\\t{%S0.1d - %U0.1d}, %1"
-+ [(set_attr "simd_type" "simd_load3")
-+ (set_attr "simd_mode" "<MODE>")])
-+
-+(define_insn "aarch64_ld4<mode>_dreg"
-+ [(set (match_operand:XI 0 "register_operand" "=w")
-+ (subreg:XI
-+ (vec_concat:<VRL4>
-+ (vec_concat:<VRL2>
-+ (vec_concat:<VDBL>
-+ (unspec:VD [(match_operand:OI 1 "aarch64_simd_struct_operand" "Utv")]
-+ UNSPEC_LD4)
-+ (vec_duplicate:VD (const_int 0)))
-+ (vec_concat:<VDBL>
-+ (unspec:VD [(match_dup 1)]
-+ UNSPEC_LD4)
-+ (vec_duplicate:VD (const_int 0))))
-+ (vec_concat:<VRL2>
-+ (vec_concat:<VDBL>
-+ (unspec:VD [(match_dup 1)]
-+ UNSPEC_LD4)
-+ (vec_duplicate:VD (const_int 0)))
-+ (vec_concat:<VDBL>
-+ (unspec:VD [(match_dup 1)]
-+ UNSPEC_LD4)
-+ (vec_duplicate:VD (const_int 0))))) 0))]
-+ "TARGET_SIMD"
-+ "ld4\\t{%S0.<Vtype> - %V0.<Vtype>}, %1"
-+ [(set_attr "simd_type" "simd_load4")
-+ (set_attr "simd_mode" "<MODE>")])
-+
-+(define_insn "aarch64_ld4<mode>_dreg"
-+ [(set (match_operand:XI 0 "register_operand" "=w")
-+ (subreg:XI
-+ (vec_concat:<VRL4>
-+ (vec_concat:<VRL2>
-+ (vec_concat:<VDBL>
-+ (unspec:DX [(match_operand:OI 1 "aarch64_simd_struct_operand" "Utv")]
-+ UNSPEC_LD4)
-+ (const_int 0))
-+ (vec_concat:<VDBL>
-+ (unspec:DX [(match_dup 1)]
-+ UNSPEC_LD4)
-+ (const_int 0)))
-+ (vec_concat:<VRL2>
-+ (vec_concat:<VDBL>
-+ (unspec:DX [(match_dup 1)]
-+ UNSPEC_LD4)
-+ (const_int 0))
-+ (vec_concat:<VDBL>
-+ (unspec:DX [(match_dup 1)]
-+ UNSPEC_LD4)
-+ (const_int 0)))) 0))]
-+ "TARGET_SIMD"
-+ "ld1\\t{%S0.1d - %V0.1d}, %1"
-+ [(set_attr "simd_type" "simd_load4")
-+ (set_attr "simd_mode" "<MODE>")])
-+
-+(define_expand "aarch64_ld<VSTRUCT:nregs><VDC:mode>"
-+ [(match_operand:VSTRUCT 0 "register_operand" "=w")
-+ (match_operand:DI 1 "register_operand" "r")
-+ (unspec:VDC [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
-+ "TARGET_SIMD"
-+{
-+ enum machine_mode mode = <VSTRUCT:VSTRUCT_DREG>mode;
-+ rtx mem = gen_rtx_MEM (mode, operands[1]);
-+
-+ emit_insn (gen_aarch64_ld<VSTRUCT:nregs><VDC:mode>_dreg (operands[0], mem));
-+ DONE;
-+})
-+
-+(define_expand "aarch64_ld<VSTRUCT:nregs><VQ:mode>"
-+ [(match_operand:VSTRUCT 0 "register_operand" "=w")
-+ (match_operand:DI 1 "register_operand" "r")
-+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
-+ "TARGET_SIMD"
-+{
-+ enum machine_mode mode = <VSTRUCT:MODE>mode;
-+ rtx mem = gen_rtx_MEM (mode, operands[1]);
-+
-+ emit_insn (gen_vec_load_lanes<VSTRUCT:mode><VQ:mode> (operands[0], mem));
-+ DONE;
-+})
-+
-+;; Expanders for builtins to extract vector registers from large
-+;; opaque integer modes.
-+
-+;; D-register list.
-+
-+(define_expand "aarch64_get_dreg<VSTRUCT:mode><VDC:mode>"
-+ [(match_operand:VDC 0 "register_operand" "=w")
-+ (match_operand:VSTRUCT 1 "register_operand" "w")
-+ (match_operand:SI 2 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ int part = INTVAL (operands[2]);
-+ rtx temp = gen_reg_rtx (<VDC:VDBL>mode);
-+ int offset = part * 16;
-+
-+ emit_move_insn (temp, gen_rtx_SUBREG (<VDC:VDBL>mode, operands[1], offset));
-+ emit_move_insn (operands[0], gen_lowpart (<VDC:MODE>mode, temp));
-+ DONE;
-+})
-+
-+;; Q-register list.
-+
-+(define_expand "aarch64_get_qreg<VSTRUCT:mode><VQ:mode>"
-+ [(match_operand:VQ 0 "register_operand" "=w")
-+ (match_operand:VSTRUCT 1 "register_operand" "w")
-+ (match_operand:SI 2 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ int part = INTVAL (operands[2]);
-+ int offset = part * 16;
-+
-+ emit_move_insn (operands[0],
-+ gen_rtx_SUBREG (<VQ:MODE>mode, operands[1], offset));
-+ DONE;
-+})
-+
-+;; Permuted-store expanders for neon intrinsics.
-+
-+;; Permute instructions
-+
-+;; vec_perm support
-+
-+(define_expand "vec_perm_const<mode>"
-+ [(match_operand:VALL 0 "register_operand")
-+ (match_operand:VALL 1 "register_operand")
-+ (match_operand:VALL 2 "register_operand")
-+ (match_operand:<V_cmp_result> 3)]
-+ "TARGET_SIMD"
-+{
-+ if (aarch64_expand_vec_perm_const (operands[0], operands[1],
-+ operands[2], operands[3]))
-+ DONE;
-+ else
-+ FAIL;
-+})
-+
-+(define_expand "vec_perm<mode>"
-+ [(match_operand:VB 0 "register_operand")
-+ (match_operand:VB 1 "register_operand")
-+ (match_operand:VB 2 "register_operand")
-+ (match_operand:VB 3 "register_operand")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_expand_vec_perm (operands[0], operands[1],
-+ operands[2], operands[3]);
-+ DONE;
-+})
-+
-+(define_insn "aarch64_tbl1<mode>"
-+ [(set (match_operand:VB 0 "register_operand" "=w")
-+ (unspec:VB [(match_operand:V16QI 1 "register_operand" "w")
-+ (match_operand:VB 2 "register_operand" "w")]
-+ UNSPEC_TBL))]
-+ "TARGET_SIMD"
-+ "tbl\\t%0.<Vtype>, {%1.16b}, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_tbl")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+;; Two source registers.
-+
-+(define_insn "aarch64_tbl2v16qi"
-+ [(set (match_operand:V16QI 0 "register_operand" "=w")
-+ (unspec:V16QI [(match_operand:OI 1 "register_operand" "w")
-+ (match_operand:V16QI 2 "register_operand" "w")]
-+ UNSPEC_TBL))]
-+ "TARGET_SIMD"
-+ "tbl\\t%0.16b, {%S1.16b - %T1.16b}, %2.16b"
-+ [(set_attr "simd_type" "simd_tbl")
-+ (set_attr "simd_mode" "V16QI")]
-+)
-+
-+(define_insn_and_split "aarch64_combinev16qi"
-+ [(set (match_operand:OI 0 "register_operand" "=w")
-+ (unspec:OI [(match_operand:V16QI 1 "register_operand" "w")
-+ (match_operand:V16QI 2 "register_operand" "w")]
-+ UNSPEC_CONCAT))]
-+ "TARGET_SIMD"
-+ "#"
-+ "&& reload_completed"
-+ [(const_int 0)]
-+{
-+ aarch64_split_combinev16qi (operands);
-+ DONE;
-+})
-+
-+(define_insn "aarch64_<PERMUTE:perm_insn><PERMUTE:perm_hilo><mode>"
-+ [(set (match_operand:VALL 0 "register_operand" "=w")
-+ (unspec:VALL [(match_operand:VALL 1 "register_operand" "w")
-+ (match_operand:VALL 2 "register_operand" "w")]
-+ PERMUTE))]
-+ "TARGET_SIMD"
-+ "<PERMUTE:perm_insn><PERMUTE:perm_hilo>\\t%0.<Vtype>, %1.<Vtype>, %2.<Vtype>"
-+ [(set_attr "simd_type" "simd_<PERMUTE:perm_insn>")
-+ (set_attr "simd_mode" "<MODE>")]
-+)
-+
-+(define_insn "aarch64_st2<mode>_dreg"
-+ [(set (match_operand:TI 0 "aarch64_simd_struct_operand" "=Utv")
-+ (unspec:TI [(match_operand:OI 1 "register_operand" "w")
-+ (unspec:VD [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
-+ UNSPEC_ST2))]
-+ "TARGET_SIMD"
-+ "st2\\t{%S1.<Vtype> - %T1.<Vtype>}, %0"
-+ [(set_attr "simd_type" "simd_store2")
-+ (set_attr "simd_mode" "<MODE>")])
-+
-+(define_insn "aarch64_st2<mode>_dreg"
-+ [(set (match_operand:TI 0 "aarch64_simd_struct_operand" "=Utv")
-+ (unspec:TI [(match_operand:OI 1 "register_operand" "w")
-+ (unspec:DX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
-+ UNSPEC_ST2))]
-+ "TARGET_SIMD"
-+ "st1\\t{%S1.1d - %T1.1d}, %0"
-+ [(set_attr "simd_type" "simd_store2")
-+ (set_attr "simd_mode" "<MODE>")])
-+
-+(define_insn "aarch64_st3<mode>_dreg"
-+ [(set (match_operand:EI 0 "aarch64_simd_struct_operand" "=Utv")
-+ (unspec:EI [(match_operand:CI 1 "register_operand" "w")
-+ (unspec:VD [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
-+ UNSPEC_ST3))]
-+ "TARGET_SIMD"
-+ "st3\\t{%S1.<Vtype> - %U1.<Vtype>}, %0"
-+ [(set_attr "simd_type" "simd_store3")
-+ (set_attr "simd_mode" "<MODE>")])
-+
-+(define_insn "aarch64_st3<mode>_dreg"
-+ [(set (match_operand:EI 0 "aarch64_simd_struct_operand" "=Utv")
-+ (unspec:EI [(match_operand:CI 1 "register_operand" "w")
-+ (unspec:DX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
-+ UNSPEC_ST3))]
-+ "TARGET_SIMD"
-+ "st1\\t{%S1.1d - %U1.1d}, %0"
-+ [(set_attr "simd_type" "simd_store3")
-+ (set_attr "simd_mode" "<MODE>")])
-+
-+(define_insn "aarch64_st4<mode>_dreg"
-+ [(set (match_operand:OI 0 "aarch64_simd_struct_operand" "=Utv")
-+ (unspec:OI [(match_operand:XI 1 "register_operand" "w")
-+ (unspec:VD [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
-+ UNSPEC_ST4))]
-+ "TARGET_SIMD"
-+ "st4\\t{%S1.<Vtype> - %V1.<Vtype>}, %0"
-+ [(set_attr "simd_type" "simd_store4")
-+ (set_attr "simd_mode" "<MODE>")])
-+
-+(define_insn "aarch64_st4<mode>_dreg"
-+ [(set (match_operand:OI 0 "aarch64_simd_struct_operand" "=Utv")
-+ (unspec:OI [(match_operand:XI 1 "register_operand" "w")
-+ (unspec:DX [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
-+ UNSPEC_ST4))]
-+ "TARGET_SIMD"
-+ "st1\\t{%S1.1d - %V1.1d}, %0"
-+ [(set_attr "simd_type" "simd_store4")
-+ (set_attr "simd_mode" "<MODE>")])
-+
-+(define_expand "aarch64_st<VSTRUCT:nregs><VDC:mode>"
-+ [(match_operand:DI 0 "register_operand" "r")
-+ (match_operand:VSTRUCT 1 "register_operand" "w")
-+ (unspec:VDC [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
-+ "TARGET_SIMD"
-+{
-+ enum machine_mode mode = <VSTRUCT:VSTRUCT_DREG>mode;
-+ rtx mem = gen_rtx_MEM (mode, operands[0]);
-+
-+ emit_insn (gen_aarch64_st<VSTRUCT:nregs><VDC:mode>_dreg (mem, operands[1]));
-+ DONE;
-+})
-+
-+(define_expand "aarch64_st<VSTRUCT:nregs><VQ:mode>"
-+ [(match_operand:DI 0 "register_operand" "r")
-+ (match_operand:VSTRUCT 1 "register_operand" "w")
-+ (unspec:VQ [(const_int 0)] UNSPEC_VSTRUCTDUMMY)]
-+ "TARGET_SIMD"
-+{
-+ enum machine_mode mode = <VSTRUCT:MODE>mode;
-+ rtx mem = gen_rtx_MEM (mode, operands[0]);
-+
-+ emit_insn (gen_vec_store_lanes<VSTRUCT:mode><VQ:mode> (mem, operands[1]));
-+ DONE;
-+})
-+
-+;; Expander for builtins to insert vector registers into large
-+;; opaque integer modes.
-+
-+;; Q-register list. We don't need a D-reg inserter as we zero
-+;; extend them in arm_neon.h and insert the resulting Q-regs.
-+
-+(define_expand "aarch64_set_qreg<VSTRUCT:mode><VQ:mode>"
-+ [(match_operand:VSTRUCT 0 "register_operand" "+w")
-+ (match_operand:VSTRUCT 1 "register_operand" "0")
-+ (match_operand:VQ 2 "register_operand" "w")
-+ (match_operand:SI 3 "immediate_operand" "i")]
-+ "TARGET_SIMD"
-+{
-+ int part = INTVAL (operands[3]);
-+ int offset = part * 16;
-+
-+ emit_move_insn (operands[0], operands[1]);
-+ emit_move_insn (gen_rtx_SUBREG (<VQ:MODE>mode, operands[0], offset),
-+ operands[2]);
-+ DONE;
-+})
-+
-+;; Standard pattern name vec_init<mode>.
-+
-+(define_expand "vec_init<mode>"
-+ [(match_operand:VALL 0 "register_operand" "")
-+ (match_operand 1 "" "")]
-+ "TARGET_SIMD"
-+{
-+ aarch64_expand_vector_init (operands[0], operands[1]);
-+ DONE;
-+})
-+
-+(define_insn "*aarch64_simd_ld1r<mode>"
-+ [(set (match_operand:VALLDI 0 "register_operand" "=w")
-+ (vec_duplicate:VALLDI
-+ (match_operand:<VEL> 1 "aarch64_simd_struct_operand" "Utv")))]
-+ "TARGET_SIMD"
-+ "ld1r\\t{%0.<Vtype>}, %1"
-+ [(set_attr "simd_type" "simd_load1r")
-+ (set_attr "simd_mode" "<MODE>")])
---- a/src/gcc/config/aarch64/aarch64-tune.md
-+++ b/src/gcc/config/aarch64/aarch64-tune.md
-@@ -0,0 +1,5 @@
-+;; -*- buffer-read-only: t -*-
-+;; Generated automatically by gentune.sh from aarch64-cores.def
-+(define_attr "tune"
-+ "large,small"
-+ (const (symbol_ref "((enum attr_tune) aarch64_tune)")))
--- a/src/gcc/config/aarch64/arm_neon.h
+++ b/src/gcc/config/aarch64/arm_neon.h
@@ -0,0 +1,25535 @@
@@ -50619,80 +51639,155 @@
+
+LIB1ASMSRC = aarch64/lib1funcs.asm
+LIB1ASMFUNCS = _aarch64_sync_cache_range
---- a/src/gcc/config/arm/arm1020e.md
-+++ b/src/gcc/config/arm/arm1020e.md
-@@ -66,13 +66,13 @@
- ;; ALU operations with no shifted operand
- (define_insn_reservation "1020alu_op" 1
- (and (eq_attr "tune" "arm1020e,arm1022e")
-- (eq_attr "type" "alu"))
-+ (eq_attr "type" "alu_reg,simple_alu_imm"))
- "1020a_e,1020a_m,1020a_w")
+--- a/src/gcc/config/alpha/alpha.c
++++ b/src/gcc/config/alpha/alpha.c
+@@ -2617,6 +2617,7 @@
+ cmp_mode = cmp_mode == DImode ? DFmode : DImode;
+ op0 = gen_lowpart (cmp_mode, tem);
+ op1 = CONST0_RTX (cmp_mode);
++ cmp = gen_rtx_fmt_ee (code, VOIDmode, op0, op1);
+ local_fast_math = 1;
+ }
- ;; ALU operations with a shift-by-constant operand
- (define_insn_reservation "1020alu_shift_op" 1
- (and (eq_attr "tune" "arm1020e,arm1022e")
-- (eq_attr "type" "alu_shift"))
-+ (eq_attr "type" "simple_alu_shift,alu_shift"))
- "1020a_e,1020a_m,1020a_w")
+@@ -2658,12 +2659,12 @@
+ break;
- ;; ALU operations with a shift-by-register operand
-@@ -284,7 +284,7 @@
+ case GE: case GT: case GEU: case GTU:
+- /* These must be swapped. */
+- if (op1 != CONST0_RTX (cmp_mode))
+- {
+- code = swap_condition (code);
+- tem = op0, op0 = op1, op1 = tem;
+- }
++ /* These normally need swapping, but for integer zero we have
++ special patterns that recognize swapped operands. */
++ if (cmp_mode == DImode && op1 == const0_rtx)
++ break;
++ code = swap_condition (code);
++ tem = op0, op0 = op1, op1 = tem;
+ break;
- (define_insn_reservation "v10_fmul" 6
- (and (eq_attr "vfp10" "yes")
-- (eq_attr "type" "fmuls,fmacs,fmuld,fmacd"))
-+ (eq_attr "type" "fmuls,fmacs,ffmas,fmuld,fmacd,ffmad"))
- "1020a_e+v10_fmac*2")
+ default:
+@@ -3025,12 +3026,9 @@
+ operands[1] = op1;
+ out = gen_reg_rtx (DImode);
+
+- /* What's actually returned is -1,0,1, not a proper boolean value,
+- so use an EXPR_LIST as with a generic libcall instead of a
+- comparison type expression. */
+- note = gen_rtx_EXPR_LIST (VOIDmode, op1, NULL_RTX);
+- note = gen_rtx_EXPR_LIST (VOIDmode, op0, note);
+- note = gen_rtx_EXPR_LIST (VOIDmode, func, note);
++ /* What's actually returned is -1,0,1, not a proper boolean value. */
++ note = gen_rtx_fmt_ee (cmp_code, VOIDmode, op0, op1);
++ note = gen_rtx_UNSPEC (DImode, gen_rtvec (1, note), UNSPEC_XFLT_COMPARE);
+ alpha_emit_xfloating_libcall (func, out, operands, 2, note);
+
+ return out;
+--- a/src/gcc/config/alpha/alpha.md
++++ b/src/gcc/config/alpha/alpha.md
+@@ -25,6 +25,7 @@
+ ;; Uses of UNSPEC in this file:
- (define_insn_reservation "v10_fdivs" 18
---- a/src/gcc/config/arm/arm1026ejs.md
-+++ b/src/gcc/config/arm/arm1026ejs.md
-@@ -66,13 +66,13 @@
- ;; ALU operations with no shifted operand
- (define_insn_reservation "alu_op" 1
- (and (eq_attr "tune" "arm1026ejs")
-- (eq_attr "type" "alu"))
-+ (eq_attr "type" "alu_reg,simple_alu_imm"))
- "a_e,a_m,a_w")
+ (define_c_enum "unspec" [
++ UNSPEC_XFLT_COMPARE
+ UNSPEC_ARG_HOME
+ UNSPEC_LDGP1
+ UNSPEC_INSXH
+--- a/src/gcc/config/arm/arm-fixed.md
++++ b/src/gcc/config/arm/arm-fixed.md
+@@ -374,6 +374,8 @@
+ "TARGET_32BIT && arm_arch6"
+ "ssat%?\\t%0, #16, %2%S1"
+ [(set_attr "predicable" "yes")
++ (set_attr "insn" "sat")
++ (set_attr "shift" "1")
+ (set_attr "type" "alu_shift")])
- ;; ALU operations with a shift-by-constant operand
- (define_insn_reservation "alu_shift_op" 1
- (and (eq_attr "tune" "arm1026ejs")
-- (eq_attr "type" "alu_shift"))
-+ (eq_attr "type" "simple_alu_shift,alu_shift"))
- "a_e,a_m,a_w")
+ (define_insn "arm_usatsihi"
+@@ -381,4 +383,5 @@
+ (us_truncate:HI (match_operand:SI 1 "s_register_operand")))]
+ "TARGET_INT_SIMD"
+ "usat%?\\t%0, #16, %1"
+- [(set_attr "predicable" "yes")])
++ [(set_attr "predicable" "yes")
++ (set_attr "insn" "sat")])
+--- a/src/gcc/config/arm/arm-protos.h
++++ b/src/gcc/config/arm/arm-protos.h
+@@ -49,6 +49,7 @@
+ extern bool arm_modes_tieable_p (enum machine_mode, enum machine_mode);
+ extern int const_ok_for_arm (HOST_WIDE_INT);
+ extern int const_ok_for_op (HOST_WIDE_INT, enum rtx_code);
++extern int const_ok_for_dimode_op (HOST_WIDE_INT, enum rtx_code);
+ extern int arm_split_constant (RTX_CODE, enum machine_mode, rtx,
+ HOST_WIDE_INT, rtx, rtx, int);
+ extern RTX_CODE arm_canonicalize_comparison (RTX_CODE, rtx *, rtx *);
+@@ -101,12 +102,14 @@
+ extern int arm_no_early_alu_shift_dep (rtx, rtx);
+ extern int arm_no_early_alu_shift_value_dep (rtx, rtx);
+ extern int arm_no_early_mul_dep (rtx, rtx);
++extern int arm_mac_accumulator_is_result (rtx, rtx);
+ extern int arm_mac_accumulator_is_mul_result (rtx, rtx);
- ;; ALU operations with a shift-by-register operand
---- a/src/gcc/config/arm/arm1136jfs.md
-+++ b/src/gcc/config/arm/arm1136jfs.md
-@@ -75,13 +75,13 @@
- ;; ALU operations with no shifted operand
- (define_insn_reservation "11_alu_op" 2
- (and (eq_attr "tune" "arm1136js,arm1136jfs")
-- (eq_attr "type" "alu"))
-+ (eq_attr "type" "alu_reg,simple_alu_imm"))
- "e_1,e_2,e_3,e_wb")
+ extern int tls_mentioned_p (rtx);
+ extern int symbol_mentioned_p (rtx);
+ extern int label_mentioned_p (rtx);
+ extern RTX_CODE minmax_code (rtx);
++extern bool arm_sat_operator_match (rtx, rtx, int *, bool *);
+ extern int adjacent_mem_locations (rtx, rtx);
+ extern bool gen_ldm_seq (rtx *, int, bool);
+ extern bool gen_stm_seq (rtx *, int);
+@@ -222,6 +225,27 @@
- ;; ALU operations with a shift-by-constant operand
- (define_insn_reservation "11_alu_shift_op" 2
- (and (eq_attr "tune" "arm1136js,arm1136jfs")
-- (eq_attr "type" "alu_shift"))
-+ (eq_attr "type" "simple_alu_shift,alu_shift"))
- "e_1,e_2,e_3,e_wb")
+ extern void arm_order_regs_for_local_alloc (void);
- ;; ALU operations with a shift-by-register operand
---- a/src/gcc/config/arm/arm926ejs.md
-+++ b/src/gcc/config/arm/arm926ejs.md
-@@ -58,7 +58,7 @@
- ;; ALU operations with no shifted operand
- (define_insn_reservation "9_alu_op" 1
- (and (eq_attr "tune" "arm926ejs")
-- (eq_attr "type" "alu,alu_shift"))
-+ (eq_attr "type" "alu_reg,simple_alu_imm,simple_alu_shift,alu_shift"))
- "e,m,w")
++/* Vectorizer cost model implementation. */
++struct cpu_vec_costs {
++ const int scalar_stmt_cost; /* Cost of any scalar operation, excluding
++ load and store. */
++ const int scalar_load_cost; /* Cost of scalar load. */
++ const int scalar_store_cost; /* Cost of scalar store. */
++ const int vec_stmt_cost; /* Cost of any vector operation, excluding
++ load, store, vector-to-scalar and
++ scalar-to-vector operation. */
++ const int vec_to_scalar_cost; /* Cost of vect-to-scalar operation. */
++ const int scalar_to_vec_cost; /* Cost of scalar-to-vector operation. */
++ const int vec_align_load_cost; /* Cost of aligned vector load. */
++ const int vec_unalign_load_cost; /* Cost of unaligned vector load. */
++ const int vec_unalign_store_cost; /* Cost of unaligned vector load. */
++ const int vec_store_cost; /* Cost of vector store. */
++ const int cond_taken_branch_cost; /* Cost of taken branch for vectorizer
++ cost model. */
++ const int cond_not_taken_branch_cost;/* Cost of not taken branch for
++ vectorizer cost model. */
++};
++
+ #ifdef RTX_CODE
+ /* This needs to be here because we need RTX_CODE and similar. */
- ;; ALU operations with a shift-by-register operand
+@@ -238,13 +262,22 @@
+ int l1_cache_line_size;
+ bool prefer_constant_pool;
+ int (*branch_cost) (bool, bool);
++ /* Prefer Neon for 64-bit bitops. */
++ bool prefer_neon_for_64bits;
++ /* Vectorizer costs. */
++ const struct cpu_vec_costs* vec_costs;
+ };
+
+ extern const struct tune_params *current_tune;
+ extern int vfp3_const_double_for_fract_bits (rtx);
++
++extern void arm_emit_coreregs_64bit_shift (enum rtx_code, rtx, rtx, rtx, rtx,
++ rtx);
+ #endif /* RTX_CODE */
+
+ extern void arm_expand_vec_perm (rtx target, rtx op0, rtx op1, rtx sel);
+ extern bool arm_expand_vec_perm_const (rtx target, rtx op0, rtx op1, rtx sel);
+
++extern bool arm_autoinc_modes_ok_p (enum machine_mode, enum arm_auto_incmodes);
++
+ #endif /* ! GCC_ARM_PROTOS_H */
--- a/src/gcc/config/arm/arm.c
+++ b/src/gcc/config/arm/arm.c
@@ -133,6 +133,7 @@
@@ -50965,7 +52060,18 @@
/* Calculate a few attributes that may be useful for specific
optimizations. */
/* Count number of leading zeros. */
-@@ -7640,6 +7757,28 @@
+@@ -4355,7 +4472,9 @@
+ if (((pcum->aapcs_vfp_regs_free >> regno) & mask) == mask)
+ {
+ pcum->aapcs_vfp_reg_alloc = mask << regno;
+- if (mode == BLKmode || (mode == TImode && !TARGET_NEON))
++ if (mode == BLKmode
++ || (mode == TImode && ! TARGET_NEON)
++ || ! arm_hard_regno_mode_ok (FIRST_VFP_REGNUM + regno, mode))
+ {
+ int i;
+ int rcount = pcum->aapcs_vfp_rcount;
+@@ -7640,6 +7759,28 @@
return true;
case SET:
@@ -50994,7 +52100,7 @@
return false;
case UNSPEC:
-@@ -7651,6 +7790,17 @@
+@@ -7651,6 +7792,17 @@
}
return true;
@@ -51012,7 +52118,7 @@
default:
*total = COSTS_N_INSNS (4);
return false;
-@@ -7991,6 +8141,17 @@
+@@ -7991,6 +8143,17 @@
*total = COSTS_N_INSNS (4);
return true;
@@ -51030,7 +52136,7 @@
case HIGH:
case LO_SUM:
/* We prefer constant pool entries to MOVW/MOVT pairs, so bump the
-@@ -8578,6 +8739,222 @@
+@@ -8578,6 +8741,222 @@
}
}
@@ -51253,7 +52359,7 @@
/* This function implements the target macro TARGET_SCHED_ADJUST_COST.
It corrects the value of COST based on the relationship between
INSN and DEP through the dependence LINK. It returns the new
-@@ -8858,11 +9235,14 @@
+@@ -8858,11 +9237,14 @@
vmov i64 17 aaaaaaaa bbbbbbbb cccccccc dddddddd
eeeeeeee ffffffff gggggggg hhhhhhhh
vmov f32 18 aBbbbbbc defgh000 00000000 00000000
@@ -51268,7 +52374,7 @@
Variants 0-5 (inclusive) may also be used as immediates for the second
operand of VORR/VBIC instructions.
-@@ -8893,11 +9273,25 @@
+@@ -8893,11 +9275,25 @@
break; \
}
@@ -51296,7 +52402,7 @@
/* Vectors of float constants. */
if (GET_MODE_CLASS (mode) == MODE_VECTOR_FLOAT)
-@@ -8905,7 +9299,7 @@
+@@ -8905,7 +9301,7 @@
rtx el0 = CONST_VECTOR_ELT (op, 0);
REAL_VALUE_TYPE r0;
@@ -51305,7 +52411,7 @@
return -1;
REAL_VALUE_FROM_CONST_DOUBLE (r0, el0);
-@@ -8927,13 +9321,16 @@
+@@ -8927,13 +9323,16 @@
if (elementwidth)
*elementwidth = 0;
@@ -51324,7 +52430,7 @@
unsigned HOST_WIDE_INT elpart;
unsigned int part, parts;
-@@ -9644,7 +10041,11 @@
+@@ -9644,7 +10043,11 @@
&& REG_MODE_OK_FOR_BASE_P (XEXP (ind, 0), VOIDmode)
&& GET_CODE (XEXP (ind, 1)) == CONST_INT
&& INTVAL (XEXP (ind, 1)) > -1024
@@ -51337,7 +52443,7 @@
&& (INTVAL (XEXP (ind, 1)) & 3) == 0)
return TRUE;
-@@ -10047,6 +10448,42 @@
+@@ -10047,6 +10450,42 @@
}
}
@@ -51380,7 +52486,7 @@
/* Return 1 if memory locations are adjacent. */
int
adjacent_mem_locations (rtx a, rtx b)
-@@ -13277,47 +13714,148 @@
+@@ -13277,47 +13716,148 @@
FOR_BB_INSNS_REVERSE (bb, insn)
{
if (NONJUMP_INSN_P (insn)
@@ -51557,7 +52663,7 @@
}
}
-@@ -14546,15 +15084,16 @@
+@@ -14546,15 +15086,16 @@
return "";
}
@@ -51581,7 +52687,7 @@
For example, the in-memory ordering of a big-endian a quadword
vector with 16-bit elements when stored from register pair {d0,d1}
-@@ -14568,13 +15107,28 @@
+@@ -14568,13 +15109,28 @@
dN -> (rN+1, rN), dN+1 -> (rN+3, rN+2)
So that STM/LDM can be used on vectors in ARM registers, and the
@@ -51612,7 +52718,7 @@
const char *templ;
char buff[50];
enum machine_mode mode;
-@@ -14586,6 +15140,7 @@
+@@ -14586,6 +15142,7 @@
gcc_assert (REG_P (reg));
regno = REGNO (reg);
@@ -51620,7 +52726,7 @@
gcc_assert (VFP_REGNO_OK_FOR_DOUBLE (regno)
|| NEON_REGNO_OK_FOR_QUAD (regno));
gcc_assert (VALID_NEON_DREG_MODE (mode)
-@@ -14602,13 +15157,23 @@
+@@ -14602,13 +15159,23 @@
switch (GET_CODE (addr))
{
case POST_INC:
@@ -51647,7 +52753,7 @@
templ = "v%smdb%%?\t%%0!, %%h1";
ops[0] = XEXP (addr, 0);
ops[1] = reg;
-@@ -14621,7 +15186,6 @@
+@@ -14621,7 +15188,6 @@
case LABEL_REF:
case PLUS:
{
@@ -51655,7 +52761,7 @@
int i;
int overlap = -1;
for (i = 0; i < nregs; i++)
-@@ -14652,7 +15216,12 @@
+@@ -14652,7 +15218,12 @@
}
default:
@@ -51669,7 +52775,7 @@
ops[0] = mem;
ops[1] = reg;
}
-@@ -17287,6 +17856,19 @@
+@@ -17287,6 +17858,19 @@
}
return;
@@ -51689,7 +52795,7 @@
case 'B':
if (GET_CODE (x) == CONST_INT)
{
-@@ -19101,6 +19683,8 @@
+@@ -19101,6 +19685,8 @@
VAR8 (BINOP, vmul, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
VAR8 (TERNOP, vmla, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
VAR3 (TERNOP, vmlal, v8qi, v4hi, v2si),
@@ -51698,7 +52804,7 @@
VAR8 (TERNOP, vmls, v8qi, v4hi, v2si, v2sf, v16qi, v8hi, v4si, v4sf),
VAR3 (TERNOP, vmlsl, v8qi, v4hi, v2si),
VAR4 (BINOP, vqdmulh, v4hi, v2si, v8hi, v4si),
-@@ -23485,6 +24069,62 @@
+@@ -23485,6 +24071,62 @@
return TARGET_AAPCS_BASED ? integer_type_node : long_long_integer_type_node;
}
@@ -51761,7 +52867,7 @@
/* Return non-zero if the consumer (a multiply-accumulate instruction)
has an accumulator dependency on the result of the producer (a
multiplication instruction) and no other dependency on that result. */
-@@ -24439,6 +25079,7 @@
+@@ -24439,6 +25081,7 @@
case cortexr5:
case genericv7a:
case cortexa5:
@@ -51769,7 +52875,7 @@
case cortexa8:
case cortexa9:
case fa726te:
-@@ -25374,20 +26015,20 @@
+@@ -25374,20 +26017,20 @@
default:
return false;
}
@@ -51797,7 +52903,7 @@
/* Success! */
if (d->testing_p)
return true;
-@@ -25462,6 +26103,72 @@
+@@ -25462,6 +26105,72 @@
return true;
}
@@ -51870,7 +52976,7 @@
/* The NEON VTBL instruction is a fully variable permuation that's even
stronger than what we expose via VEC_PERM_EXPR. What it doesn't do
is mask the index operand as VEC_PERM_EXPR requires. Therefore we
-@@ -25501,6 +26208,12 @@
+@@ -25501,6 +26210,12 @@
static bool
arm_expand_vec_perm_const_1 (struct expand_vec_perm_d *d)
{
@@ -51883,7 +52989,7 @@
/* The pattern matching functions above are written to look for a small
number to begin the sequence (0, 1, N/2). If we begin with an index
from the second operand, we can swap the operands. */
-@@ -25631,5 +26344,302 @@
+@@ -25631,5 +26346,302 @@
return ret;
}
@@ -52187,24 +53293,6 @@
+}
+
#include "gt-arm.h"
---- a/src/gcc/config/arm/arm-fixed.md
-+++ b/src/gcc/config/arm/arm-fixed.md
-@@ -374,6 +374,8 @@
- "TARGET_32BIT && arm_arch6"
- "ssat%?\\t%0, #16, %2%S1"
- [(set_attr "predicable" "yes")
-+ (set_attr "insn" "sat")
-+ (set_attr "shift" "1")
- (set_attr "type" "alu_shift")])
-
- (define_insn "arm_usatsihi"
-@@ -381,4 +383,5 @@
- (us_truncate:HI (match_operand:SI 1 "s_register_operand")))]
- "TARGET_INT_SIMD"
- "usat%?\\t%0, #16, %1"
-- [(set_attr "predicable" "yes")])
-+ [(set_attr "predicable" "yes")
-+ (set_attr "insn" "sat")])
--- a/src/gcc/config/arm/arm.h
+++ b/src/gcc/config/arm/arm.h
@@ -79,6 +79,9 @@
@@ -52325,7 +53413,7 @@
(const_string "yes")]
(const_string "no")))
-@@ -247,11 +265,15 @@
+@@ -247,15 +265,22 @@
; Enable all alternatives that are both arch_enabled and insn_enabled.
(define_attr "enabled" "no,yes"
@@ -52346,7 +53434,14 @@
; POOL_RANGE is how far away from a constant pool entry that this insn
; can be placed. If the distance is zero, then this insn will never
-@@ -283,7 +305,7 @@
+ ; reference the pool.
++; Note that for Thumb constant pools the PC value is rounded down to the
++; nearest multiple of four. Therefore, THUMB2_POOL_RANGE (and POOL_RANGE for
++; Thumb insns) should be set to <max_range> - 2.
+ ; NEG_POOL_RANGE is nonzero for insns that can reference a constant pool entry
+ ; before its address. It is set to <max_range> - (8 + <data_size>).
+ (define_attr "arm_pool_range" "" (const_int 0))
+@@ -283,7 +308,7 @@
;; scheduling information.
(define_attr "insn"
@@ -52355,7 +53450,7 @@
(const_string "other"))
; TYPE attribute is used to detect floating point instructions which, if
-@@ -294,8 +316,15 @@
+@@ -294,8 +319,15 @@
; Classification of each insn
; Note: vfp.md has different meanings for some of these, and some further
; types as well. See that file for details.
@@ -52373,7 +53468,7 @@
; alu_shift any data instruction that doesn't hit memory or fp
; regs, but has a source operand shifted by a constant
; alu_shift_reg any data instruction that doesn't hit memory or fp
-@@ -338,11 +367,11 @@
+@@ -338,11 +370,11 @@
;
(define_attr "type"
@@ -52387,7 +53482,7 @@
; Is this an (integer side) multiply with a 64-bit result?
(define_attr "mul64" "no,yes"
-@@ -356,8 +385,6 @@
+@@ -356,8 +388,6 @@
(define_attr "ldsched" "no,yes" (const (symbol_ref "arm_ld_sched")))
;; Classification of NEON instructions for scheduling purposes.
@@ -52396,7 +53491,7 @@
(define_attr "neon_type"
"neon_int_1,\
neon_int_2,\
-@@ -477,7 +504,7 @@
+@@ -477,7 +507,7 @@
; than one on the main cpu execution unit.
(define_attr "core_cycles" "single,multi"
(if_then_else (eq_attr "type"
@@ -52405,7 +53500,7 @@
(const_string "single")
(const_string "multi")))
-@@ -514,7 +541,7 @@
+@@ -514,7 +544,7 @@
(define_attr "generic_sched" "yes,no"
(const (if_then_else
@@ -52414,7 +53509,7 @@
(eq_attr "tune_cortexr4" "yes"))
(const_string "no")
(const_string "yes"))))
-@@ -522,7 +549,7 @@
+@@ -522,7 +552,7 @@
(define_attr "generic_vfp" "yes,no"
(const (if_then_else
(and (eq_attr "fpu" "vfp")
@@ -52423,7 +53518,7 @@
(eq_attr "tune_cortexr4" "no"))
(const_string "yes")
(const_string "no"))))
-@@ -538,6 +565,7 @@
+@@ -538,6 +568,7 @@
(include "fmp626.md")
(include "fa726te.md")
(include "cortex-a5.md")
@@ -52431,7 +53526,7 @@
(include "cortex-a8.md")
(include "cortex-a9.md")
(include "cortex-a15.md")
-@@ -563,7 +591,7 @@
+@@ -563,7 +594,7 @@
[(parallel
[(set (match_operand:DI 0 "s_register_operand" "")
(plus:DI (match_operand:DI 1 "s_register_operand" "")
@@ -52440,7 +53535,7 @@
(clobber (reg:CC CC_REGNUM))])]
"TARGET_EITHER"
"
-@@ -599,9 +627,9 @@
+@@ -599,9 +630,9 @@
)
(define_insn_and_split "*arm_adddi3"
@@ -52453,7 +53548,7 @@
(clobber (reg:CC CC_REGNUM))]
"TARGET_32BIT && !(TARGET_HARD_FLOAT && TARGET_MAVERICK) && !TARGET_NEON"
"#"
-@@ -619,7 +647,7 @@
+@@ -619,7 +650,7 @@
operands[0] = gen_lowpart (SImode, operands[0]);
operands[4] = gen_highpart (SImode, operands[1]);
operands[1] = gen_lowpart (SImode, operands[1]);
@@ -52462,7 +53557,7 @@
operands[2] = gen_lowpart (SImode, operands[2]);
}"
[(set_attr "conds" "clob")
-@@ -746,7 +774,11 @@
+@@ -746,7 +777,11 @@
"
[(set_attr "length" "4,4,4,4,4,4,4,4,4,16")
(set_attr "predicable" "yes")
@@ -52475,7 +53570,7 @@
)
(define_insn_and_split "*thumb1_addsi3"
-@@ -815,30 +847,35 @@
+@@ -815,30 +850,35 @@
(define_insn "addsi3_compare0"
[(set (reg:CC_NOOV CC_REGNUM)
(compare:CC_NOOV
@@ -52520,7 +53615,7 @@
)
(define_insn "*compare_negsi_si"
-@@ -913,78 +950,90 @@
+@@ -913,78 +953,90 @@
(define_insn "*addsi3_compare_op1"
[(set (reg:CC_C CC_REGNUM)
(compare:CC_C
@@ -52636,7 +53731,7 @@
[(set_attr "conds" "use")]
)
-@@ -1214,14 +1263,15 @@
+@@ -1214,14 +1266,15 @@
; ??? Check Thumb-2 split length
(define_insn_and_split "*arm_subsi3_insn"
@@ -52655,7 +53750,7 @@
#"
"&& (GET_CODE (operands[1]) == CONST_INT
&& !const_ok_for_arm (INTVAL (operands[1])))"
-@@ -1231,8 +1281,9 @@
+@@ -1231,8 +1284,9 @@
INTVAL (operands[1]), operands[0], operands[2], 0);
DONE;
"
@@ -52667,7 +53762,7 @@
)
(define_peephole2
-@@ -1251,29 +1302,33 @@
+@@ -1251,29 +1305,33 @@
(define_insn "*subsi3_compare0"
[(set (reg:CC_NOOV CC_REGNUM)
(compare:CC_NOOV
@@ -52709,7 +53804,7 @@
)
(define_expand "decscc"
-@@ -1295,7 +1350,8 @@
+@@ -1295,7 +1353,8 @@
sub%d2\\t%0, %1, #1
mov%D2\\t%0, %1\;sub%d2\\t%0, %1, #1"
[(set_attr "conds" "use")
@@ -52719,7 +53814,7 @@
)
(define_expand "subsf3"
-@@ -2187,13 +2243,14 @@
+@@ -2187,13 +2246,14 @@
; ??? Check split length for Thumb-2
(define_insn_and_split "*arm_andsi3_insn"
@@ -52737,7 +53832,7 @@
#"
"TARGET_32BIT
&& GET_CODE (operands[2]) == CONST_INT
-@@ -2205,8 +2262,9 @@
+@@ -2205,8 +2265,9 @@
INTVAL (operands[2]), operands[0], operands[1], 0);
DONE;
"
@@ -52749,7 +53844,7 @@
)
(define_insn "*thumb1_andsi3_insn"
-@@ -2216,35 +2274,40 @@
+@@ -2216,35 +2277,40 @@
"TARGET_THUMB1"
"and\\t%0, %2"
[(set_attr "length" "2")
@@ -52800,7 +53895,7 @@
)
(define_insn "*zeroextractsi_compare0_scratch"
-@@ -2266,7 +2329,8 @@
+@@ -2266,7 +2332,8 @@
return \"\";
"
[(set_attr "conds" "set")
@@ -52810,7 +53905,7 @@
)
(define_insn_and_split "*ne_zeroextractsi"
-@@ -2913,13 +2977,14 @@
+@@ -2913,13 +2980,14 @@
)
(define_insn_and_split "*iorsi3_insn"
@@ -52828,7 +53923,7 @@
#"
"TARGET_32BIT
&& GET_CODE (operands[2]) == CONST_INT
-@@ -2931,9 +2996,11 @@
+@@ -2931,9 +2999,11 @@
INTVAL (operands[2]), operands[0], operands[1], 0);
DONE;
}
@@ -52843,7 +53938,7 @@
(define_insn "*thumb1_iorsi3_insn"
[(set (match_operand:SI 0 "register_operand" "=l")
-@@ -2959,25 +3026,27 @@
+@@ -2959,25 +3029,27 @@
(define_insn "*iorsi3_compare0"
[(set (reg:CC_NOOV CC_REGNUM)
@@ -52879,7 +53974,7 @@
)
(define_expand "xordi3"
-@@ -3051,12 +3120,13 @@
+@@ -3051,12 +3123,13 @@
)
(define_insn_and_split "*arm_xorsi3"
@@ -52896,7 +53991,7 @@
#"
"TARGET_32BIT
&& GET_CODE (operands[2]) == CONST_INT
-@@ -3067,8 +3137,9 @@
+@@ -3067,8 +3140,9 @@
INTVAL (operands[2]), operands[0], operands[1], 0);
DONE;
}
@@ -52908,7 +54003,7 @@
)
(define_insn "*thumb1_xorsi3_insn"
-@@ -3078,28 +3149,32 @@
+@@ -3078,28 +3152,32 @@
"TARGET_THUMB1"
"eor\\t%0, %2"
[(set_attr "length" "2")
@@ -52949,7 +54044,7 @@
)
; By splitting (IOR (AND (NOT A) (NOT B)) C) as D = AND (IOR A B) (NOT C),
-@@ -3446,30 +3521,114 @@
+@@ -3446,30 +3524,114 @@
(const_int 12)))]
)
@@ -53019,15 +54114,15 @@
"
- if (GET_CODE (operands[2]) == CONST_INT)
+ if (TARGET_NEON)
-+ {
+ {
+- if ((HOST_WIDE_INT) INTVAL (operands[2]) == 1)
+ /* Delay the decision whether to use NEON or core-regs until
+ register allocation. */
+ emit_insn (gen_ashldi3_neon (operands[0], operands[1], operands[2]));
+ DONE;
+ }
+ else
- {
-- if ((HOST_WIDE_INT) INTVAL (operands[2]) == 1)
++ {
+ /* Only the NEON case can handle in-memory shift counts. */
+ if (!reg_or_int_operand (operands[2], SImode))
+ operands[2] = force_reg (SImode, operands[2]);
@@ -53074,7 +54169,7 @@
"
)
-@@ -3514,21 +3673,45 @@
+@@ -3514,21 +3676,45 @@
(match_operand:SI 2 "reg_or_int_operand" "")))]
"TARGET_32BIT"
"
@@ -53129,13 +54224,14 @@
"
)
-@@ -3571,21 +3754,45 @@
+@@ -3571,21 +3757,45 @@
(match_operand:SI 2 "reg_or_int_operand" "")))]
"TARGET_32BIT"
"
- if (GET_CODE (operands[2]) == CONST_INT)
+ if (TARGET_NEON)
-+ {
+ {
+- if ((HOST_WIDE_INT) INTVAL (operands[2]) == 1)
+ /* Delay the decision whether to use NEON or core-regs until
+ register allocation. */
+ emit_insn (gen_lshrdi3_neon (operands[0], operands[1], operands[2]));
@@ -53146,8 +54242,7 @@
+ && (TARGET_REALLY_IWMMXT || (TARGET_HARD_FLOAT && TARGET_MAVERICK)))
+ ; /* No special preparation statements; expand pattern as above. */
+ else
- {
-- if ((HOST_WIDE_INT) INTVAL (operands[2]) == 1)
++ {
+ rtx scratch1, scratch2;
+
+ if (CONST_INT_P (operands[2])
@@ -53184,7 +54279,7 @@
"
)
-@@ -4037,7 +4244,13 @@
+@@ -4037,7 +4247,13 @@
(neg:DI (match_operand:DI 1 "s_register_operand" "")))
(clobber (reg:CC CC_REGNUM))])]
"TARGET_EITHER"
@@ -53199,7 +54294,7 @@
)
;; The constraints here are to prevent a *partial* overlap (where %Q0 == %R1).
-@@ -4125,7 +4338,7 @@
+@@ -4125,7 +4341,7 @@
eor%?\\t%0, %1, %1, asr #31\;sub%?\\t%0, %0, %1, asr #31"
[(set_attr "conds" "clob,*")
(set_attr "shift" "1")
@@ -53208,7 +54303,7 @@
(set_attr "length" "8")]
)
-@@ -4153,7 +4366,7 @@
+@@ -4153,7 +4369,7 @@
eor%?\\t%0, %1, %1, asr #31\;rsb%?\\t%0, %0, %1, asr #31"
[(set_attr "conds" "clob,*")
(set_attr "shift" "1")
@@ -53217,7 +54312,7 @@
(set_attr "length" "8")]
)
-@@ -4196,11 +4409,16 @@
+@@ -4196,11 +4412,16 @@
"")
(define_insn_and_split "one_cmpldi2"
@@ -53238,7 +54333,7 @@
[(set (match_dup 0) (not:SI (match_dup 1)))
(set (match_dup 2) (not:SI (match_dup 3)))]
"
-@@ -4210,8 +4428,10 @@
+@@ -4210,8 +4431,10 @@
operands[3] = gen_highpart (SImode, operands[1]);
operands[1] = gen_lowpart (SImode, operands[1]);
}"
@@ -53251,7 +54346,7 @@
)
(define_expand "one_cmplsi2"
-@@ -4399,33 +4619,36 @@
+@@ -4399,33 +4622,36 @@
;; Zero and sign extension instructions.
(define_insn "zero_extend<mode>di2"
@@ -53294,7 +54389,7 @@
[(set (match_dup 0) (match_dup 1))]
{
rtx lo_part = gen_lowpart (SImode, operands[0]);
-@@ -4451,7 +4674,9 @@
+@@ -4451,7 +4677,9 @@
(define_split
[(set (match_operand:DI 0 "s_register_operand" "")
(sign_extend:DI (match_operand 1 "nonimmediate_operand" "")))]
@@ -53305,7 +54400,7 @@
[(set (match_dup 0) (ashiftrt:SI (match_dup 1) (const_int 31)))]
{
rtx lo_part = gen_lowpart (SImode, operands[0]);
-@@ -4544,7 +4769,7 @@
+@@ -4544,7 +4772,7 @@
[(if_then_else (eq_attr "is_arch6" "yes")
(const_int 2) (const_int 4))
(const_int 4)])
@@ -53314,7 +54409,7 @@
)
(define_insn "*arm_zero_extendhisi2"
-@@ -4565,8 +4790,8 @@
+@@ -4565,8 +4793,8 @@
"@
uxth%?\\t%0, %1
ldr%(h%)\\t%0, %1"
@@ -53325,7 +54420,7 @@
)
(define_insn "*arm_zero_extendhisi2addsi"
-@@ -4636,7 +4861,7 @@
+@@ -4636,7 +4864,7 @@
uxtb\\t%0, %1
ldrb\\t%0, %1"
[(set_attr "length" "2")
@@ -53334,7 +54429,7 @@
)
(define_insn "*arm_zero_extendqisi2"
-@@ -4658,7 +4883,7 @@
+@@ -4658,7 +4886,7 @@
"@
uxtb%(%)\\t%0, %1
ldr%(b%)\\t%0, %1\\t%@ zero_extendqisi2"
@@ -53343,16 +54438,18 @@
(set_attr "predicable" "yes")]
)
-@@ -4832,7 +5057,7 @@
+@@ -4832,8 +5060,8 @@
[(if_then_else (eq_attr "is_arch6" "yes")
(const_int 2) (const_int 4))
(const_int 4)])
- (set_attr "type" "alu_shift,load_byte")
+- (set_attr "pool_range" "*,1020")]
+ (set_attr "type" "simple_alu_shift,load_byte")
- (set_attr "pool_range" "*,1020")]
++ (set_attr "pool_range" "*,1018")]
)
-@@ -4904,7 +5129,7 @@
+ ;; This pattern will only be used when ldsh is not available
+@@ -4904,7 +5132,7 @@
"@
sxth%?\\t%0, %1
ldr%(sh%)\\t%0, %1"
@@ -53361,7 +54458,7 @@
(set_attr "predicable" "yes")
(set_attr "pool_range" "*,256")
(set_attr "neg_pool_range" "*,244")]
-@@ -5004,7 +5229,7 @@
+@@ -5004,7 +5232,7 @@
"@
sxtb%?\\t%0, %1
ldr%(sb%)\\t%0, %1"
@@ -53370,7 +54467,7 @@
(set_attr "predicable" "yes")
(set_attr "pool_range" "*,256")
(set_attr "neg_pool_range" "*,244")]
-@@ -5117,7 +5342,7 @@
+@@ -5117,7 +5345,7 @@
(const_int 2)
(if_then_else (eq_attr "is_arch6" "yes")
(const_int 4) (const_int 6))])
@@ -53379,7 +54476,25 @@
)
(define_expand "extendsfdf2"
-@@ -5500,7 +5725,7 @@
+@@ -5239,7 +5467,7 @@
+ (set_attr "type" "*,*,*,load2,store2")
+ (set_attr "arm_pool_range" "*,*,*,1020,*")
+ (set_attr "arm_neg_pool_range" "*,*,*,1004,*")
+- (set_attr "thumb2_pool_range" "*,*,*,4096,*")
++ (set_attr "thumb2_pool_range" "*,*,*,4094,*")
+ (set_attr "thumb2_neg_pool_range" "*,*,*,0,*")]
+ )
+
+@@ -5379,7 +5607,7 @@
+ [(set_attr "length" "4,4,6,2,2,6,4,4")
+ (set_attr "type" "*,*,*,load2,store2,load2,store2,*")
+ (set_attr "insn" "*,mov,*,*,*,*,*,mov")
+- (set_attr "pool_range" "*,*,*,*,*,1020,*,*")]
++ (set_attr "pool_range" "*,*,*,*,*,1018,*,*")]
+ )
+
+ (define_expand "movsi"
+@@ -5500,7 +5728,7 @@
movw%?\\t%0, %1
ldr%?\\t%0, %1
str%?\\t%1, %0"
@@ -53388,7 +54503,46 @@
(set_attr "insn" "mov,mov,mvn,mov,*,*")
(set_attr "predicable" "yes")
(set_attr "pool_range" "*,*,*,*,4096,*")
-@@ -5766,7 +5991,8 @@
+@@ -5539,7 +5767,7 @@
+ mov\\t%0, %1"
+ [(set_attr "length" "2,2,4,4,2,2,2,2,2")
+ (set_attr "type" "*,*,*,*,load1,store1,load1,store1,*")
+- (set_attr "pool_range" "*,*,*,*,*,*,1020,*,*")
++ (set_attr "pool_range" "*,*,*,*,*,*,1018,*,*")
+ (set_attr "conds" "set,clob,*,*,nocond,nocond,nocond,nocond,nocond")])
+
+ (define_split
+@@ -5632,7 +5860,7 @@
+ (match_dup 2)] UNSPEC_PIC_BASE))]
+ "operands[3] = TARGET_THUMB ? GEN_INT (4) : GEN_INT (8);"
+ [(set_attr "type" "load1,load1,load1")
+- (set_attr "pool_range" "4096,4096,1024")
++ (set_attr "pool_range" "4096,4094,1022")
+ (set_attr "neg_pool_range" "4084,0,0")
+ (set_attr "arch" "a,t2,t1")
+ (set_attr "length" "8,6,4")]
+@@ -5648,7 +5876,10 @@
+ "TARGET_32BIT && flag_pic"
+ "ldr%?\\t%0, %1"
+ [(set_attr "type" "load1")
+- (set_attr "pool_range" "4096")
++ (set (attr "pool_range")
++ (if_then_else (eq_attr "is_thumb" "no")
++ (const_int 4096)
++ (const_int 4094)))
+ (set (attr "neg_pool_range")
+ (if_then_else (eq_attr "is_thumb" "no")
+ (const_int 4084)
+@@ -5661,7 +5892,7 @@
+ "TARGET_THUMB1 && flag_pic"
+ "ldr\\t%0, %1"
+ [(set_attr "type" "load1")
+- (set (attr "pool_range") (const_int 1024))]
++ (set (attr "pool_range") (const_int 1018))]
+ )
+
+ (define_insn "pic_add_dot_plus_four"
+@@ -5766,7 +5997,8 @@
"@
cmp%?\\t%0, #0
sub%.\\t%0, %1, #0"
@@ -53398,7 +54552,7 @@
)
;; Subroutine to store a half word from a register into memory.
-@@ -6179,22 +6405,30 @@
+@@ -6179,22 +6411,30 @@
mvn%?\\t%0, #%B1\\t%@ movhi
str%(h%)\\t%1, %0\\t%@ movhi
ldr%(h%)\\t%0, %1\\t%@ movhi"
@@ -53435,7 +54589,7 @@
)
(define_expand "thumb_movhi_clobber"
-@@ -6319,23 +6553,24 @@
+@@ -6319,23 +6559,24 @@
(define_insn "*arm_movqi_insn"
@@ -53466,7 +54620,7 @@
)
(define_insn "*thumb1_movqi_insn"
-@@ -6352,7 +6587,7 @@
+@@ -6352,7 +6593,7 @@
mov\\t%0, %1
mov\\t%0, %1"
[(set_attr "length" "2")
@@ -53475,7 +54629,54 @@
(set_attr "insn" "*,*,*,mov,mov,mov")
(set_attr "pool_range" "*,32,*,*,*,*")
(set_attr "conds" "clob,nocond,nocond,nocond,nocond,clob")])
-@@ -7499,7 +7734,8 @@
+@@ -6456,7 +6697,7 @@
+ [(set_attr "length" "2")
+ (set_attr "type" "*,load1,store1,*,*")
+ (set_attr "insn" "mov,*,*,mov,mov")
+- (set_attr "pool_range" "*,1020,*,*,*")
++ (set_attr "pool_range" "*,1018,*,*,*")
+ (set_attr "conds" "clob,nocond,nocond,nocond,nocond")])
+
+ (define_expand "movsf"
+@@ -6511,7 +6752,8 @@
+ [(set_attr "predicable" "yes")
+ (set_attr "type" "*,load1,store1")
+ (set_attr "insn" "mov,*,*")
+- (set_attr "pool_range" "*,4096,*")
++ (set_attr "arm_pool_range" "*,4096,*")
++ (set_attr "thumb2_pool_range" "*,4094,*")
+ (set_attr "arm_neg_pool_range" "*,4084,*")
+ (set_attr "thumb2_neg_pool_range" "*,0,*")]
+ )
+@@ -6533,7 +6775,7 @@
+ mov\\t%0, %1"
+ [(set_attr "length" "2")
+ (set_attr "type" "*,load1,store1,load1,store1,*,*")
+- (set_attr "pool_range" "*,*,*,1020,*,*,*")
++ (set_attr "pool_range" "*,*,*,1018,*,*,*")
+ (set_attr "insn" "*,*,*,*,*,mov,mov")
+ (set_attr "conds" "clob,nocond,nocond,nocond,nocond,nocond,nocond")]
+ )
+@@ -6622,7 +6864,8 @@
+ "
+ [(set_attr "length" "8,12,16,8,8")
+ (set_attr "type" "*,*,*,load2,store2")
+- (set_attr "pool_range" "*,*,*,1020,*")
++ (set_attr "arm_pool_range" "*,*,*,1020,*")
++ (set_attr "thumb2_pool_range" "*,*,*,1018,*")
+ (set_attr "arm_neg_pool_range" "*,*,*,1004,*")
+ (set_attr "thumb2_neg_pool_range" "*,*,*,0,*")]
+ )
+@@ -6665,7 +6908,7 @@
+ [(set_attr "length" "4,2,2,6,4,4")
+ (set_attr "type" "*,load2,store2,load2,store2,*")
+ (set_attr "insn" "*,*,*,*,*,mov")
+- (set_attr "pool_range" "*,*,*,1020,*,*")]
++ (set_attr "pool_range" "*,*,*,1018,*,*")]
+ )
+
+ (define_expand "movxf"
+@@ -7499,7 +7742,8 @@
[(set_attr "conds" "set")
(set_attr "arch" "t2,t2,any,any")
(set_attr "length" "2,2,4,4")
@@ -53485,7 +54686,7 @@
)
(define_insn "*cmpsi_shiftsi"
-@@ -7655,7 +7891,7 @@
+@@ -7655,7 +7899,7 @@
;; Patterns to match conditional branch insns.
;;
@@ -53494,7 +54695,7 @@
[(set (pc)
(if_then_else (match_operator 1 "arm_comparison_operator"
[(match_operand 2 "cc_register" "") (const_int 0)])
-@@ -8111,7 +8347,20 @@
+@@ -8111,7 +8355,20 @@
mvn%d3\\t%0, #%B1\;mvn%D3\\t%0, #%B2"
[(set_attr "length" "4,4,4,4,8,8,8,8")
(set_attr "conds" "use")
@@ -53516,7 +54717,7 @@
)
(define_insn "*movsfcc_soft_insn"
-@@ -9882,7 +10131,13 @@
+@@ -9882,7 +10139,13 @@
sub%d4\\t%0, %2, #%n3\;mov%D4\\t%0, %1"
[(set_attr "conds" "use")
(set_attr "length" "4,4,8,8")
@@ -53531,7 +54732,7 @@
)
(define_insn "*ifcompare_move_plus"
-@@ -9918,7 +10173,13 @@
+@@ -9918,7 +10181,13 @@
sub%D4\\t%0, %2, #%n3\;mov%d4\\t%0, %1"
[(set_attr "conds" "use")
(set_attr "length" "4,4,8,8")
@@ -53546,7 +54747,7 @@
)
(define_insn "*ifcompare_arith_arith"
-@@ -11225,20 +11486,15 @@
+@@ -11225,20 +11494,15 @@
)
(define_insn "*arm_rev"
@@ -53576,7 +54777,7 @@
)
(define_expand "arm_legacy_rev"
-@@ -11326,6 +11582,40 @@
+@@ -11326,6 +11590,40 @@
"
)
@@ -53617,6 +54818,90 @@
;; Load the load/store multiple patterns
(include "ldmstm.md")
;; Load the FPA co-processor patterns
+--- a/src/gcc/config/arm/arm.opt
++++ b/src/gcc/config/arm/arm.opt
+@@ -267,3 +267,7 @@
+ munaligned-access
+ Target Report Var(unaligned_access) Init(2)
+ Enable unaligned word and halfword accesses to packed data.
++
++mneon-for-64bits
++Target Report RejectNegative Var(use_neon_for_64bits) Init(0)
++Use Neon to perform 64-bits operations rather than core registers.
+--- a/src/gcc/config/arm/arm1020e.md
++++ b/src/gcc/config/arm/arm1020e.md
+@@ -66,13 +66,13 @@
+ ;; ALU operations with no shifted operand
+ (define_insn_reservation "1020alu_op" 1
+ (and (eq_attr "tune" "arm1020e,arm1022e")
+- (eq_attr "type" "alu"))
++ (eq_attr "type" "alu_reg,simple_alu_imm"))
+ "1020a_e,1020a_m,1020a_w")
+
+ ;; ALU operations with a shift-by-constant operand
+ (define_insn_reservation "1020alu_shift_op" 1
+ (and (eq_attr "tune" "arm1020e,arm1022e")
+- (eq_attr "type" "alu_shift"))
++ (eq_attr "type" "simple_alu_shift,alu_shift"))
+ "1020a_e,1020a_m,1020a_w")
+
+ ;; ALU operations with a shift-by-register operand
+@@ -284,7 +284,7 @@
+
+ (define_insn_reservation "v10_fmul" 6
+ (and (eq_attr "vfp10" "yes")
+- (eq_attr "type" "fmuls,fmacs,fmuld,fmacd"))
++ (eq_attr "type" "fmuls,fmacs,ffmas,fmuld,fmacd,ffmad"))
+ "1020a_e+v10_fmac*2")
+
+ (define_insn_reservation "v10_fdivs" 18
+--- a/src/gcc/config/arm/arm1026ejs.md
++++ b/src/gcc/config/arm/arm1026ejs.md
+@@ -66,13 +66,13 @@
+ ;; ALU operations with no shifted operand
+ (define_insn_reservation "alu_op" 1
+ (and (eq_attr "tune" "arm1026ejs")
+- (eq_attr "type" "alu"))
++ (eq_attr "type" "alu_reg,simple_alu_imm"))
+ "a_e,a_m,a_w")
+
+ ;; ALU operations with a shift-by-constant operand
+ (define_insn_reservation "alu_shift_op" 1
+ (and (eq_attr "tune" "arm1026ejs")
+- (eq_attr "type" "alu_shift"))
++ (eq_attr "type" "simple_alu_shift,alu_shift"))
+ "a_e,a_m,a_w")
+
+ ;; ALU operations with a shift-by-register operand
+--- a/src/gcc/config/arm/arm1136jfs.md
++++ b/src/gcc/config/arm/arm1136jfs.md
+@@ -75,13 +75,13 @@
+ ;; ALU operations with no shifted operand
+ (define_insn_reservation "11_alu_op" 2
+ (and (eq_attr "tune" "arm1136js,arm1136jfs")
+- (eq_attr "type" "alu"))
++ (eq_attr "type" "alu_reg,simple_alu_imm"))
+ "e_1,e_2,e_3,e_wb")
+
+ ;; ALU operations with a shift-by-constant operand
+ (define_insn_reservation "11_alu_shift_op" 2
+ (and (eq_attr "tune" "arm1136js,arm1136jfs")
+- (eq_attr "type" "alu_shift"))
++ (eq_attr "type" "simple_alu_shift,alu_shift"))
+ "e_1,e_2,e_3,e_wb")
+
+ ;; ALU operations with a shift-by-register operand
+--- a/src/gcc/config/arm/arm926ejs.md
++++ b/src/gcc/config/arm/arm926ejs.md
+@@ -58,7 +58,7 @@
+ ;; ALU operations with no shifted operand
+ (define_insn_reservation "9_alu_op" 1
+ (and (eq_attr "tune" "arm926ejs")
+- (eq_attr "type" "alu,alu_shift"))
++ (eq_attr "type" "alu_reg,simple_alu_imm,simple_alu_shift,alu_shift"))
+ "e,m,w")
+
+ ;; ALU operations with a shift-by-register operand
--- a/src/gcc/config/arm/arm_neon.h
+++ b/src/gcc/config/arm/arm_neon.h
@@ -1350,6 +1350,38 @@
@@ -53658,92 +54943,6 @@
__extension__ static __inline int8x8_t __attribute__ ((__always_inline__))
vsub_s8 (int8x8_t __a, int8x8_t __b)
{
---- a/src/gcc/config/arm/arm.opt
-+++ b/src/gcc/config/arm/arm.opt
-@@ -267,3 +267,7 @@
- munaligned-access
- Target Report Var(unaligned_access) Init(2)
- Enable unaligned word and halfword accesses to packed data.
-+
-+mneon-for-64bits
-+Target Report RejectNegative Var(use_neon_for_64bits) Init(0)
-+Use Neon to perform 64-bits operations rather than core registers.
---- a/src/gcc/config/arm/arm-protos.h
-+++ b/src/gcc/config/arm/arm-protos.h
-@@ -49,6 +49,7 @@
- extern bool arm_modes_tieable_p (enum machine_mode, enum machine_mode);
- extern int const_ok_for_arm (HOST_WIDE_INT);
- extern int const_ok_for_op (HOST_WIDE_INT, enum rtx_code);
-+extern int const_ok_for_dimode_op (HOST_WIDE_INT, enum rtx_code);
- extern int arm_split_constant (RTX_CODE, enum machine_mode, rtx,
- HOST_WIDE_INT, rtx, rtx, int);
- extern RTX_CODE arm_canonicalize_comparison (RTX_CODE, rtx *, rtx *);
-@@ -101,12 +102,14 @@
- extern int arm_no_early_alu_shift_dep (rtx, rtx);
- extern int arm_no_early_alu_shift_value_dep (rtx, rtx);
- extern int arm_no_early_mul_dep (rtx, rtx);
-+extern int arm_mac_accumulator_is_result (rtx, rtx);
- extern int arm_mac_accumulator_is_mul_result (rtx, rtx);
-
- extern int tls_mentioned_p (rtx);
- extern int symbol_mentioned_p (rtx);
- extern int label_mentioned_p (rtx);
- extern RTX_CODE minmax_code (rtx);
-+extern bool arm_sat_operator_match (rtx, rtx, int *, bool *);
- extern int adjacent_mem_locations (rtx, rtx);
- extern bool gen_ldm_seq (rtx *, int, bool);
- extern bool gen_stm_seq (rtx *, int);
-@@ -222,6 +225,27 @@
-
- extern void arm_order_regs_for_local_alloc (void);
-
-+/* Vectorizer cost model implementation. */
-+struct cpu_vec_costs {
-+ const int scalar_stmt_cost; /* Cost of any scalar operation, excluding
-+ load and store. */
-+ const int scalar_load_cost; /* Cost of scalar load. */
-+ const int scalar_store_cost; /* Cost of scalar store. */
-+ const int vec_stmt_cost; /* Cost of any vector operation, excluding
-+ load, store, vector-to-scalar and
-+ scalar-to-vector operation. */
-+ const int vec_to_scalar_cost; /* Cost of vect-to-scalar operation. */
-+ const int scalar_to_vec_cost; /* Cost of scalar-to-vector operation. */
-+ const int vec_align_load_cost; /* Cost of aligned vector load. */
-+ const int vec_unalign_load_cost; /* Cost of unaligned vector load. */
-+ const int vec_unalign_store_cost; /* Cost of unaligned vector load. */
-+ const int vec_store_cost; /* Cost of vector store. */
-+ const int cond_taken_branch_cost; /* Cost of taken branch for vectorizer
-+ cost model. */
-+ const int cond_not_taken_branch_cost;/* Cost of not taken branch for
-+ vectorizer cost model. */
-+};
-+
- #ifdef RTX_CODE
- /* This needs to be here because we need RTX_CODE and similar. */
-
-@@ -238,13 +262,22 @@
- int l1_cache_line_size;
- bool prefer_constant_pool;
- int (*branch_cost) (bool, bool);
-+ /* Prefer Neon for 64-bit bitops. */
-+ bool prefer_neon_for_64bits;
-+ /* Vectorizer costs. */
-+ const struct cpu_vec_costs* vec_costs;
- };
-
- extern const struct tune_params *current_tune;
- extern int vfp3_const_double_for_fract_bits (rtx);
-+
-+extern void arm_emit_coreregs_64bit_shift (enum rtx_code, rtx, rtx, rtx, rtx,
-+ rtx);
- #endif /* RTX_CODE */
-
- extern void arm_expand_vec_perm (rtx target, rtx op0, rtx op1, rtx sel);
- extern bool arm_expand_vec_perm_const (rtx target, rtx op0, rtx op1, rtx sel);
-
-+extern bool arm_autoinc_modes_ok_p (enum machine_mode, enum arm_auto_incmodes);
-+
- #endif /* ! GCC_ARM_PROTOS_H */
--- a/src/gcc/config/arm/constraints.md
+++ b/src/gcc/config/arm/constraints.md
@@ -29,7 +29,7 @@
@@ -53781,87 +54980,6 @@
(match_test "TARGET_32BIT
&& imm_for_neon_mov_operand (op, GET_MODE (op))")))
---- a/src/gcc/config/arm/cortex-a15.md
-+++ b/src/gcc/config/arm/cortex-a15.md
-@@ -24,7 +24,7 @@
- ;; The Cortex-A15 core is modelled as a triple issue pipeline that has
- ;; the following dispatch units.
- ;; 1. Two pipelines for simple integer operations: SX1, SX2
--;; 2. Two pipelines for Neon and FP data-processing operations: CX1, CX2
-+;; 2. Individual units for Neon and FP operations as in cortex-a15-neon.md
- ;; 3. One pipeline for branch operations: BX
- ;; 4. One pipeline for integer multiply and divide operations: MX
- ;; 5. Two pipelines for load and store operations: LS1, LS2
-@@ -44,7 +44,6 @@
-
- ;; The main dispatch units
- (define_cpu_unit "ca15_sx1, ca15_sx2" "cortex_a15")
--(define_cpu_unit "ca15_cx1, ca15_cx2" "cortex_a15")
- (define_cpu_unit "ca15_ls1, ca15_ls2" "cortex_a15")
- (define_cpu_unit "ca15_bx, ca15_mx" "cortex_a15")
-
-@@ -62,14 +61,14 @@
- ;; Simple ALU without shift
- (define_insn_reservation "cortex_a15_alu" 2
- (and (eq_attr "tune" "cortexa15")
-- (and (eq_attr "type" "alu")
-+ (and (eq_attr "type" "alu_reg,simple_alu_imm")
- (eq_attr "neon_type" "none")))
- "ca15_issue1,(ca15_sx1,ca15_sx1_alu)|(ca15_sx2,ca15_sx2_alu)")
-
- ;; ALU ops with immediate shift
- (define_insn_reservation "cortex_a15_alu_shift" 3
- (and (eq_attr "tune" "cortexa15")
-- (and (eq_attr "type" "alu_shift")
-+ (and (eq_attr "type" "simple_alu_shift,alu_shift")
- (eq_attr "neon_type" "none")))
- "ca15_issue1,(ca15_sx1,ca15_sx1+ca15_sx1_shf,ca15_sx1_alu)\
- |(ca15_sx2,ca15_sx2+ca15_sx2_shf,ca15_sx2_alu)")
-@@ -129,20 +128,6 @@
- (eq_attr "neon_type" "none")))
- "ca15_issue1,ca15_bx")
-
--
--;; We lie with calls. They take up all issue slots, and form a block in the
--;; pipeline. The result however is available the next cycle.
--;;
--;; Addition of new units requires this to be updated.
--(define_insn_reservation "cortex_a15_call" 1
-- (and (eq_attr "tune" "cortexa15")
-- (and (eq_attr "type" "call")
-- (eq_attr "neon_type" "none")))
-- "ca15_issue3,\
-- ca15_sx1+ca15_sx2+ca15_bx+ca15_mx+ca15_cx1+ca15_cx2+ca15_ls1+ca15_ls2,\
-- ca15_sx1_alu+ca15_sx1_shf+ca15_sx1_sat+ca15_sx2_alu+ca15_sx2_shf\
-- +ca15_sx2_sat+ca15_ldr+ca15_str")
--
- ;; Load-store execution Unit
- ;;
- ;; Loads of up to two words.
-@@ -173,6 +158,23 @@
- (eq_attr "neon_type" "none")))
- "ca15_issue2,ca15_ls1+ca15_ls2,ca15_str,ca15_str")
-
-+;; We include Neon.md here to ensure that the branch can block the Neon units.
-+(include "cortex-a15-neon.md")
-+
-+;; We lie with calls. They take up all issue slots, and form a block in the
-+;; pipeline. The result however is available the next cycle.
-+(define_insn_reservation "cortex_a15_call" 1
-+ (and (eq_attr "tune" "cortexa15")
-+ (and (eq_attr "type" "call")
-+ (eq_attr "neon_type" "none")))
-+ "ca15_issue3,\
-+ ca15_sx1+ca15_sx2+ca15_bx+ca15_mx+ca15_cx_ij+ca15_cx_ik+ca15_ls1+ca15_ls2+\
-+ ca15_cx_imac1+ca15_cx_ialu1+ca15_cx_ialu2+ca15_cx_ishf+\
-+ ca15_cx_acc+ca15_cx_fmul1+ca15_cx_fmul2+ca15_cx_fmul3+ca15_cx_fmul4+\
-+ ca15_cx_falu1+ca15_cx_falu2+ca15_cx_falu3+ca15_cx_falu4+ca15_cx_vfp_i,\
-+ ca15_sx1_alu+ca15_sx1_shf+ca15_sx1_sat+ca15_sx2_alu+\
-+ ca15_sx2_shf+ca15_sx2_sat+ca15_ldr+ca15_str")
-+
- ;; Simple execution unit bypasses
- (define_bypass 1 "cortex_a15_alu"
- "cortex_a15_alu,cortex_a15_alu_shift,cortex_a15_alu_shift_reg")
--- a/src/gcc/config/arm/cortex-a15-neon.md
+++ b/src/gcc/config/arm/cortex-a15-neon.md
@@ -0,0 +1,1215 @@
@@ -55080,6 +56198,87 @@
+ cortex_a15_neon_fp_vrecps_vrsqrts_ddd,\
+ cortex_a15_neon_fp_vrecps_vrsqrts_qqq")
+
+--- a/src/gcc/config/arm/cortex-a15.md
++++ b/src/gcc/config/arm/cortex-a15.md
+@@ -24,7 +24,7 @@
+ ;; The Cortex-A15 core is modelled as a triple issue pipeline that has
+ ;; the following dispatch units.
+ ;; 1. Two pipelines for simple integer operations: SX1, SX2
+-;; 2. Two pipelines for Neon and FP data-processing operations: CX1, CX2
++;; 2. Individual units for Neon and FP operations as in cortex-a15-neon.md
+ ;; 3. One pipeline for branch operations: BX
+ ;; 4. One pipeline for integer multiply and divide operations: MX
+ ;; 5. Two pipelines for load and store operations: LS1, LS2
+@@ -44,7 +44,6 @@
+
+ ;; The main dispatch units
+ (define_cpu_unit "ca15_sx1, ca15_sx2" "cortex_a15")
+-(define_cpu_unit "ca15_cx1, ca15_cx2" "cortex_a15")
+ (define_cpu_unit "ca15_ls1, ca15_ls2" "cortex_a15")
+ (define_cpu_unit "ca15_bx, ca15_mx" "cortex_a15")
+
+@@ -62,14 +61,14 @@
+ ;; Simple ALU without shift
+ (define_insn_reservation "cortex_a15_alu" 2
+ (and (eq_attr "tune" "cortexa15")
+- (and (eq_attr "type" "alu")
++ (and (eq_attr "type" "alu_reg,simple_alu_imm")
+ (eq_attr "neon_type" "none")))
+ "ca15_issue1,(ca15_sx1,ca15_sx1_alu)|(ca15_sx2,ca15_sx2_alu)")
+
+ ;; ALU ops with immediate shift
+ (define_insn_reservation "cortex_a15_alu_shift" 3
+ (and (eq_attr "tune" "cortexa15")
+- (and (eq_attr "type" "alu_shift")
++ (and (eq_attr "type" "simple_alu_shift,alu_shift")
+ (eq_attr "neon_type" "none")))
+ "ca15_issue1,(ca15_sx1,ca15_sx1+ca15_sx1_shf,ca15_sx1_alu)\
+ |(ca15_sx2,ca15_sx2+ca15_sx2_shf,ca15_sx2_alu)")
+@@ -129,20 +128,6 @@
+ (eq_attr "neon_type" "none")))
+ "ca15_issue1,ca15_bx")
+
+-
+-;; We lie with calls. They take up all issue slots, and form a block in the
+-;; pipeline. The result however is available the next cycle.
+-;;
+-;; Addition of new units requires this to be updated.
+-(define_insn_reservation "cortex_a15_call" 1
+- (and (eq_attr "tune" "cortexa15")
+- (and (eq_attr "type" "call")
+- (eq_attr "neon_type" "none")))
+- "ca15_issue3,\
+- ca15_sx1+ca15_sx2+ca15_bx+ca15_mx+ca15_cx1+ca15_cx2+ca15_ls1+ca15_ls2,\
+- ca15_sx1_alu+ca15_sx1_shf+ca15_sx1_sat+ca15_sx2_alu+ca15_sx2_shf\
+- +ca15_sx2_sat+ca15_ldr+ca15_str")
+-
+ ;; Load-store execution Unit
+ ;;
+ ;; Loads of up to two words.
+@@ -173,6 +158,23 @@
+ (eq_attr "neon_type" "none")))
+ "ca15_issue2,ca15_ls1+ca15_ls2,ca15_str,ca15_str")
+
++;; We include Neon.md here to ensure that the branch can block the Neon units.
++(include "cortex-a15-neon.md")
++
++;; We lie with calls. They take up all issue slots, and form a block in the
++;; pipeline. The result however is available the next cycle.
++(define_insn_reservation "cortex_a15_call" 1
++ (and (eq_attr "tune" "cortexa15")
++ (and (eq_attr "type" "call")
++ (eq_attr "neon_type" "none")))
++ "ca15_issue3,\
++ ca15_sx1+ca15_sx2+ca15_bx+ca15_mx+ca15_cx_ij+ca15_cx_ik+ca15_ls1+ca15_ls2+\
++ ca15_cx_imac1+ca15_cx_ialu1+ca15_cx_ialu2+ca15_cx_ishf+\
++ ca15_cx_acc+ca15_cx_fmul1+ca15_cx_fmul2+ca15_cx_fmul3+ca15_cx_fmul4+\
++ ca15_cx_falu1+ca15_cx_falu2+ca15_cx_falu3+ca15_cx_falu4+ca15_cx_vfp_i,\
++ ca15_sx1_alu+ca15_sx1_shf+ca15_sx1_sat+ca15_sx2_alu+\
++ ca15_sx2_shf+ca15_sx2_sat+ca15_ldr+ca15_str")
++
+ ;; Simple execution unit bypasses
+ (define_bypass 1 "cortex_a15_alu"
+ "cortex_a15_alu,cortex_a15_alu_shift,cortex_a15_alu_shift_reg")
--- a/src/gcc/config/arm/cortex-a5.md
+++ b/src/gcc/config/arm/cortex-a5.md
@@ -58,12 +58,12 @@
@@ -55525,6 +56724,23 @@
+ neon_fp_vmla_ddd_scalar,\
+ neon_fp_vmla_qqq_scalar"))
+ "cortex_a7_both*2")
+--- a/src/gcc/config/arm/cortex-a8-neon.md
++++ b/src/gcc/config/arm/cortex-a8-neon.md
+@@ -149,12 +149,12 @@
+
+ (define_insn_reservation "cortex_a8_vfp_macs" 21
+ (and (eq_attr "tune" "cortexa8")
+- (eq_attr "type" "fmacs"))
++ (eq_attr "type" "fmacs,ffmas"))
+ "cortex_a8_vfp,cortex_a8_vfplite*20")
+
+ (define_insn_reservation "cortex_a8_vfp_macd" 26
+ (and (eq_attr "tune" "cortexa8")
+- (eq_attr "type" "fmacd"))
++ (eq_attr "type" "fmacd,ffmad"))
+ "cortex_a8_vfp,cortex_a8_vfplite*25")
+
+ (define_insn_reservation "cortex_a8_vfp_divs" 37
--- a/src/gcc/config/arm/cortex-a8.md
+++ b/src/gcc/config/arm/cortex-a8.md
@@ -85,7 +85,7 @@
@@ -55554,23 +56770,6 @@
(eq_attr "insn" "mov,mvn")))
"cortex_a8_default")
---- a/src/gcc/config/arm/cortex-a8-neon.md
-+++ b/src/gcc/config/arm/cortex-a8-neon.md
-@@ -149,12 +149,12 @@
-
- (define_insn_reservation "cortex_a8_vfp_macs" 21
- (and (eq_attr "tune" "cortexa8")
-- (eq_attr "type" "fmacs"))
-+ (eq_attr "type" "fmacs,ffmas"))
- "cortex_a8_vfp,cortex_a8_vfplite*20")
-
- (define_insn_reservation "cortex_a8_vfp_macd" 26
- (and (eq_attr "tune" "cortexa8")
-- (eq_attr "type" "fmacd"))
-+ (eq_attr "type" "fmacd,ffmad"))
- "cortex_a8_vfp,cortex_a8_vfplite*25")
-
- (define_insn_reservation "cortex_a8_vfp_divs" 37
--- a/src/gcc/config/arm/cortex-a9.md
+++ b/src/gcc/config/arm/cortex-a9.md
@@ -80,9 +80,9 @@
@@ -55640,26 +56839,6 @@
"cortex_m4_ex")
;; Byte, half-word and word load is two cycles.
---- a/src/gcc/config/arm/cortex-r4f.md
-+++ b/src/gcc/config/arm/cortex-r4f.md
-@@ -63,7 +63,7 @@
-
- (define_insn_reservation "cortex_r4_fmacs" 6
- (and (eq_attr "tune_cortexr4" "yes")
-- (eq_attr "type" "fmacs"))
-+ (eq_attr "type" "fmacs,ffmas"))
- "(cortex_r4_issue_a+cortex_r4_v1)|(cortex_r4_issue_b+cortex_r4_vmla)")
-
- (define_insn_reservation "cortex_r4_fdivs" 17
-@@ -119,7 +119,7 @@
-
- (define_insn_reservation "cortex_r4_fmacd" 20
- (and (eq_attr "tune_cortexr4" "yes")
-- (eq_attr "type" "fmacd"))
-+ (eq_attr "type" "fmacd,ffmad"))
- "cortex_r4_single_issue*13")
-
- (define_insn_reservation "cortex_r4_farith" 10
--- a/src/gcc/config/arm/cortex-r4.md
+++ b/src/gcc/config/arm/cortex-r4.md
@@ -78,19 +78,19 @@
@@ -55685,6 +56864,26 @@
"cortex_r4_alu")
(define_insn_reservation "cortex_r4_alu_shift_reg" 2
+--- a/src/gcc/config/arm/cortex-r4f.md
++++ b/src/gcc/config/arm/cortex-r4f.md
+@@ -63,7 +63,7 @@
+
+ (define_insn_reservation "cortex_r4_fmacs" 6
+ (and (eq_attr "tune_cortexr4" "yes")
+- (eq_attr "type" "fmacs"))
++ (eq_attr "type" "fmacs,ffmas"))
+ "(cortex_r4_issue_a+cortex_r4_v1)|(cortex_r4_issue_b+cortex_r4_vmla)")
+
+ (define_insn_reservation "cortex_r4_fdivs" 17
+@@ -119,7 +119,7 @@
+
+ (define_insn_reservation "cortex_r4_fmacd" 20
+ (and (eq_attr "tune_cortexr4" "yes")
+- (eq_attr "type" "fmacd"))
++ (eq_attr "type" "fmacd,ffmad"))
+ "cortex_r4_single_issue*13")
+
+ (define_insn_reservation "cortex_r4_farith" 10
--- a/src/gcc/config/arm/driver-arm.c
+++ b/src/gcc/config/arm/driver-arm.c
@@ -37,6 +37,7 @@
@@ -55889,6 +57088,14 @@
/* At this point, bpabi.h will have clobbered LINK_SPEC. We want to
use the GNU/Linux version, not the generic BPABI version. */
+@@ -103,3 +117,7 @@
+ #define CLEAR_INSN_CACHE(BEG, END) not_used
+
+ #define ARM_TARGET2_DWARF_FORMAT (DW_EH_PE_pcrel | DW_EH_PE_indirect)
++
++/* We do not have any MULTILIB_OPTIONS specified, so there are no
++ MULTILIB_DEFAULTS. */
++#undef MULTILIB_DEFAULTS
--- a/src/gcc/config/arm/neon-docgen.ml
+++ b/src/gcc/config/arm/neon-docgen.ml
@@ -103,6 +103,8 @@
@@ -55940,6 +57147,70 @@
(* When this function processes the element types in the ops table, it rewrites
them in a list of tuples (a,b,c):
+--- a/src/gcc/config/arm/neon-testgen.ml
++++ b/src/gcc/config/arm/neon-testgen.ml
+@@ -46,13 +46,14 @@
+ failwith ("Could not create test source file " ^ name ^ ": " ^ str)
+
+ (* Emit prologue code to a test source file. *)
+-let emit_prologue chan test_name =
++let emit_prologue chan test_name effective_target =
+ Printf.fprintf chan "/* Test the `%s' ARM Neon intrinsic. */\n" test_name;
+ Printf.fprintf chan "/* This file was autogenerated by neon-testgen. */\n\n";
+ Printf.fprintf chan "/* { dg-do assemble } */\n";
+- Printf.fprintf chan "/* { dg-require-effective-target arm_neon_ok } */\n";
++ Printf.fprintf chan "/* { dg-require-effective-target %s_ok } */\n"
++ effective_target;
+ Printf.fprintf chan "/* { dg-options \"-save-temps -O0\" } */\n";
+- Printf.fprintf chan "/* { dg-add-options arm_neon } */\n";
++ Printf.fprintf chan "/* { dg-add-options %s } */\n" effective_target;
+ Printf.fprintf chan "\n#include \"arm_neon.h\"\n\n";
+ Printf.fprintf chan "void test_%s (void)\n{\n" test_name
+
+@@ -79,9 +80,12 @@
+ (* The intrinsic returns a value. We need to do explict register
+ allocation for vget_low tests or they fail because of copy
+ elimination. *)
+- ((if List.mem Fixed_return_reg features then
++ ((if List.mem Fixed_vector_reg features then
+ Printf.fprintf chan " register %s out_%s asm (\"d18\");\n"
+ return_ty return_ty
++ else if List.mem Fixed_core_reg features then
++ Printf.fprintf chan " register %s out_%s asm (\"r0\");\n"
++ return_ty return_ty
+ else
+ Printf.fprintf chan " %s out_%s;\n" return_ty return_ty);
+ emit ())
+@@ -153,6 +157,17 @@
+ then (Const :: flags, String.sub ty 6 ((String.length ty) - 6))
+ else (flags, ty)) tys'
+
++(* Work out what the effective target should be. *)
++let effective_target features =
++ try
++ match List.find (fun feature ->
++ match feature with Requires_feature _ -> true
++ | _ -> false)
++ features with
++ Requires_feature "FMA" -> "arm_neonv2"
++ | _ -> assert false
++ with Not_found -> "arm_neon"
++
+ (* Given an intrinsic shape, produce a regexp that will match
+ the right-hand sides of instructions generated by an intrinsic of
+ that shape. *)
+@@ -260,8 +275,10 @@
+ "!?\\(\\[ \t\\]+@\\[a-zA-Z0-9 \\]+\\)?\\n")
+ (analyze_all_shapes features shape analyze_shape)
+ in
++ let effective_target = effective_target features
++ in
+ (* Emit file and function prologues. *)
+- emit_prologue chan test_name;
++ emit_prologue chan test_name effective_target;
+ (* Emit local variable declarations. *)
+ emit_automatics chan c_types features;
+ Printf.fprintf chan "\n";
--- a/src/gcc/config/arm/neon.md
+++ b/src/gcc/config/arm/neon.md
@@ -23,6 +23,7 @@
@@ -55988,7 +57259,7 @@
case 2: gcc_unreachable ();
case 4: return "vmov\t%Q0, %R0, %P1 @ <mode>";
case 5: return "vmov\t%P0, %Q1, %R1 @ <mode>";
-@@ -198,7 +194,7 @@
+@@ -198,10 +194,11 @@
}
}
[(set_attr "neon_type" "neon_int_1,*,neon_vmov,*,neon_mrrc,neon_mcr_2_mcrr,*,*,*")
@@ -55996,8 +57267,13 @@
+ (set_attr "type" "*,f_stored,*,f_loadd,*,*,alu_reg,load2,store2")
(set_attr "insn" "*,*,*,*,*,*,mov,*,*")
(set_attr "length" "4,4,4,4,4,4,8,8,8")
- (set_attr "pool_range" "*,*,*,1020,*,*,*,1020,*")
-@@ -243,7 +239,7 @@
+- (set_attr "pool_range" "*,*,*,1020,*,*,*,1020,*")
++ (set_attr "arm_pool_range" "*,*,*,1020,*,*,*,1020,*")
++ (set_attr "thumb2_pool_range" "*,*,*,1018,*,*,*,1018,*")
+ (set_attr "neg_pool_range" "*,*,*,1004,*,*,*,1004,*")])
+
+ (define_insn "*neon_mov<mode>"
+@@ -243,10 +240,11 @@
}
[(set_attr "neon_type" "neon_int_1,neon_stm_2,neon_vmov,neon_ldm_2,\
neon_mrrc,neon_mcr_2_mcrr,*,*,*")
@@ -56005,8 +57281,13 @@
+ (set_attr "type" "*,*,*,*,*,*,alu_reg,load4,store4")
(set_attr "insn" "*,*,*,*,*,*,mov,*,*")
(set_attr "length" "4,8,4,8,8,8,16,8,16")
- (set_attr "pool_range" "*,*,*,1020,*,*,*,1020,*")
-@@ -422,30 +418,33 @@
+- (set_attr "pool_range" "*,*,*,1020,*,*,*,1020,*")
++ (set_attr "arm_pool_range" "*,*,*,1020,*,*,*,1020,*")
++ (set_attr "thumb2_pool_range" "*,*,*,1018,*,*,*,1018,*")
+ (set_attr "neg_pool_range" "*,*,*,996,*,*,*,996,*")])
+
+ (define_expand "movti"
+@@ -422,30 +420,33 @@
[(set_attr "neon_type" "neon_vld1_1_2_regs")])
(define_insn "vec_set<mode>_internal"
@@ -56051,7 +57332,7 @@
"TARGET_NEON"
{
HOST_WIDE_INT elem = ffs ((int) INTVAL (operands[2])) - 1;
-@@ -460,18 +459,21 @@
+@@ -460,18 +461,21 @@
operands[0] = gen_rtx_REG (<V_HALF>mode, regno + hi);
operands[2] = GEN_INT (elt);
@@ -56079,7 +57360,7 @@
"TARGET_NEON"
{
HOST_WIDE_INT elem = ffs ((int) INTVAL (operands[2])) - 1;
-@@ -479,9 +481,12 @@
+@@ -479,9 +483,12 @@
operands[0] = gen_rtx_REG (DImode, regno);
@@ -56094,7 +57375,7 @@
)
(define_expand "vec_set<mode>"
-@@ -497,10 +502,10 @@
+@@ -497,10 +504,10 @@
})
(define_insn "vec_extract<mode>"
@@ -56108,7 +57389,7 @@
"TARGET_NEON"
{
if (BYTES_BIG_ENDIAN)
-@@ -509,16 +514,20 @@
+@@ -509,16 +516,20 @@
elt = GET_MODE_NUNITS (<MODE>mode) - 1 - elt;
operands[2] = GEN_INT (elt);
}
@@ -56134,7 +57415,7 @@
"TARGET_NEON"
{
int half_elts = GET_MODE_NUNITS (<MODE>mode) / 2;
-@@ -532,25 +541,31 @@
+@@ -532,25 +543,31 @@
operands[1] = gen_rtx_REG (<V_HALF>mode, regno + hi);
operands[2] = GEN_INT (elt);
@@ -56173,7 +57454,7 @@
)
(define_expand "vec_init<mode>"
-@@ -582,9 +597,9 @@
+@@ -582,9 +599,9 @@
)
(define_insn "adddi3_neon"
@@ -56186,7 +57467,7 @@
(clobber (reg:CC CC_REGNUM))]
"TARGET_NEON"
{
-@@ -594,13 +609,16 @@
+@@ -594,13 +611,16 @@
case 3: return "vadd.i64\t%P0, %P1, %P2";
case 1: return "#";
case 2: return "#";
@@ -56207,7 +57488,7 @@
)
(define_insn "*sub<mode>3_neon"
-@@ -637,7 +655,7 @@
+@@ -637,7 +657,7 @@
[(set_attr "neon_type" "neon_int_2,*,*,*,neon_int_2")
(set_attr "conds" "*,clob,clob,clob,*")
(set_attr "length" "*,8,8,8,*")
@@ -56216,7 +57497,7 @@
)
(define_insn "*mul<mode>3_neon"
-@@ -705,6 +723,63 @@
+@@ -705,6 +725,63 @@
(const_string "neon_mla_qqq_32_qqd_32_scalar")))))]
)
@@ -56280,7 +57561,7 @@
(define_insn "ior<mode>3"
[(set (match_operand:VDQ 0 "s_register_operand" "=w,w")
(ior:VDQ (match_operand:VDQ 1 "s_register_operand" "w,0")
-@@ -742,7 +817,7 @@
+@@ -742,7 +819,7 @@
}
[(set_attr "neon_type" "neon_int_1,neon_int_1,*,*,neon_int_1,neon_int_1")
(set_attr "length" "*,*,8,8,*,*")
@@ -56289,7 +57570,7 @@
)
;; The concrete forms of the Neon immediate-logic instructions are vbic and
-@@ -787,7 +862,7 @@
+@@ -787,7 +864,7 @@
}
[(set_attr "neon_type" "neon_int_1,neon_int_1,*,*,neon_int_1,neon_int_1")
(set_attr "length" "*,*,8,8,*,*")
@@ -56298,7 +57579,7 @@
)
(define_insn "orn<mode>3_neon"
-@@ -883,7 +958,7 @@
+@@ -883,7 +960,7 @@
veor\t%P0, %P1, %P2"
[(set_attr "neon_type" "neon_int_1,*,*,neon_int_1")
(set_attr "length" "*,8,8,*")
@@ -56307,7 +57588,7 @@
)
(define_insn "one_cmpl<mode>2"
-@@ -920,6 +995,45 @@
+@@ -920,6 +997,45 @@
(const_string "neon_int_3")))]
)
@@ -56353,7 +57634,7 @@
(define_insn "*umin<mode>3_neon"
[(set (match_operand:VDQIW 0 "s_register_operand" "=w")
(umin:VDQIW (match_operand:VDQIW 1 "s_register_operand" "w")
-@@ -1088,6 +1202,189 @@
+@@ -1088,6 +1204,189 @@
DONE;
})
@@ -56543,7 +57824,7 @@
;; Widening operations
(define_insn "widen_ssum<mode>3"
-@@ -1843,6 +2140,32 @@
+@@ -1843,6 +2142,32 @@
DONE;
})
@@ -56576,7 +57857,7 @@
; Used for intrinsics when flag_unsafe_math_optimizations is false.
(define_insn "neon_vmla<mode>_unspec"
-@@ -2108,7 +2431,7 @@
+@@ -2108,7 +2433,7 @@
[(set (match_operand:<V_cmp_result> 0 "s_register_operand" "=w,w")
(unspec:<V_cmp_result>
[(match_operand:VDQW 1 "s_register_operand" "w,w")
@@ -56585,7 +57866,7 @@
(match_operand:SI 3 "immediate_operand" "i,i")]
UNSPEC_VCEQ))]
"TARGET_NEON"
-@@ -2127,7 +2450,7 @@
+@@ -2127,7 +2452,7 @@
[(set (match_operand:<V_cmp_result> 0 "s_register_operand" "=w,w")
(unspec:<V_cmp_result>
[(match_operand:VDQW 1 "s_register_operand" "w,w")
@@ -56594,7 +57875,7 @@
(match_operand:SI 3 "immediate_operand" "i,i")]
UNSPEC_VCGE))]
"TARGET_NEON"
-@@ -2158,7 +2481,7 @@
+@@ -2158,7 +2483,7 @@
[(set (match_operand:<V_cmp_result> 0 "s_register_operand" "=w,w")
(unspec:<V_cmp_result>
[(match_operand:VDQW 1 "s_register_operand" "w,w")
@@ -56603,7 +57884,7 @@
(match_operand:SI 3 "immediate_operand" "i,i")]
UNSPEC_VCGT))]
"TARGET_NEON"
-@@ -2192,7 +2515,7 @@
+@@ -2192,7 +2517,7 @@
[(set (match_operand:<V_cmp_result> 0 "s_register_operand" "=w")
(unspec:<V_cmp_result>
[(match_operand:VDQW 1 "s_register_operand" "w")
@@ -56612,7 +57893,7 @@
(match_operand:SI 3 "immediate_operand" "i")]
UNSPEC_VCLE))]
"TARGET_NEON"
-@@ -2209,7 +2532,7 @@
+@@ -2209,7 +2534,7 @@
[(set (match_operand:<V_cmp_result> 0 "s_register_operand" "=w")
(unspec:<V_cmp_result>
[(match_operand:VDQW 1 "s_register_operand" "w")
@@ -56621,7 +57902,7 @@
(match_operand:SI 3 "immediate_operand" "i")]
UNSPEC_VCLT))]
"TARGET_NEON"
-@@ -2710,14 +3033,24 @@
+@@ -2710,14 +3035,24 @@
})
(define_expand "neon_vget_lanev2di"
@@ -56652,7 +57933,7 @@
DONE;
})
-@@ -4367,9 +4700,10 @@
+@@ -4367,9 +4702,10 @@
(define_insn "neon_vst1_lane<mode>"
[(set (match_operand:<V_elem> 0 "neon_struct_operand" "=Um")
@@ -56666,7 +57947,7 @@
"TARGET_NEON"
{
HOST_WIDE_INT lane = INTVAL (operands[2]);
-@@ -4388,9 +4722,10 @@
+@@ -4388,9 +4724,10 @@
(define_insn "neon_vst1_lane<mode>"
[(set (match_operand:<V_elem> 0 "neon_struct_operand" "=Um")
@@ -56680,7 +57961,7 @@
"TARGET_NEON"
{
HOST_WIDE_INT lane = INTVAL (operands[2]);
-@@ -5666,3 +6001,65 @@
+@@ -5666,3 +6003,65 @@
(const_string "neon_fp_vadd_qqq_vabs_qq"))
(const_string "neon_int_5")))]
)
@@ -56801,70 +58082,6 @@
Use_operands [| Dreg; Qreg |], "vget_low",
notype_1, pf_su_8_32;
Vget_low, [No_op],
---- a/src/gcc/config/arm/neon-testgen.ml
-+++ b/src/gcc/config/arm/neon-testgen.ml
-@@ -46,13 +46,14 @@
- failwith ("Could not create test source file " ^ name ^ ": " ^ str)
-
- (* Emit prologue code to a test source file. *)
--let emit_prologue chan test_name =
-+let emit_prologue chan test_name effective_target =
- Printf.fprintf chan "/* Test the `%s' ARM Neon intrinsic. */\n" test_name;
- Printf.fprintf chan "/* This file was autogenerated by neon-testgen. */\n\n";
- Printf.fprintf chan "/* { dg-do assemble } */\n";
-- Printf.fprintf chan "/* { dg-require-effective-target arm_neon_ok } */\n";
-+ Printf.fprintf chan "/* { dg-require-effective-target %s_ok } */\n"
-+ effective_target;
- Printf.fprintf chan "/* { dg-options \"-save-temps -O0\" } */\n";
-- Printf.fprintf chan "/* { dg-add-options arm_neon } */\n";
-+ Printf.fprintf chan "/* { dg-add-options %s } */\n" effective_target;
- Printf.fprintf chan "\n#include \"arm_neon.h\"\n\n";
- Printf.fprintf chan "void test_%s (void)\n{\n" test_name
-
-@@ -79,9 +80,12 @@
- (* The intrinsic returns a value. We need to do explict register
- allocation for vget_low tests or they fail because of copy
- elimination. *)
-- ((if List.mem Fixed_return_reg features then
-+ ((if List.mem Fixed_vector_reg features then
- Printf.fprintf chan " register %s out_%s asm (\"d18\");\n"
- return_ty return_ty
-+ else if List.mem Fixed_core_reg features then
-+ Printf.fprintf chan " register %s out_%s asm (\"r0\");\n"
-+ return_ty return_ty
- else
- Printf.fprintf chan " %s out_%s;\n" return_ty return_ty);
- emit ())
-@@ -153,6 +157,17 @@
- then (Const :: flags, String.sub ty 6 ((String.length ty) - 6))
- else (flags, ty)) tys'
-
-+(* Work out what the effective target should be. *)
-+let effective_target features =
-+ try
-+ match List.find (fun feature ->
-+ match feature with Requires_feature _ -> true
-+ | _ -> false)
-+ features with
-+ Requires_feature "FMA" -> "arm_neonv2"
-+ | _ -> assert false
-+ with Not_found -> "arm_neon"
-+
- (* Given an intrinsic shape, produce a regexp that will match
- the right-hand sides of instructions generated by an intrinsic of
- that shape. *)
-@@ -260,8 +275,10 @@
- "!?\\(\\[ \t\\]+@\\[a-zA-Z0-9 \\]+\\)?\\n")
- (analyze_all_shapes features shape analyze_shape)
- in
-+ let effective_target = effective_target features
-+ in
- (* Emit file and function prologues. *)
-- emit_prologue chan test_name;
-+ emit_prologue chan test_name effective_target;
- (* Emit local variable declarations. *)
- emit_automatics chan c_types features;
- Printf.fprintf chan "\n";
--- a/src/gcc/config/arm/predicates.md
+++ b/src/gcc/config/arm/predicates.md
@@ -89,6 +89,15 @@
@@ -56940,6 +58157,73 @@
$(srcdir)/config/arm/cortex-a8.md \
$(srcdir)/config/arm/cortex-a8-neon.md \
$(srcdir)/config/arm/cortex-a9.md \
+--- a/src/gcc/config/arm/t-linux-eabi
++++ b/src/gcc/config/arm/t-linux-eabi
+@@ -18,6 +18,8 @@
+
+ # We do not build a Thumb multilib for Linux because the definition of
+ # CLEAR_INSN_CACHE in linux-gas.h does not work in Thumb mode.
++# If you set MULTILIB_OPTIONS to a non-empty value you should also set
++# MULTILIB_DEFAULTS in linux-eabi.h.
+ MULTILIB_OPTIONS =
+ MULTILIB_DIRNAMES =
+
+--- a/src/gcc/config/arm/t-rtems-eabi
++++ b/src/gcc/config/arm/t-rtems-eabi
+@@ -1,8 +1,47 @@
+ # Custom RTEMS EABI multilibs
+
+-MULTILIB_OPTIONS = mthumb march=armv6-m/march=armv7/march=armv7-m
+-MULTILIB_DIRNAMES = thumb armv6-m armv7 armv7-m
+-MULTILIB_EXCEPTIONS = march=armv6-m march=armv7 march=armv7-m
+-MULTILIB_MATCHES =
+-MULTILIB_EXCLUSIONS =
+-MULTILIB_OSDIRNAMES =
++MULTILIB_OPTIONS = mthumb march=armv6-m/march=armv7-a/march=armv7-r/march=armv7-m mfpu=neon mfloat-abi=hard
++MULTILIB_DIRNAMES = thumb armv6-m armv7-a armv7-r armv7-m neon hard
++
++# Enumeration of multilibs
++
++MULTILIB_EXCEPTIONS =
++MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfpu=neon/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfpu=neon
++MULTILIB_EXCEPTIONS += mthumb/march=armv6-m/mfloat-abi=hard
++# MULTILIB_EXCEPTIONS += mthumb/march=armv6-m
++# MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfpu=neon/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfpu=neon
++MULTILIB_EXCEPTIONS += mthumb/march=armv7-a/mfloat-abi=hard
++# MULTILIB_EXCEPTIONS += mthumb/march=armv7-a
++MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfpu=neon/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfpu=neon
++MULTILIB_EXCEPTIONS += mthumb/march=armv7-r/mfloat-abi=hard
++# MULTILIB_EXCEPTIONS += mthumb/march=armv7-r
++MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfpu=neon/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfpu=neon
++MULTILIB_EXCEPTIONS += mthumb/march=armv7-m/mfloat-abi=hard
++# MULTILIB_EXCEPTIONS += mthumb/march=armv7-m
++MULTILIB_EXCEPTIONS += mthumb/mfpu=neon/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += mthumb/mfpu=neon
++MULTILIB_EXCEPTIONS += mthumb/mfloat-abi=hard
++# MULTILIB_EXCEPTIONS += mthumb
++MULTILIB_EXCEPTIONS += march=armv6-m/mfpu=neon/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += march=armv6-m/mfpu=neon
++MULTILIB_EXCEPTIONS += march=armv6-m/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += march=armv6-m
++MULTILIB_EXCEPTIONS += march=armv7-a/mfpu=neon/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += march=armv7-a/mfpu=neon
++MULTILIB_EXCEPTIONS += march=armv7-a/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += march=armv7-a
++MULTILIB_EXCEPTIONS += march=armv7-r/mfpu=neon/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += march=armv7-r/mfpu=neon
++MULTILIB_EXCEPTIONS += march=armv7-r/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += march=armv7-r
++MULTILIB_EXCEPTIONS += march=armv7-m/mfpu=neon/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += march=armv7-m/mfpu=neon
++MULTILIB_EXCEPTIONS += march=armv7-m/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += march=armv7-m
++MULTILIB_EXCEPTIONS += mfpu=neon/mfloat-abi=hard
++MULTILIB_EXCEPTIONS += mfpu=neon
++MULTILIB_EXCEPTIONS += mfloat-abi=hard
--- a/src/gcc/config/arm/thumb2.md
+++ b/src/gcc/config/arm/thumb2.md
@@ -1,5 +1,5 @@
@@ -56969,42 +58253,63 @@
(set_attr "length" "10,8")]
)
-@@ -180,7 +182,7 @@
+@@ -180,9 +182,9 @@
ldr%?\\t%0, %1
str%?\\t%1, %0
str%?\\t%1, %0"
- [(set_attr "type" "*,*,*,*,load1,load1,store1,store1")
+ [(set_attr "type" "*,*,simple_alu_imm,*,load1,load1,store1,store1")
(set_attr "predicable" "yes")
- (set_attr "pool_range" "*,*,*,*,1020,4096,*,*")
+- (set_attr "pool_range" "*,*,*,*,1020,4096,*,*")
++ (set_attr "pool_range" "*,*,*,*,1018,4094,*,*")
(set_attr "neg_pool_range" "*,*,*,*,0,0,*,*")]
-@@ -568,7 +570,7 @@
+ )
+
+@@ -217,7 +219,7 @@
+ ldr%(h%)\\t%0, %1\\t%@ movhi"
+ [(set_attr "type" "*,*,store1,load1")
+ (set_attr "predicable" "yes")
+- (set_attr "pool_range" "*,*,*,4096")
++ (set_attr "pool_range" "*,*,*,4094")
+ (set_attr "neg_pool_range" "*,*,*,250")]
+ )
+
+@@ -568,9 +570,9 @@
"@
sxtb%?\\t%0, %1
ldr%(sb%)\\t%0, %1"
- [(set_attr "type" "alu_shift,load_byte")
+ [(set_attr "type" "simple_alu_shift,load_byte")
(set_attr "predicable" "yes")
- (set_attr "pool_range" "*,4096")
+- (set_attr "pool_range" "*,4096")
++ (set_attr "pool_range" "*,4094")
(set_attr "neg_pool_range" "*,250")]
-@@ -581,7 +583,7 @@
+ )
+
+@@ -581,9 +583,9 @@
"@
uxth%?\\t%0, %1
ldr%(h%)\\t%0, %1"
- [(set_attr "type" "alu_shift,load_byte")
+ [(set_attr "type" "simple_alu_shift,load_byte")
(set_attr "predicable" "yes")
- (set_attr "pool_range" "*,4096")
+- (set_attr "pool_range" "*,4096")
++ (set_attr "pool_range" "*,4094")
(set_attr "neg_pool_range" "*,250")]
-@@ -594,7 +596,7 @@
+ )
+
+@@ -594,9 +596,9 @@
"@
uxtb%(%)\\t%0, %1
ldr%(b%)\\t%0, %1\\t%@ zero_extendqisi2"
- [(set_attr "type" "alu_shift,load_byte")
+ [(set_attr "type" "simple_alu_shift,load_byte")
(set_attr "predicable" "yes")
- (set_attr "pool_range" "*,4096")
+- (set_attr "pool_range" "*,4096")
++ (set_attr "pool_range" "*,4094")
(set_attr "neg_pool_range" "*,250")]
+ )
+
@@ -677,27 +679,6 @@
(set_attr "length" "2")]
)
@@ -57169,23 +58474,6 @@
(define_insn "*thumb2_negsi2_short"
[(set (match_operand:SI 0 "low_register_operand" "=l")
(neg:SI (match_operand:SI 1 "low_register_operand" "l")))
---- a/src/gcc/config/arm/vfp11.md
-+++ b/src/gcc/config/arm/vfp11.md
-@@ -56,12 +56,12 @@
-
- (define_insn_reservation "vfp_farith" 8
- (and (eq_attr "generic_vfp" "yes")
-- (eq_attr "type" "fadds,faddd,fconsts,fconstd,f_cvt,fmuls,fmacs"))
-+ (eq_attr "type" "fadds,faddd,fconsts,fconstd,f_cvt,fmuls,fmacs,ffmas"))
- "fmac")
-
- (define_insn_reservation "vfp_fmul" 9
- (and (eq_attr "generic_vfp" "yes")
-- (eq_attr "type" "fmuld,fmacd"))
-+ (eq_attr "type" "fmuld,fmacd,ffmad"))
- "fmac*2")
-
- (define_insn_reservation "vfp_fdivs" 19
--- a/src/gcc/config/arm/vfp.md
+++ b/src/gcc/config/arm/vfp.md
@@ -38,6 +38,8 @@
@@ -57207,14 +58495,17 @@
(set_attr "insn" "mov,mov,mvn,mov,*,*,*,*,*,*,*")
(set_attr "pool_range" "*,*,*,*,4096,*,*,*,*,1020,*")
(set_attr "neg_pool_range" "*,*,*,*,4084,*,*,*,*,1008,*")]
-@@ -125,6 +128,7 @@
+@@ -125,8 +128,9 @@
"
[(set_attr "predicable" "yes")
(set_attr "type" "*,*,*,*,load1,load1,store1,store1,r_2_f,f_2_r,fcpys,f_loads,f_stores")
+ (set_attr "neon_type" "*,*,*,*,*,*,*,*,neon_mcr,neon_mrc,neon_vmov,*,*")
(set_attr "insn" "mov,mov,mvn,mov,*,*,*,*,*,*,*,*,*")
- (set_attr "pool_range" "*,*,*,*,1020,4096,*,*,*,*,*,1020,*")
+- (set_attr "pool_range" "*,*,*,*,1020,4096,*,*,*,*,*,1020,*")
++ (set_attr "pool_range" "*,*,*,*,1018,4094,*,*,*,*,*,1018,*")
(set_attr "neg_pool_range" "*,*,*,*, 0, 0,*,*,*,*,*,1008,*")]
+ )
+
@@ -138,7 +142,9 @@
(match_operand:DI 1 "di_operand" "r,rDa,Db,Dc,mi,mi,r,r,w,w,Uvi,w"))]
"TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP && arm_tune != cortexa8
@@ -57226,7 +58517,17 @@
"*
switch (which_alternative)
{
-@@ -187,7 +193,8 @@
+@@ -177,7 +183,8 @@
+ (const_int 8)
+ (const_int 4))]
+ (const_int 4)))
+- (set_attr "pool_range" "*,*,*,*,1020,4096,*,*,*,*,1020,*")
++ (set_attr "arm_pool_range" "*,*,*,*,1020,4096,*,*,*,*,1020,*")
++ (set_attr "thumb2_pool_range" "*,*,*,*,1018,4094,*,*,*,*,1018,*")
+ (set_attr "neg_pool_range" "*,*,*,*,1004,0,*,*,*,*,1004,*")
+ (set_attr "arch" "t2,any,any,any,a,t2,any,any,any,any,any,any")]
+ )
+@@ -187,7 +194,8 @@
(match_operand:DI 1 "di_operand" "r,rDa,Db,Dc,mi,mi,r,r,w,w,Uvi,w"))]
"TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP && arm_tune == cortexa8
&& ( register_operand (operands[0], DImode)
@@ -57236,7 +58537,7 @@
"*
switch (which_alternative)
{
-@@ -213,6 +220,7 @@
+@@ -213,6 +221,7 @@
}
"
[(set_attr "type" "*,*,*,*,load2,load2,store2,r_2_f,f_2_r,ffarithd,f_loadd,f_stored")
@@ -57244,7 +58545,17 @@
(set (attr "length") (cond [(eq_attr "alternative" "1") (const_int 8)
(eq_attr "alternative" "2") (const_int 12)
(eq_attr "alternative" "3") (const_int 16)
-@@ -371,6 +379,7 @@
+@@ -222,7 +231,8 @@
+ * 4")]
+ (const_int 4)))
+ (set_attr "predicable" "yes")
+- (set_attr "pool_range" "*,*,*,*,1020,4096,*,*,*,*,1020,*")
++ (set_attr "arm_pool_range" "*,*,*,*,1018,4094,*,*,*,*,1018,*")
++ (set_attr "thumb2_pool_range" "*,*,*,*,1018,4094,*,*,*,*,1018,*")
+ (set_attr "neg_pool_range" "*,*,*,*,1004,0,*,*,*,*,1004,*")
+ (set (attr "ce_count")
+ (symbol_ref "get_attr_length (insn) / 4"))
+@@ -371,6 +381,7 @@
[(set_attr "predicable" "yes")
(set_attr "type"
"r_2_f,f_2_r,fconsts,f_loads,f_stores,load1,store1,fcpys,*")
@@ -57252,15 +58563,18 @@
(set_attr "insn" "*,*,*,*,*,*,*,*,mov")
(set_attr "pool_range" "*,*,*,1020,*,4096,*,*,*")
(set_attr "neg_pool_range" "*,*,*,1008,*,4080,*,*,*")]
-@@ -408,6 +417,7 @@
+@@ -408,8 +419,9 @@
[(set_attr "predicable" "yes")
(set_attr "type"
"r_2_f,f_2_r,fconsts,f_loads,f_stores,load1,store1,fcpys,*")
+ (set_attr "neon_type" "neon_mcr,neon_mrc,*,*,*,*,*,neon_vmov,*")
(set_attr "insn" "*,*,*,*,*,*,*,*,mov")
- (set_attr "pool_range" "*,*,*,1020,*,4092,*,*,*")
+- (set_attr "pool_range" "*,*,*,1020,*,4092,*,*,*")
++ (set_attr "pool_range" "*,*,*,1018,*,4090,*,*,*")
(set_attr "neg_pool_range" "*,*,*,1008,*,0,*,*,*")]
-@@ -451,6 +461,7 @@
+ )
+
+@@ -451,6 +463,7 @@
"
[(set_attr "type"
"r_2_f,f_2_r,fconstd,f_loadd,f_stored,load2,store2,ffarithd,*")
@@ -57268,7 +58582,7 @@
(set (attr "length") (cond [(eq_attr "alternative" "5,6,8") (const_int 8)
(eq_attr "alternative" "7")
(if_then_else
-@@ -494,6 +505,7 @@
+@@ -494,6 +507,7 @@
"
[(set_attr "type"
"r_2_f,f_2_r,fconstd,f_loadd,f_stored,load2,store2,ffarithd,*")
@@ -57276,7 +58590,16 @@
(set (attr "length") (cond [(eq_attr "alternative" "5,6,8") (const_int 8)
(eq_attr "alternative" "7")
(if_then_else
-@@ -528,7 +540,8 @@
+@@ -501,7 +515,7 @@
+ (const_int 8)
+ (const_int 4))]
+ (const_int 4)))
+- (set_attr "pool_range" "*,*,*,1020,*,4096,*,*,*")
++ (set_attr "pool_range" "*,*,*,1018,*,4094,*,*,*")
+ (set_attr "neg_pool_range" "*,*,*,1008,*,0,*,*,*")]
+ )
+
+@@ -528,7 +542,8 @@
fmrs%D3\\t%0, %2\;fmrs%d3\\t%0, %1"
[(set_attr "conds" "use")
(set_attr "length" "4,4,8,4,4,8,4,4,8")
@@ -57286,7 +58609,7 @@
)
(define_insn "*thumb2_movsfcc_vfp"
-@@ -551,7 +564,8 @@
+@@ -551,7 +566,8 @@
ite\\t%D3\;fmrs%D3\\t%0, %2\;fmrs%d3\\t%0, %1"
[(set_attr "conds" "use")
(set_attr "length" "6,6,10,6,6,10,6,6,10")
@@ -57296,7 +58619,7 @@
)
(define_insn "*movdfcc_vfp"
-@@ -574,7 +588,8 @@
+@@ -574,7 +590,8 @@
fmrrd%D3\\t%Q0, %R0, %P2\;fmrrd%d3\\t%Q0, %R0, %P1"
[(set_attr "conds" "use")
(set_attr "length" "4,4,8,4,4,8,4,4,8")
@@ -57306,7 +58629,7 @@
)
(define_insn "*thumb2_movdfcc_vfp"
-@@ -597,7 +612,8 @@
+@@ -597,7 +614,8 @@
ite\\t%D3\;fmrrd%D3\\t%Q0, %R0, %P2\;fmrrd%d3\\t%Q0, %R0, %P1"
[(set_attr "conds" "use")
(set_attr "length" "6,6,10,6,6,10,6,6,10")
@@ -57316,7 +58639,7 @@
)
-@@ -886,6 +902,54 @@
+@@ -886,6 +904,54 @@
(set_attr "type" "fmacd")]
)
@@ -57371,6 +58694,253 @@
;; Conversion routines
+@@ -1144,18 +1210,18 @@
+ (set_attr "type" "fcmpd")]
+ )
+
+-;; Fixed point to floating point conversions.
++;; Fixed point to floating point conversions.
+ (define_code_iterator FCVT [unsigned_float float])
+ (define_code_attr FCVTI32typename [(unsigned_float "u32") (float "s32")])
+
+ (define_insn "*combine_vcvt_f32_<FCVTI32typename>"
+ [(set (match_operand:SF 0 "s_register_operand" "=t")
+ (mult:SF (FCVT:SF (match_operand:SI 1 "s_register_operand" "0"))
+- (match_operand 2
++ (match_operand 2
+ "const_double_vcvt_power_of_two_reciprocal" "Dt")))]
+ "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP3 && !flag_rounding_math"
+- "vcvt.f32.<FCVTI32typename>\\t%0, %1, %v2"
+- [(set_attr "predicable" "no")
++ "vcvt%?.f32.<FCVTI32typename>\\t%0, %1, %v2"
++ [(set_attr "predicable" "yes")
+ (set_attr "type" "f_cvt")]
+ )
+
+@@ -1164,15 +1230,16 @@
+ (define_insn "*combine_vcvt_f64_<FCVTI32typename>"
+ [(set (match_operand:DF 0 "s_register_operand" "=x,x,w")
+ (mult:DF (FCVT:DF (match_operand:SI 1 "s_register_operand" "r,t,r"))
+- (match_operand 2
++ (match_operand 2
+ "const_double_vcvt_power_of_two_reciprocal" "Dt,Dt,Dt")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP3 && !flag_rounding_math
++ "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP3 && !flag_rounding_math
+ && !TARGET_VFP_SINGLE"
+ "@
+- vmov.f32\\t%0, %1\;vcvt.f64.<FCVTI32typename>\\t%P0, %P0, %v2
+- vmov.f32\\t%0, %1\;vcvt.f64.<FCVTI32typename>\\t%P0, %P0, %v2
+- vmov.f64\\t%P0, %1, %1\;vcvt.f64.<FCVTI32typename>\\t%P0, %P0, %v2"
+- [(set_attr "predicable" "no")
++ vmov%?.f32\\t%0, %1\;vcvt%?.f64.<FCVTI32typename>\\t%P0, %P0, %v2
++ vmov%?.f32\\t%0, %1\;vcvt%?.f64.<FCVTI32typename>\\t%P0, %P0, %v2
++ vmov%?.f64\\t%P0, %1, %1\;vcvt%?.f64.<FCVTI32typename>\\t%P0, %P0, %v2"
++ [(set_attr "predicable" "yes")
++ (set_attr "ce_count" "2")
+ (set_attr "type" "f_cvt")
+ (set_attr "length" "8")]
+ )
+--- a/src/gcc/config/arm/vfp11.md
++++ b/src/gcc/config/arm/vfp11.md
+@@ -56,12 +56,12 @@
+
+ (define_insn_reservation "vfp_farith" 8
+ (and (eq_attr "generic_vfp" "yes")
+- (eq_attr "type" "fadds,faddd,fconsts,fconstd,f_cvt,fmuls,fmacs"))
++ (eq_attr "type" "fadds,faddd,fconsts,fconstd,f_cvt,fmuls,fmacs,ffmas"))
+ "fmac")
+
+ (define_insn_reservation "vfp_fmul" 9
+ (and (eq_attr "generic_vfp" "yes")
+- (eq_attr "type" "fmuld,fmacd"))
++ (eq_attr "type" "fmuld,fmacd,ffmad"))
+ "fmac*2")
+
+ (define_insn_reservation "vfp_fdivs" 19
+--- a/src/gcc/config/avr/avr.c
++++ b/src/gcc/config/avr/avr.c
+@@ -549,7 +549,12 @@
+ {
+ tree args = TYPE_ARG_TYPES (TREE_TYPE (decl));
+ tree ret = TREE_TYPE (TREE_TYPE (decl));
+- const char *name = IDENTIFIER_POINTER (DECL_NAME (decl));
++ const char *name;
++
++ name = DECL_ASSEMBLER_NAME_SET_P (decl)
++ /* Remove the leading '*' added in set_user_assembler_name. */
++ ? 1 + IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))
++ : IDENTIFIER_POINTER (DECL_NAME (decl));
+
+ /* Silently ignore 'signal' if 'interrupt' is present. AVR-LibC startet
+ using this when it switched from SIGNAL and INTERRUPT to ISR. */
+@@ -1004,7 +1009,7 @@
+ leaf function and thus X has already been saved. */
+
+ int irq_state = -1;
+- HOST_WIDE_INT size_cfa = size;
++ HOST_WIDE_INT size_cfa = size, neg_size;
+ rtx fp_plus_insns, fp, my_fp;
+
+ gcc_assert (frame_pointer_needed
+@@ -1043,6 +1048,7 @@
+ }
+
+ size = trunc_int_for_mode (size, GET_MODE (my_fp));
++ neg_size = trunc_int_for_mode (-size, GET_MODE (my_fp));
+
+ /************ Method 1: Adjust frame pointer ************/
+
+@@ -1062,7 +1068,7 @@
+ gen_rtx_SET (VOIDmode, fp, stack_pointer_rtx));
+ }
+
+- insn = emit_move_insn (my_fp, plus_constant (my_fp, -size));
++ insn = emit_move_insn (my_fp, plus_constant (my_fp, neg_size));
+ if (frame_pointer_needed)
+ {
+ RTX_FRAME_RELATED_P (insn) = 1;
+--- a/src/gcc/config/darwin-c.c
++++ b/src/gcc/config/darwin-c.c
+@@ -25,6 +25,7 @@
+ #include "tm.h"
+ #include "cpplib.h"
+ #include "tree.h"
++#include "target.h"
+ #include "incpath.h"
+ #include "c-family/c-common.h"
+ #include "c-family/c-pragma.h"
+@@ -36,6 +37,7 @@
+ #include "prefix.h"
+ #include "c-family/c-target.h"
+ #include "c-family/c-target-def.h"
++#include "cgraph.h"
+
+ /* Pragmas. */
+
+@@ -711,13 +713,60 @@
+ }
+ };
+
+-#undef TARGET_HANDLE_C_OPTION
++
++/* Support routines to dump the class references for NeXT ABI v1, aka
++ 32-bits ObjC-2.0, as top-level asms.
++ The following two functions should only be called from
++ objc/objc-next-runtime-abi-01.c. */
++
++static void
++darwin_objc_declare_unresolved_class_reference (const char *name)
++{
++ const char *lazy_reference = ".lazy_reference\t";
++ const char *hard_reference = ".reference\t";
++ const char *reference = MACHOPIC_INDIRECT ? lazy_reference : hard_reference;
++ size_t len = strlen (reference) + strlen(name) + 2;
++ char *buf = (char *) alloca (len);
++
++ gcc_checking_assert (!strncmp (name, ".objc_class_name_", 17));
++
++ snprintf (buf, len, "%s%s", reference, name);
++ cgraph_add_asm_node (build_string (strlen (buf), buf));
++}
++
++static void
++darwin_objc_declare_class_definition (const char *name)
++{
++ const char *xname = targetm.strip_name_encoding (name);
++ size_t len = strlen (xname) + 7 + 5;
++ char *buf = (char *) alloca (len);
++
++ gcc_checking_assert (!strncmp (name, ".objc_class_name_", 17)
++ || !strncmp (name, "*.objc_category_name_", 21));
++
++ /* Mimic default_globalize_label. */
++ snprintf (buf, len, ".globl\t%s", xname);
++ cgraph_add_asm_node (build_string (strlen (buf), buf));
++
++ snprintf (buf, len, "%s = 0", xname);
++ cgraph_add_asm_node (build_string (strlen (buf), buf));
++}
++
++#undef TARGET_HANDLE_C_OPTION
+ #define TARGET_HANDLE_C_OPTION handle_c_option
+
+-#undef TARGET_OBJC_CONSTRUCT_STRING_OBJECT
++#undef TARGET_OBJC_CONSTRUCT_STRING_OBJECT
+ #define TARGET_OBJC_CONSTRUCT_STRING_OBJECT darwin_objc_construct_string
+
+-#undef TARGET_STRING_OBJECT_REF_TYPE_P
++#undef TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE
++#define TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE \
++ darwin_objc_declare_unresolved_class_reference
++
++#undef TARGET_OBJC_DECLARE_CLASS_DEFINITION
++#define TARGET_OBJC_DECLARE_CLASS_DEFINITION \
++ darwin_objc_declare_class_definition
++
++#undef TARGET_STRING_OBJECT_REF_TYPE_P
+ #define TARGET_STRING_OBJECT_REF_TYPE_P darwin_cfstring_ref_p
+
+ #undef TARGET_CHECK_STRING_OBJECT_FORMAT_ARG
+--- a/src/gcc/config/darwin-protos.h
++++ b/src/gcc/config/darwin-protos.h
+@@ -26,6 +26,7 @@
+ extern void machopic_output_function_base_name (FILE *);
+ extern const char *machopic_indirection_name (rtx, bool);
+ extern const char *machopic_mcount_stub_name (void);
++extern bool machopic_should_output_picbase_label (void);
+
+ #ifdef RTX_CODE
+
+--- a/src/gcc/config/darwin.c
++++ b/src/gcc/config/darwin.c
+@@ -362,14 +362,13 @@
+
+ static GTY(()) const char * function_base_func_name;
+ static GTY(()) int current_pic_label_num;
++static GTY(()) int emitted_pic_label_num;
+
+-void
+-machopic_output_function_base_name (FILE *file)
++static void
++update_pic_label_number_if_needed (void)
+ {
+ const char *current_name;
+
+- /* If dynamic-no-pic is on, we should not get here. */
+- gcc_assert (!MACHO_DYNAMIC_NO_PIC_P);
+ /* When we are generating _get_pc thunks within stubs, there is no current
+ function. */
+ if (current_function_decl)
+@@ -387,7 +386,28 @@
+ ++current_pic_label_num;
+ function_base_func_name = "L_machopic_stub_dummy";
+ }
+- fprintf (file, "L%011d$pb", current_pic_label_num);
++}
++
++void
++machopic_output_function_base_name (FILE *file)
++{
++ /* If dynamic-no-pic is on, we should not get here. */
++ gcc_assert (!MACHO_DYNAMIC_NO_PIC_P);
++
++ update_pic_label_number_if_needed ();
++ fprintf (file, "L%d$pb", current_pic_label_num);
++}
++
++bool
++machopic_should_output_picbase_label (void)
++{
++ update_pic_label_number_if_needed ();
++
++ if (current_pic_label_num == emitted_pic_label_num)
++ return false;
++
++ emitted_pic_label_num = current_pic_label_num;
++ return true;
+ }
+
+ /* The suffix attached to non-lazy pointer symbols. */
--- a/src/gcc/config/darwin.h
+++ b/src/gcc/config/darwin.h
@@ -356,7 +356,9 @@
@@ -57402,9 +58972,545 @@
/* When generating stabs debugging, use N_BINCL entries. */
#define DBX_USE_BINCL
+@@ -612,8 +616,6 @@
+ fprintf (FILE, "\"%s\"", xname); \
+ else if (darwin_label_is_anonymous_local_objc_name (xname)) \
+ fprintf (FILE, "L%s", xname); \
+- else if (!strncmp (xname, ".objc_class_name_", 17)) \
+- fprintf (FILE, "%s", xname); \
+ else if (xname[0] != '"' && name_needs_quotes (xname)) \
+ asm_fprintf (FILE, "\"%U%s\"", xname); \
+ else \
+@@ -696,29 +698,6 @@
+ #undef TARGET_ASM_RELOC_RW_MASK
+ #define TARGET_ASM_RELOC_RW_MASK machopic_reloc_rw_mask
+
+-
+-#define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME) \
+- do { \
+- if (FILE) { \
+- if (MACHOPIC_INDIRECT) \
+- fprintf (FILE, "\t.lazy_reference "); \
+- else \
+- fprintf (FILE, "\t.reference "); \
+- assemble_name (FILE, NAME); \
+- fprintf (FILE, "\n"); \
+- } \
+- } while (0)
+-
+-#define ASM_DECLARE_CLASS_REFERENCE(FILE,NAME) \
+- do { \
+- if (FILE) { \
+- fprintf (FILE, "\t"); \
+- assemble_name (FILE, NAME); \
+- fprintf (FILE, "=0\n"); \
+- (*targetm.asm_out.globalize_label) (FILE, NAME); \
+- } \
+- } while (0)
+-
+ /* Globalizing directive for a label. */
+ #define GLOBAL_ASM_OP "\t.globl "
+ #define TARGET_ASM_GLOBALIZE_LABEL darwin_globalize_label
+--- a/src/gcc/config/i386/driver-i386.c
++++ b/src/gcc/config/i386/driver-i386.c
+@@ -350,7 +350,10 @@
+ enum vendor_signatures
+ {
+ SIG_INTEL = 0x756e6547 /* Genu */,
+- SIG_AMD = 0x68747541 /* Auth */
++ SIG_AMD = 0x68747541 /* Auth */,
++ SIG_CENTAUR = 0x746e6543 /* Cent */,
++ SIG_CYRIX = 0x69727943 /* Cyri */,
++ SIG_NSC = 0x646f6547 /* Geod */
+ };
+
+ enum processor_signatures
+@@ -510,7 +513,10 @@
+
+ if (!arch)
+ {
+- if (vendor == SIG_AMD)
++ if (vendor == SIG_AMD
++ || vendor == SIG_CENTAUR
++ || vendor == SIG_CYRIX
++ || vendor == SIG_NSC)
+ cache = detect_caches_amd (ext_level);
+ else if (vendor == SIG_INTEL)
+ {
+@@ -549,6 +555,37 @@
+ else
+ processor = PROCESSOR_PENTIUM;
+ }
++ else if (vendor == SIG_CENTAUR)
++ {
++ if (arch)
++ {
++ switch (family)
++ {
++ case 6:
++ if (model > 9)
++ /* Use the default detection procedure. */
++ processor = PROCESSOR_GENERIC32;
++ else if (model == 9)
++ cpu = "c3-2";
++ else if (model >= 6)
++ cpu = "c3";
++ else
++ processor = PROCESSOR_GENERIC32;
++ break;
++ case 5:
++ if (has_3dnow)
++ cpu = "winchip2";
++ else if (has_mmx)
++ cpu = "winchip2-c6";
++ else
++ processor = PROCESSOR_GENERIC32;
++ break;
++ default:
++ /* We have no idea. */
++ processor = PROCESSOR_GENERIC32;
++ }
++ }
++ }
+ else
+ {
+ switch (family)
+@@ -593,13 +630,18 @@
+ /* Atom. */
+ cpu = "atom";
+ break;
++ case 0x0f:
++ /* Merom. */
++ case 0x17:
++ case 0x1d:
++ /* Penryn. */
++ cpu = "core2";
++ break;
+ case 0x1a:
+ case 0x1e:
+ case 0x1f:
+ case 0x2e:
+ /* Nehalem. */
+- cpu = "corei7";
+- break;
+ case 0x25:
+ case 0x2c:
+ case 0x2f:
+@@ -611,14 +653,10 @@
+ /* Sandy Bridge. */
+ cpu = "corei7-avx";
+ break;
+- case 0x17:
+- case 0x1d:
+- /* Penryn. */
+- cpu = "core2";
+- break;
+- case 0x0f:
+- /* Merom. */
+- cpu = "core2";
++ case 0x3a:
++ case 0x3e:
++ /* Ivy Bridge. */
++ cpu = "core-avx-i";
+ break;
+ default:
+ if (arch)
--- a/src/gcc/config/i386/i386.c
+++ b/src/gcc/config/i386/i386.c
-@@ -20026,7 +20026,7 @@
+@@ -2979,7 +2979,7 @@
+ | PTA_SSSE3 | PTA_CX16},
+ {"corei7", PROCESSOR_COREI7_64, CPU_COREI7,
+ PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
+- | PTA_SSSE3 | PTA_SSE4_1 | PTA_SSE4_2 | PTA_CX16},
++ | PTA_SSSE3 | PTA_SSE4_1 | PTA_SSE4_2 | PTA_CX16 | PTA_POPCNT},
+ {"corei7-avx", PROCESSOR_COREI7_64, CPU_COREI7,
+ PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
+ | PTA_SSSE3 | PTA_SSE4_1 | PTA_SSE4_2 | PTA_AVX
+@@ -6303,7 +6303,7 @@
+
+ /* Likewise, error if the ABI requires us to return values in the
+ x87 registers and the user specified -mno-80387. */
+- if (!TARGET_80387 && in_return)
++ if (!TARGET_FLOAT_RETURNS_IN_80387 && in_return)
+ for (i = 0; i < n; i++)
+ if (regclass[i] == X86_64_X87_CLASS
+ || regclass[i] == X86_64_X87UP_CLASS
+@@ -7129,9 +7129,15 @@
+ switch (regno)
+ {
+ case AX_REG:
++ case DX_REG:
+ return true;
+-
+- case FIRST_FLOAT_REG:
++ case DI_REG:
++ case SI_REG:
++ return TARGET_64BIT && ix86_abi != MS_ABI;
++
++ /* Complex values are returned in %st(0)/%st(1) pair. */
++ case ST0_REG:
++ case ST1_REG:
+ /* TODO: The function should depend on current function ABI but
+ builtins.c would need updating then. Therefore we use the
+ default ABI. */
+@@ -7139,10 +7145,12 @@
+ return false;
+ return TARGET_FLOAT_RETURNS_IN_80387;
+
+- case FIRST_SSE_REG:
++ /* Complex values are returned in %xmm0/%xmm1 pair. */
++ case XMM0_REG:
++ case XMM1_REG:
+ return TARGET_SSE;
+
+- case FIRST_MMX_REG:
++ case MM0_REG:
+ if (TARGET_MACHO || TARGET_64BIT)
+ return false;
+ return TARGET_MMX;
+@@ -8613,17 +8621,12 @@
+
+ if (!flag_pic)
+ {
+- xops[2] = gen_rtx_LABEL_REF (Pmode, label ? label : gen_label_rtx ());
++ if (TARGET_MACHO)
++ /* We don't need a pic base, we're not producing pic. */
++ gcc_unreachable ();
+
++ xops[2] = gen_rtx_LABEL_REF (Pmode, label ? label : gen_label_rtx ());
+ output_asm_insn ("mov%z0\t{%2, %0|%0, %2}", xops);
+-
+-#if TARGET_MACHO
+- /* Output the Mach-O "canonical" label name ("Lxx$pb") here too. This
+- is what will be referenced by the Mach-O PIC subsystem. */
+- if (!label)
+- ASM_OUTPUT_LABEL (asm_out_file, MACHOPIC_FUNCTION_BASE_NAME);
+-#endif
+-
+ targetm.asm_out.internal_label (asm_out_file, "L",
+ CODE_LABEL_NUMBER (XEXP (xops[2], 0)));
+ }
+@@ -8636,12 +8639,18 @@
+ xops[2] = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (name));
+ xops[2] = gen_rtx_MEM (QImode, xops[2]);
+ output_asm_insn ("call\t%X2", xops);
+- /* Output the Mach-O "canonical" label name ("Lxx$pb") here too. This
+- is what will be referenced by the Mach-O PIC subsystem. */
++
+ #if TARGET_MACHO
+- if (!label)
++ /* Output the Mach-O "canonical" pic base label name ("Lxx$pb") here.
++ This is what will be referenced by the Mach-O PIC subsystem. */
++ if (machopic_should_output_picbase_label () || !label)
+ ASM_OUTPUT_LABEL (asm_out_file, MACHOPIC_FUNCTION_BASE_NAME);
+- else
++
++ /* When we are restoring the pic base at the site of a nonlocal label,
++ and we decided to emit the pic base above, we will still output a
++ local label used for calculating the correction offset (even though
++ the offset will be 0 in that case). */
++ if (label)
+ targetm.asm_out.internal_label (asm_out_file, "L",
+ CODE_LABEL_NUMBER (label));
+ #endif
+@@ -8717,7 +8726,8 @@
+ && (df_regs_ever_live_p (REAL_PIC_OFFSET_TABLE_REGNUM)
+ || crtl->profile
+ || crtl->calls_eh_return
+- || crtl->uses_const_pool))
++ || crtl->uses_const_pool
++ || cfun->has_nonlocal_label))
+ return ix86_select_alt_pic_regnum () == INVALID_REGNUM;
+
+ if (crtl->calls_eh_return && maybe_eh_return)
+@@ -10421,14 +10431,15 @@
+
+ if (r10_live && eax_live)
+ {
+- t = choose_baseaddr (m->fs.sp_offset - allocate);
++ t = plus_constant (stack_pointer_rtx, allocate);
+ emit_move_insn (r10, gen_frame_mem (Pmode, t));
+- t = choose_baseaddr (m->fs.sp_offset - allocate - UNITS_PER_WORD);
++ t = plus_constant (stack_pointer_rtx,
++ allocate - UNITS_PER_WORD);
+ emit_move_insn (eax, gen_frame_mem (Pmode, t));
+ }
+ else if (eax_live || r10_live)
+ {
+- t = choose_baseaddr (m->fs.sp_offset - allocate);
++ t = plus_constant (stack_pointer_rtx, allocate);
+ emit_move_insn ((eax_live ? eax : r10), gen_frame_mem (Pmode, t));
+ }
+ }
+@@ -11424,30 +11435,6 @@
+ }
+ }
+
+-/* Determine if op is suitable SUBREG RTX for address. */
+-
+-static bool
+-ix86_address_subreg_operand (rtx op)
+-{
+- enum machine_mode mode;
+-
+- if (!REG_P (op))
+- return false;
+-
+- mode = GET_MODE (op);
+-
+- if (GET_MODE_CLASS (mode) != MODE_INT)
+- return false;
+-
+- /* Don't allow SUBREGs that span more than a word. It can lead to spill
+- failures when the register is one word out of a two word structure. */
+- if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
+- return false;
+-
+- /* Allow only SUBREGs of non-eliminable hard registers. */
+- return register_no_elim_operand (op, mode);
+-}
+-
+ /* Extract the parts of an RTL expression that is a valid memory address
+ for an instruction. Return 0 if the structure of the address is
+ grossly off. Return -1 if the address contains ASHIFT, so it is not
+@@ -11512,7 +11499,7 @@
+ base = addr;
+ else if (GET_CODE (addr) == SUBREG)
+ {
+- if (ix86_address_subreg_operand (SUBREG_REG (addr)))
++ if (REG_P (SUBREG_REG (addr)))
+ base = addr;
+ else
+ return 0;
+@@ -11570,7 +11557,7 @@
+ break;
+
+ case SUBREG:
+- if (!ix86_address_subreg_operand (SUBREG_REG (op)))
++ if (!REG_P (SUBREG_REG (op)))
+ return 0;
+ /* FALLTHRU */
+
+@@ -11615,19 +11602,6 @@
+ scale = 1 << scale;
+ retval = -1;
+ }
+- else if (CONST_INT_P (addr))
+- {
+- if (!x86_64_immediate_operand (addr, VOIDmode))
+- return 0;
+-
+- /* Constant addresses are sign extended to 64bit, we have to
+- prevent addresses from 0x80000000 to 0xffffffff in x32 mode. */
+- if (TARGET_X32
+- && val_signbit_known_set_p (SImode, INTVAL (addr)))
+- return 0;
+-
+- disp = addr;
+- }
+ else
+ disp = addr; /* displacement */
+
+@@ -11636,7 +11610,7 @@
+ if (REG_P (index))
+ ;
+ else if (GET_CODE (index) == SUBREG
+- && ix86_address_subreg_operand (SUBREG_REG (index)))
++ && REG_P (SUBREG_REG (index)))
+ ;
+ else
+ return 0;
+@@ -12115,6 +12089,45 @@
+ return false;
+ }
+
++/* Determine if op is suitable RTX for an address register.
++ Return naked register if a register or a register subreg is
++ found, otherwise return NULL_RTX. */
++
++static rtx
++ix86_validate_address_register (rtx op)
++{
++ enum machine_mode mode = GET_MODE (op);
++
++ /* Only SImode or DImode registers can form the address. */
++ if (mode != SImode && mode != DImode)
++ return NULL_RTX;
++
++ if (REG_P (op))
++ return op;
++ else if (GET_CODE (op) == SUBREG)
++ {
++ rtx reg = SUBREG_REG (op);
++
++ if (!REG_P (reg))
++ return NULL_RTX;
++
++ mode = GET_MODE (reg);
++
++ /* Don't allow SUBREGs that span more than a word. It can
++ lead to spill failures when the register is one word out
++ of a two word structure. */
++ if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
++ return NULL_RTX;
++
++ /* Allow only SUBREGs of non-eliminable hard registers. */
++ if (register_no_elim_operand (reg, mode))
++ return reg;
++ }
++
++ /* Op is not a register. */
++ return NULL_RTX;
++}
++
+ /* Recognizes RTL expressions that are valid memory addresses for an
+ instruction. The MODE argument is the machine mode for the MEM
+ expression that wants to use this address.
+@@ -12130,6 +12143,7 @@
+ struct ix86_address parts;
+ rtx base, index, disp;
+ HOST_WIDE_INT scale;
++ enum ix86_address_seg seg;
+
+ if (ix86_decompose_address (addr, &parts) <= 0)
+ /* Decomposition failed. */
+@@ -12139,21 +12153,14 @@
+ index = parts.index;
+ disp = parts.disp;
+ scale = parts.scale;
++ seg = parts.seg;
+
+ /* Validate base register. */
+ if (base)
+ {
+- rtx reg;
+-
+- if (REG_P (base))
+- reg = base;
+- else if (GET_CODE (base) == SUBREG && REG_P (SUBREG_REG (base)))
+- reg = SUBREG_REG (base);
+- else
+- /* Base is not a register. */
+- return false;
++ rtx reg = ix86_validate_address_register (base);
+
+- if (GET_MODE (base) != SImode && GET_MODE (base) != DImode)
++ if (reg == NULL_RTX)
+ return false;
+
+ if ((strict && ! REG_OK_FOR_BASE_STRICT_P (reg))
+@@ -12165,17 +12172,9 @@
+ /* Validate index register. */
+ if (index)
+ {
+- rtx reg;
+-
+- if (REG_P (index))
+- reg = index;
+- else if (GET_CODE (index) == SUBREG && REG_P (SUBREG_REG (index)))
+- reg = SUBREG_REG (index);
+- else
+- /* Index is not a register. */
+- return false;
++ rtx reg = ix86_validate_address_register (index);
+
+- if (GET_MODE (index) != SImode && GET_MODE (index) != DImode)
++ if (reg == NULL_RTX)
+ return false;
+
+ if ((strict && ! REG_OK_FOR_INDEX_STRICT_P (reg))
+@@ -12189,6 +12188,12 @@
+ && GET_MODE (base) != GET_MODE (index))
+ return false;
+
++ /* Address override works only on the (%reg) part of %fs:(%reg). */
++ if (seg != SEG_DEFAULT
++ && ((base && GET_MODE (base) != word_mode)
++ || (index && GET_MODE (index) != word_mode)))
++ return false;
++
+ /* Validate scale factor. */
+ if (scale != 1)
+ {
+@@ -12310,6 +12315,12 @@
+ && !x86_64_immediate_operand (disp, VOIDmode))
+ /* Displacement is out of range. */
+ return false;
++ /* In x32 mode, constant addresses are sign extended to 64bit, so
++ we have to prevent addresses from 0x80000000 to 0xffffffff. */
++ else if (TARGET_X32 && !(index || base)
++ && CONST_INT_P (disp)
++ && val_signbit_known_set_p (SImode, INTVAL (disp)))
++ return false;
+ }
+
+ /* Everything looks valid. */
+@@ -13652,8 +13663,6 @@
+ Those same assemblers have the same but opposite lossage on cmov. */
+ if (mode == CCmode)
+ suffix = fp ? "nbe" : "a";
+- else if (mode == CCCmode)
+- suffix = "b";
+ else
+ gcc_unreachable ();
+ break;
+@@ -13675,8 +13684,12 @@
+ }
+ break;
+ case LTU:
+- gcc_assert (mode == CCmode || mode == CCCmode);
+- suffix = "b";
++ if (mode == CCmode)
++ suffix = "b";
++ else if (mode == CCCmode)
++ suffix = "c";
++ else
++ gcc_unreachable ();
+ break;
+ case GE:
+ switch (mode)
+@@ -13696,20 +13709,20 @@
+ }
+ break;
+ case GEU:
+- /* ??? As above. */
+- gcc_assert (mode == CCmode || mode == CCCmode);
+- suffix = fp ? "nb" : "ae";
++ if (mode == CCmode)
++ suffix = fp ? "nb" : "ae";
++ else if (mode == CCCmode)
++ suffix = "nc";
++ else
++ gcc_unreachable ();
+ break;
+ case LE:
+ gcc_assert (mode == CCmode || mode == CCGCmode || mode == CCNOmode);
+ suffix = "le";
+ break;
+ case LEU:
+- /* ??? As above. */
+ if (mode == CCmode)
+ suffix = "be";
+- else if (mode == CCCmode)
+- suffix = fp ? "nb" : "ae";
+ else
+ gcc_unreachable ();
+ break;
+@@ -18057,12 +18070,7 @@
+ return CCmode;
+ case GTU: /* CF=0 & ZF=0 */
+ case LEU: /* CF=1 | ZF=1 */
+- /* Detect overflow checks. They need just the carry flag. */
+- if (GET_CODE (op0) == MINUS
+- && rtx_equal_p (op1, XEXP (op0, 0)))
+- return CCCmode;
+- else
+- return CCmode;
++ return CCmode;
+ /* Codes possibly doable only with sign flag when
+ comparing against zero. */
+ case GE: /* SF=OF or SF=0 */
+@@ -20026,7 +20034,7 @@
vec[i * 2 + 1] = const1_rtx;
}
vt = gen_rtx_CONST_VECTOR (maskmode, gen_rtvec_v (w, vec));
@@ -57413,7 +59519,7 @@
t1 = expand_simple_binop (maskmode, PLUS, t1, vt, t1, 1,
OPTAB_DIRECT);
-@@ -20223,7 +20223,7 @@
+@@ -20223,7 +20231,7 @@
for (i = 0; i < 16; ++i)
vec[i] = GEN_INT (i/e * e);
vt = gen_rtx_CONST_VECTOR (V16QImode, gen_rtvec_v (16, vec));
@@ -57422,7 +59528,7 @@
if (TARGET_XOP)
emit_insn (gen_xop_pperm (mask, mask, mask, vt));
else
-@@ -20234,7 +20234,7 @@
+@@ -20234,7 +20242,7 @@
for (i = 0; i < 16; ++i)
vec[i] = GEN_INT (i % e);
vt = gen_rtx_CONST_VECTOR (V16QImode, gen_rtvec_v (16, vec));
@@ -57431,9 +59537,105 @@
emit_insn (gen_addv16qi3 (mask, mask, vt));
}
+@@ -27199,8 +27207,8 @@
+ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_shlv8hi3, "__builtin_ia32_vpshlw", IX86_BUILTIN_VPSHLW, UNKNOWN, (int)MULTI_ARG_2_HI },
+ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_shlv16qi3, "__builtin_ia32_vpshlb", IX86_BUILTIN_VPSHLB, UNKNOWN, (int)MULTI_ARG_2_QI },
+
+- { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv4sf2, "__builtin_ia32_vfrczss", IX86_BUILTIN_VFRCZSS, UNKNOWN, (int)MULTI_ARG_2_SF },
+- { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv2df2, "__builtin_ia32_vfrczsd", IX86_BUILTIN_VFRCZSD, UNKNOWN, (int)MULTI_ARG_2_DF },
++ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv4sf2, "__builtin_ia32_vfrczss", IX86_BUILTIN_VFRCZSS, UNKNOWN, (int)MULTI_ARG_1_SF },
++ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv2df2, "__builtin_ia32_vfrczsd", IX86_BUILTIN_VFRCZSD, UNKNOWN, (int)MULTI_ARG_1_DF },
+ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv4sf2, "__builtin_ia32_vfrczps", IX86_BUILTIN_VFRCZPS, UNKNOWN, (int)MULTI_ARG_1_SF },
+ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv2df2, "__builtin_ia32_vfrczpd", IX86_BUILTIN_VFRCZPD, UNKNOWN, (int)MULTI_ARG_1_DF },
+ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv8sf2, "__builtin_ia32_vfrczps256", IX86_BUILTIN_VFRCZPS256, UNKNOWN, (int)MULTI_ARG_1_SF2 },
--- a/src/gcc/config/i386/i386.md
+++ b/src/gcc/config/i386/i386.md
-@@ -3444,9 +3444,9 @@
+@@ -109,6 +109,7 @@
+ UNSPEC_CALL_NEEDS_VZEROUPPER
+ UNSPEC_PAUSE
+ UNSPEC_LEA_ADDR
++ UNSPEC_STOS
+
+ ;; For SSE/MMX support:
+ UNSPEC_FIX_NOTRUNC
+@@ -201,7 +202,10 @@
+
+ ;; For RDRAND support
+ UNSPECV_RDRAND
+-])
++
++ ;; Non-local goto.
++ UNSPECV_NLGR
++ ])
+
+ ;; Constants to represent rounding modes in the ROUND instruction
+ (define_constants
+@@ -1644,7 +1648,7 @@
+ split_double_mode (DImode, &operands[1], 1, &operands[2], &operands[3]);
+
+ operands[1] = gen_lowpart (DImode, operands[2]);
+- operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx,
++ operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
+ GEN_INT (4)));
+ })
+
+@@ -1661,7 +1665,7 @@
+ split_double_mode (DImode, &operands[1], 1, &operands[2], &operands[3]);
+
+ operands[1] = gen_lowpart (DImode, operands[2]);
+- operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx,
++ operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
+ GEN_INT (4)));
+ })
+
+@@ -1855,18 +1859,16 @@
+ [(set_attr "type" "*,*,sselog1,ssemov,ssemov")
+ (set_attr "prefix" "*,*,maybe_vex,maybe_vex,maybe_vex")
+ (set (attr "mode")
+- (cond [(eq_attr "alternative" "2,3")
+- (if_then_else
+- (match_test "optimize_function_for_size_p (cfun)")
+- (const_string "V4SF")
+- (const_string "TI"))
+- (eq_attr "alternative" "4")
+- (if_then_else
+- (ior (match_test "TARGET_SSE_TYPELESS_STORES")
+- (match_test "optimize_function_for_size_p (cfun)"))
+- (const_string "V4SF")
+- (const_string "TI"))]
+- (const_string "DI")))])
++ (cond [(eq_attr "alternative" "0,1")
++ (const_string "DI")
++ (ior (not (match_test "TARGET_SSE2"))
++ (match_test "optimize_function_for_size_p (cfun)"))
++ (const_string "V4SF")
++ (and (eq_attr "alternative" "4")
++ (match_test "TARGET_SSE_TYPELESS_STORES"))
++ (const_string "V4SF")
++ ]
++ (const_string "TI")))])
+
+ (define_split
+ [(set (match_operand:TI 0 "nonimmediate_operand" "")
+@@ -2328,7 +2330,7 @@
+ "TARGET_LP64 && ix86_check_movabs (insn, 0)"
+ "@
+ movabs{<imodesuffix>}\t{%1, %P0|[%P0], %1}
+- mov{<imodesuffix>}\t{%1, %a0|%a0, %1}"
++ mov{<imodesuffix>}\t{%1, %a0|<iptrsize> PTR %a0, %1}"
+ [(set_attr "type" "imov")
+ (set_attr "modrm" "0,*")
+ (set_attr "length_address" "8,0")
+@@ -2342,7 +2344,7 @@
+ "TARGET_LP64 && ix86_check_movabs (insn, 1)"
+ "@
+ movabs{<imodesuffix>}\t{%P1, %0|%0, [%P1]}
+- mov{<imodesuffix>}\t{%a1, %0|%0, %a1}"
++ mov{<imodesuffix>}\t{%a1, %0|%0, <iptrsize> PTR %a1}"
+ [(set_attr "type" "imov")
+ (set_attr "modrm" "0,*")
+ (set_attr "length_address" "8,0")
+@@ -3444,9 +3446,9 @@
})
(define_insn "*zero_extendsidi2_rex64"
@@ -57445,7 +59647,7 @@
"TARGET_64BIT"
"@
mov{l}\t{%1, %k0|%k0, %1}
-@@ -3469,9 +3469,9 @@
+@@ -3469,9 +3471,9 @@
;; %%% Kill me once multi-word ops are sane.
(define_insn "zero_extendsidi2_1"
@@ -57457,8 +59659,187 @@
(clobber (reg:CC FLAGS_REG))]
"!TARGET_64BIT"
"@
+@@ -6553,7 +6555,7 @@
+ (set_attr "pent_pair" "pu")
+ (set_attr "mode" "SI")])
+
+-;; Overflow setting add and subtract instructions
++;; Overflow setting add instructions
+
+ (define_insn "*add<mode>3_cconly_overflow"
+ [(set (reg:CCC FLAGS_REG)
+@@ -6568,43 +6570,31 @@
+ [(set_attr "type" "alu")
+ (set_attr "mode" "<MODE>")])
+
+-(define_insn "*sub<mode>3_cconly_overflow"
+- [(set (reg:CCC FLAGS_REG)
+- (compare:CCC
+- (minus:SWI
+- (match_operand:SWI 0 "nonimmediate_operand" "<r>m,<r>")
+- (match_operand:SWI 1 "<general_operand>" "<r><i>,<r>m"))
+- (match_dup 0)))]
+- ""
+- "cmp{<imodesuffix>}\t{%1, %0|%0, %1}"
+- [(set_attr "type" "icmp")
+- (set_attr "mode" "<MODE>")])
+-
+-(define_insn "*<plusminus_insn><mode>3_cc_overflow"
++(define_insn "*add<mode>3_cc_overflow"
+ [(set (reg:CCC FLAGS_REG)
+ (compare:CCC
+- (plusminus:SWI
+- (match_operand:SWI 1 "nonimmediate_operand" "<comm>0,0")
++ (plus:SWI
++ (match_operand:SWI 1 "nonimmediate_operand" "%0,0")
+ (match_operand:SWI 2 "<general_operand>" "<r><i>,<r>m"))
+ (match_dup 1)))
+ (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m,<r>")
+- (plusminus:SWI (match_dup 1) (match_dup 2)))]
+- "ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
+- "<plusminus_mnemonic>{<imodesuffix>}\t{%2, %0|%0, %2}"
++ (plus:SWI (match_dup 1) (match_dup 2)))]
++ "ix86_binary_operator_ok (PLUS, <MODE>mode, operands)"
++ "add{<imodesuffix>}\t{%2, %0|%0, %2}"
+ [(set_attr "type" "alu")
+ (set_attr "mode" "<MODE>")])
+
+-(define_insn "*<plusminus_insn>si3_zext_cc_overflow"
++(define_insn "*addsi3_zext_cc_overflow"
+ [(set (reg:CCC FLAGS_REG)
+ (compare:CCC
+- (plusminus:SI
+- (match_operand:SI 1 "nonimmediate_operand" "<comm>0")
++ (plus:SI
++ (match_operand:SI 1 "nonimmediate_operand" "%0")
+ (match_operand:SI 2 "x86_64_general_operand" "rme"))
+ (match_dup 1)))
+ (set (match_operand:DI 0 "register_operand" "=r")
+- (zero_extend:DI (plusminus:SI (match_dup 1) (match_dup 2))))]
+- "TARGET_64BIT && ix86_binary_operator_ok (<CODE>, SImode, operands)"
+- "<plusminus_mnemonic>{l}\t{%2, %k0|%k0, %2}"
++ (zero_extend:DI (plus:SI (match_dup 1) (match_dup 2))))]
++ "TARGET_64BIT && ix86_binary_operator_ok (PLUS, SImode, operands)"
++ "add{l}\t{%2, %k0|%k0, %2}"
+ [(set_attr "type" "alu")
+ (set_attr "mode" "SI")])
+
+@@ -15912,7 +15902,8 @@
+ [(parallel [(set (match_operand 1 "memory_operand" "")
+ (match_operand 2 "register_operand" ""))
+ (set (match_operand 0 "register_operand" "")
+- (match_operand 3 "" ""))])]
++ (match_operand 3 "" ""))
++ (unspec [(const_int 0)] UNSPEC_STOS)])]
+ ""
+ "ix86_current_function_needs_cld = 1;")
+
+@@ -15921,7 +15912,8 @@
+ (match_operand:DI 2 "register_operand" "a"))
+ (set (match_operand:DI 0 "register_operand" "=D")
+ (plus:DI (match_dup 1)
+- (const_int 8)))]
++ (const_int 8)))
++ (unspec [(const_int 0)] UNSPEC_STOS)]
+ "TARGET_64BIT
+ && !(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
+ "stosq"
+@@ -15934,7 +15926,8 @@
+ (match_operand:SI 2 "register_operand" "a"))
+ (set (match_operand:P 0 "register_operand" "=D")
+ (plus:P (match_dup 1)
+- (const_int 4)))]
++ (const_int 4)))
++ (unspec [(const_int 0)] UNSPEC_STOS)]
+ "!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
+ "stos{l|d}"
+ [(set_attr "type" "str")
+@@ -15946,7 +15939,8 @@
+ (match_operand:HI 2 "register_operand" "a"))
+ (set (match_operand:P 0 "register_operand" "=D")
+ (plus:P (match_dup 1)
+- (const_int 2)))]
++ (const_int 2)))
++ (unspec [(const_int 0)] UNSPEC_STOS)]
+ "!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
+ "stosw"
+ [(set_attr "type" "str")
+@@ -15958,7 +15952,8 @@
+ (match_operand:QI 2 "register_operand" "a"))
+ (set (match_operand:P 0 "register_operand" "=D")
+ (plus:P (match_dup 1)
+- (const_int 1)))]
++ (const_int 1)))
++ (unspec [(const_int 0)] UNSPEC_STOS)]
+ "!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
+ "stosb"
+ [(set_attr "type" "str")
+@@ -16797,7 +16792,37 @@
+ emit_insn (gen_set_got (pic_offset_table_rtx));
+ DONE;
+ })
+-
++
++(define_insn_and_split "nonlocal_goto_receiver"
++ [(unspec_volatile [(const_int 0)] UNSPECV_NLGR)]
++ "TARGET_MACHO && !TARGET_64BIT && flag_pic"
++ "#"
++ "&& reload_completed"
++ [(const_int 0)]
++{
++ if (crtl->uses_pic_offset_table)
++ {
++ rtx xops[3];
++ rtx label_rtx = gen_label_rtx ();
++ rtx tmp;
++
++ /* Get a new pic base. */
++ emit_insn (gen_set_got_labelled (pic_offset_table_rtx, label_rtx));
++ /* Correct this with the offset from the new to the old. */
++ xops[0] = xops[1] = pic_offset_table_rtx;
++ label_rtx = gen_rtx_LABEL_REF (SImode, label_rtx);
++ tmp = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, label_rtx),
++ UNSPEC_MACHOPIC_OFFSET);
++ xops[2] = gen_rtx_CONST (Pmode, tmp);
++ ix86_expand_binary_operator (MINUS, SImode, xops);
++ }
++ else
++ /* No pic reg restore needed. */
++ emit_note (NOTE_INSN_DELETED);
++
++ DONE;
++})
++
+ ;; Avoid redundant prefixes by splitting HImode arithmetic to SImode.
+
+ (define_split
+@@ -17190,6 +17215,7 @@
+ "(TARGET_READ_MODIFY_WRITE || optimize_insn_for_size_p ())
+ && peep2_reg_dead_p (4, operands[0])
+ && !reg_overlap_mentioned_p (operands[0], operands[1])
++ && !reg_overlap_mentioned_p (operands[0], operands[2])
+ && (<MODE>mode != QImode
+ || immediate_operand (operands[2], QImode)
+ || q_regs_operand (operands[2], QImode))
+@@ -17254,6 +17280,7 @@
+ || immediate_operand (operands[2], SImode)
+ || q_regs_operand (operands[2], SImode))
+ && !reg_overlap_mentioned_p (operands[0], operands[1])
++ && !reg_overlap_mentioned_p (operands[0], operands[2])
+ && ix86_match_ccmode (peep2_next_insn (3),
+ (GET_CODE (operands[3]) == PLUS
+ || GET_CODE (operands[3]) == MINUS)
--- a/src/gcc/config/i386/sse.md
+++ b/src/gcc/config/i386/sse.md
+@@ -3276,7 +3276,7 @@
+ (vec_select:V4SF
+ (vec_concat:V8SF
+ (match_operand:V4SF 1 "nonimmediate_operand" " 0,x,0,x,0")
+- (match_operand:V4SF 2 "nonimmediate_operand" " x,x,m,x,x"))
++ (match_operand:V4SF 2 "nonimmediate_operand" " x,x,m,m,x"))
+ (parallel [(const_int 0)
+ (const_int 1)
+ (const_int 4)
@@ -11167,7 +11167,8 @@
(match_operand:SI 2 "const_0_to_<sserotatemax>_operand" "n")))]
"TARGET_XOP"
@@ -57469,6 +59850,81 @@
return \"vprot<ssemodesuffix>\t{%3, %1, %0|%0, %1, %3}\";
}
[(set_attr "type" "sseishft")
+@@ -11455,7 +11456,6 @@
+ [(set_attr "type" "ssecvt1")
+ (set_attr "mode" "<MODE>")])
+
+-;; scalar insns
+ (define_expand "xop_vmfrcz<mode>2"
+ [(set (match_operand:VF_128 0 "register_operand")
+ (vec_merge:VF_128
+@@ -11465,11 +11465,9 @@
+ (match_dup 3)
+ (const_int 1)))]
+ "TARGET_XOP"
+-{
+- operands[3] = CONST0_RTX (<MODE>mode);
+-})
++ "operands[3] = CONST0_RTX (<MODE>mode);")
+
+-(define_insn "*xop_vmfrcz_<mode>"
++(define_insn "*xop_vmfrcz<mode>2"
+ [(set (match_operand:VF_128 0 "register_operand" "=x")
+ (vec_merge:VF_128
+ (unspec:VF_128
+--- a/src/gcc/config/i386/t-rtems
++++ b/src/gcc/config/i386/t-rtems
+@@ -18,11 +18,10 @@
+ # <http://www.gnu.org/licenses/>.
+ #
+
+-MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro \
+-msoft-float
++MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro msoft-float
+ MULTILIB_DIRNAMES= m486 mpentium mpentiumpro soft-float
+-MULTILIB_MATCHES = msoft-float=mno-m80387
+-MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?mathlon
++MULTILIB_MATCHES = msoft-float=mno-80387
++MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?athlon
+ MULTILIB_EXCEPTIONS = \
+ mtune=pentium/*msoft-float* \
+ mtune=pentiumpro/*msoft-float*
+--- a/src/gcc/config/i386/winnt.c
++++ b/src/gcc/config/i386/winnt.c
+@@ -531,8 +531,9 @@
+ sets 'discard' characteristic, rather than telling linker
+ to warn of size or content mismatch, so do the same. */
+ bool discard = (flags & SECTION_CODE)
+- || lookup_attribute ("selectany",
+- DECL_ATTRIBUTES (decl));
++ || (TREE_CODE (decl) != IDENTIFIER_NODE
++ && lookup_attribute ("selectany",
++ DECL_ATTRIBUTES (decl)));
+ fprintf (asm_out_file, "\t.linkonce %s\n",
+ (discard ? "discard" : "same_size"));
+ }
+--- a/src/gcc/config/i386/xopintrin.h
++++ b/src/gcc/config/i386/xopintrin.h
+@@ -745,13 +745,17 @@
+ extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ _mm_frcz_ss (__m128 __A, __m128 __B)
+ {
+- return (__m128) __builtin_ia32_vfrczss ((__v4sf)__A, (__v4sf)__B);
++ return (__m128) __builtin_ia32_movss ((__v4sf)__A,
++ (__v4sf)
++ __builtin_ia32_vfrczss ((__v4sf)__B));
+ }
+
+ extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ _mm_frcz_sd (__m128d __A, __m128d __B)
+ {
+- return (__m128d) __builtin_ia32_vfrczsd ((__v2df)__A, (__v2df)__B);
++ return (__m128d) __builtin_ia32_movsd ((__v2df)__A,
++ (__v2df)
++ __builtin_ia32_vfrczsd ((__v2df)__B));
+ }
+
+ extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
--- a/src/gcc/config/m68k/m68k.c
+++ b/src/gcc/config/m68k/m68k.c
@@ -6090,7 +6090,7 @@
@@ -57493,6 +59949,110 @@
}
crtl->uses_pic_offset_table = 1;
return reg;
+@@ -4001,7 +4003,8 @@
+ || (! TARGET_64BIT && df_regs_ever_live_p (i + 1)))
+ {
+ rtx addr, insn, reg;
+- addr = gen_rtx_MEM (DFmode, gen_rtx_POST_INC (DFmode, tmpreg));
++ addr = gen_rtx_MEM (DFmode,
++ gen_rtx_POST_INC (word_mode, tmpreg));
+ reg = gen_rtx_REG (DFmode, i);
+ insn = emit_move_insn (addr, reg);
+ if (DO_FRAME_NOTES)
+@@ -4291,7 +4294,8 @@
+ if (df_regs_ever_live_p (i)
+ || (! TARGET_64BIT && df_regs_ever_live_p (i + 1)))
+ {
+- rtx src = gen_rtx_MEM (DFmode, gen_rtx_POST_INC (DFmode, tmpreg));
++ rtx src = gen_rtx_MEM (DFmode,
++ gen_rtx_POST_INC (word_mode, tmpreg));
+ rtx dest = gen_rtx_REG (DFmode, i);
+ emit_move_insn (dest, src);
+ }
+--- a/src/gcc/config/pa/pa.md
++++ b/src/gcc/config/pa/pa.md
+@@ -730,46 +730,46 @@
+ (define_insn "scc"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (match_operator:SI 3 "comparison_operator"
+- [(match_operand:SI 1 "register_operand" "r")
++ [(match_operand:SI 1 "reg_or_0_operand" "rM")
+ (match_operand:SI 2 "arith11_operand" "rI")]))]
+ ""
+- "{com%I2clr|cmp%I2clr},%B3 %2,%1,%0\;ldi 1,%0"
++ "{com%I2clr|cmp%I2clr},%B3 %2,%r1,%0\;ldi 1,%0"
+ [(set_attr "type" "binary")
+ (set_attr "length" "8")])
+
+ (define_insn ""
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (match_operator:DI 3 "comparison_operator"
+- [(match_operand:DI 1 "register_operand" "r")
++ [(match_operand:DI 1 "reg_or_0_operand" "rM")
+ (match_operand:DI 2 "arith11_operand" "rI")]))]
+ "TARGET_64BIT"
+- "cmp%I2clr,*%B3 %2,%1,%0\;ldi 1,%0"
++ "cmp%I2clr,*%B3 %2,%r1,%0\;ldi 1,%0"
+ [(set_attr "type" "binary")
+ (set_attr "length" "8")])
+
+ (define_insn "iorscc"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (ior:SI (match_operator:SI 3 "comparison_operator"
+- [(match_operand:SI 1 "register_operand" "r")
++ [(match_operand:SI 1 "reg_or_0_operand" "rM")
+ (match_operand:SI 2 "arith11_operand" "rI")])
+ (match_operator:SI 6 "comparison_operator"
+- [(match_operand:SI 4 "register_operand" "r")
++ [(match_operand:SI 4 "reg_or_0_operand" "rM")
+ (match_operand:SI 5 "arith11_operand" "rI")])))]
+ ""
+- "{com%I2clr|cmp%I2clr},%S3 %2,%1,%%r0\;{com%I5clr|cmp%I5clr},%B6 %5,%4,%0\;ldi 1,%0"
++ "{com%I2clr|cmp%I2clr},%S3 %2,%r1,%%r0\;{com%I5clr|cmp%I5clr},%B6 %5,%r4,%0\;ldi 1,%0"
+ [(set_attr "type" "binary")
+ (set_attr "length" "12")])
+
+ (define_insn ""
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (ior:DI (match_operator:DI 3 "comparison_operator"
+- [(match_operand:DI 1 "register_operand" "r")
++ [(match_operand:DI 1 "reg_or_0_operand" "rM")
+ (match_operand:DI 2 "arith11_operand" "rI")])
+ (match_operator:DI 6 "comparison_operator"
+- [(match_operand:DI 4 "register_operand" "r")
++ [(match_operand:DI 4 "reg_or_0_operand" "rM")
+ (match_operand:DI 5 "arith11_operand" "rI")])))]
+ "TARGET_64BIT"
+- "cmp%I2clr,*%S3 %2,%1,%%r0\;cmp%I5clr,*%B6 %5,%4,%0\;ldi 1,%0"
++ "cmp%I2clr,*%S3 %2,%r1,%%r0\;cmp%I5clr,*%B6 %5,%r4,%0\;ldi 1,%0"
+ [(set_attr "type" "binary")
+ (set_attr "length" "12")])
+
+@@ -778,20 +778,20 @@
+ (define_insn "negscc"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (neg:SI (match_operator:SI 3 "comparison_operator"
+- [(match_operand:SI 1 "register_operand" "r")
++ [(match_operand:SI 1 "reg_or_0_operand" "rM")
+ (match_operand:SI 2 "arith11_operand" "rI")])))]
+ ""
+- "{com%I2clr|cmp%I2clr},%B3 %2,%1,%0\;ldi -1,%0"
++ "{com%I2clr|cmp%I2clr},%B3 %2,%r1,%0\;ldi -1,%0"
+ [(set_attr "type" "binary")
+ (set_attr "length" "8")])
+
+ (define_insn ""
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (neg:DI (match_operator:DI 3 "comparison_operator"
+- [(match_operand:DI 1 "register_operand" "r")
++ [(match_operand:DI 1 "reg_or_0_operand" "rM")
+ (match_operand:DI 2 "arith11_operand" "rI")])))]
+ "TARGET_64BIT"
+- "cmp%I2clr,*%B3 %2,%1,%0\;ldi -1,%0"
++ "cmp%I2clr,*%B3 %2,%r1,%0\;ldi -1,%0"
+ [(set_attr "type" "binary")
+ (set_attr "length" "8")])
+
--- a/src/gcc/config/rs6000/rs6000-builtin.def
+++ b/src/gcc/config/rs6000/rs6000-builtin.def
@@ -1430,9 +1430,6 @@
@@ -57507,7 +60067,7 @@
RS6000_BTC_MISC)
--- a/src/gcc/config/rs6000/rs6000.c
+++ b/src/gcc/config/rs6000/rs6000.c
-@@ -2398,8 +2398,16 @@
+@@ -2398,8 +2398,17 @@
reg_size = UNITS_PER_WORD;
for (m = 0; m < NUM_MACHINE_MODES; ++m)
@@ -57517,7 +60077,8 @@
+ int reg_size2 = reg_size;
+
+ /* TFmode/TDmode always takes 2 registers, even in VSX. */
-+ if (m == TDmode || m == TFmode)
++ if (TARGET_VSX && VSX_REG_CLASS_P (c)
++ && (m == TDmode || m == TFmode))
+ reg_size2 = UNITS_PER_FP_WORD;
+
+ rs6000_class_max_nregs[m][c]
@@ -57526,7 +60087,7 @@
}
if (TARGET_E500_DOUBLE)
-@@ -11388,9 +11396,6 @@
+@@ -11388,9 +11397,6 @@
case RS6000_BUILTIN_RSQRT:
return rs6000_expand_unop_builtin (CODE_FOR_rsqrtdf2, exp, target);
@@ -57536,7 +60097,7 @@
case POWER7_BUILTIN_BPERMD:
return rs6000_expand_binop_builtin (((TARGET_64BIT)
? CODE_FOR_bpermd_di
-@@ -11726,12 +11731,6 @@
+@@ -11726,12 +11732,6 @@
POWER7_BUILTIN_BPERMD, "__builtin_bpermd");
def_builtin ("__builtin_bpermd", ftype, POWER7_BUILTIN_BPERMD);
@@ -57672,6 +60233,28 @@
sparc_mode_class[i] = 1 << (int) SF_MODE;
else if (GET_MODE_SIZE (i) == 8)
sparc_mode_class[i] = 1 << (int) DF_MODE;
+@@ -10926,6 +10929,11 @@
+ /* Total Store Ordering: all memory transactions with store semantics
+ are followed by an implied StoreStore. */
+ implied |= StoreStore;
++
++ /* If we're not looking for a raw barrer (before+after), then atomic
++ operations get the benefit of being both load and store. */
++ if (load_store == 3 && before_after == 1)
++ implied |= StoreLoad;
+ /* FALLTHRU */
+
+ case SMM_PSO:
+--- a/src/gcc/config/v850/t-rtems
++++ b/src/gcc/config/v850/t-rtems
+@@ -1,3 +1,7 @@
+ # Custom multilibs for RTEMS
+
++MULTILIB_OPTIONS = mv850/mv850e/mv850e2/mv850e2v3
++MULTILIB_DIRNAMES = v850 v850e v850e2 v850e2v3
++MULTILIB_MATCHES = mv850e=mv850e1
++
+ MULTILIB_MATCHES += mv850e=mv850es
--- a/src/gcc/config.gcc
+++ b/src/gcc/config.gcc
@@ -317,6 +317,13 @@
@@ -57716,7 +60299,15 @@
alpha*-*-linux*)
tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h glibc-stdint.h"
tmake_file="${tmake_file} alpha/t-linux"
-@@ -3042,6 +3070,92 @@
+@@ -1064,7 +1092,6 @@
+ tm_file="pa/pa64-start.h ${tm_file} dbxelf.h elfos.h gnu-user.h linux.h \
+ glibc-stdint.h pa/pa-linux.h pa/pa64-regs.h pa/pa-64.h \
+ pa/pa64-linux.h"
+- tmake_file="${tmake_file} pa/t-linux"
+ gas=yes gnu_ld=yes
+ need_64bit_hwint=yes
+ ;;
+@@ -3042,6 +3069,92 @@
supported_defaults=
case "${target}" in
@@ -57809,7 +60400,7 @@
alpha*-*-*)
supported_defaults="cpu tune"
for which in cpu tune; do
-@@ -3530,6 +3644,15 @@
+@@ -3530,6 +3643,15 @@
# Set some miscellaneous flags for particular targets.
target_cpu_default2=
case ${target} in
@@ -57884,6 +60475,28 @@
powerpc-*-*)
conftest_s='
.section ".tdata","awT",@progbits
+@@ -27309,8 +27323,8 @@
+ $as_echo_n "checking for exported symbols... " >&6; }
+ if test "x$export_sym_check" != x; then
+ echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c
+- ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest > /dev/null 2>&1
+- if $export_sym_check conftest | grep foobar > /dev/null; then
++ ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest$ac_exeext > /dev/null 2>&1
++ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
+ : # No need to use a flag
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+@@ -27319,8 +27333,8 @@
+ $as_echo "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -rdynamic" >&5
+ $as_echo_n "checking for -rdynamic... " >&6; }
+- ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest > /dev/null 2>&1
+- if $export_sym_check conftest | grep foobar > /dev/null; then
++ ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest$ac_exeext > /dev/null 2>&1
++ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
+ plugin_rdynamic=yes
+ pluginlibs="-rdynamic"
+ else
--- a/src/gcc/configure.ac
+++ b/src/gcc/configure.ac
@@ -829,7 +829,7 @@
@@ -57915,9 +60528,111 @@
powerpc-*-*)
conftest_s='
.section ".tdata","awT",@progbits
+@@ -5153,15 +5166,15 @@
+ AC_MSG_CHECKING([for exported symbols])
+ if test "x$export_sym_check" != x; then
+ echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c
+- ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest > /dev/null 2>&1
+- if $export_sym_check conftest | grep foobar > /dev/null; then
++ ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest$ac_exeext > /dev/null 2>&1
++ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
+ : # No need to use a flag
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([yes])
+ AC_MSG_CHECKING([for -rdynamic])
+- ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest > /dev/null 2>&1
+- if $export_sym_check conftest | grep foobar > /dev/null; then
++ ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest$ac_exeext > /dev/null 2>&1
++ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
+ plugin_rdynamic=yes
+ pluginlibs="-rdynamic"
+ else
+--- a/src/gcc/coverage.c
++++ b/src/gcc/coverage.c
+@@ -1099,6 +1099,9 @@
+ memcpy (da_file_name + prefix_len, filename, len);
+ strcpy (da_file_name + prefix_len + len, GCOV_DATA_SUFFIX);
+
++ if (flag_branch_probabilities)
++ read_counts_file ();
++
+ /* Name of bbg file. */
+ if (flag_test_coverage && !flag_compare_debug)
+ {
+@@ -1118,9 +1121,6 @@
+ gcov_write_unsigned (local_tick);
+ }
+ }
+-
+- if (flag_branch_probabilities)
+- read_counts_file ();
+ }
+
+ /* Performs file-level cleanup. Close graph file, generate coverage
--- a/src/gcc/cp/ChangeLog
+++ b/src/gcc/cp/ChangeLog
-@@ -1,3 +1,13 @@
+@@ -1,3 +1,73 @@
++2013-10-25 Tom de Vries <tom@codesourcery.com>
++
++ PR c++/58282
++ * except.c (build_must_not_throw_expr): Handle
++ flag_exceptions.
++
++2013-10-16 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/58633
++ * parser.c (cp_parser_pseudo_destructor_name): Revert r174385 changes.
++
++2013-09-13 Jason Merrill <jason@redhat.com>
++
++ PR c++/58273
++ * pt.c (any_type_dependent_elements_p): Actually check for
++ type-dependence, not value-dependence.
++
++2013-08-20 Jason Merrill <jason@redhat.com>
++
++ PR c++/58119
++ * cp-tree.h (WILDCARD_TYPE_P): Split out from...
++ (MAYBE_CLASS_TYPE_P): ...here.
++ * cvt.c (build_expr_type_conversion): Don't complain about a
++ template that can't match the desired type category.
++
++2012-12-03 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/54170
++ * cvt.c (cp_convert_to_pointer): Don't discard side-effects from
++ expressions of nullptr_t.
++ * typeck.c (build_ptrmemfunc): Likewise.
++
++2013-07-09 Jason Merrill <jason@redhat.com>
++
++ PR c++/57437
++ * typeck.c (check_return_expr): Lambda proxies aren't eligible
++ for nrv or return by move.
++
++ PR c++/57545
++ * pt.c (convert_nontype_argument) [INTEGER_CST]: Force the
++ argument to have the exact type of the parameter.
++
++ PR c++/57551
++ * semantics.c (cxx_eval_indirect_ref): Don't try to look through
++ a POINTER_PLUS_EXPR for type punning diagnostic.
++
++ PR c++/57831
++ * pt.c (tsubst_copy): Handle USING_DECL.
++
++2013-05-20 Jason Merrill <jason@redhat.com>
++
++ PR c++/57325
++ * tree.c (build_cplus_array_type): Copy layout info if element
++ type is complete.
++
++2013-05-09 Jason Merrill <jason@redhat.com>
++
++ PR c++/57047
++ * semantics.c (cxx_fold_indirect_ref): Fix thinko.
++
+2013-04-21 Eric Botcazou <ebotcazou@adacore.com>
+
+ * parser.c (cp_parser_late_return_type_opt): Fix C++ism.
@@ -57931,9 +60646,139 @@
2013-04-11 Release Manager
* GCC 4.7.3 released.
+--- a/src/gcc/cp/cp-tree.h
++++ b/src/gcc/cp/cp-tree.h
+@@ -1191,17 +1191,20 @@
+ /* The _DECL for this _TYPE. */
+ #define TYPE_MAIN_DECL(NODE) (TYPE_STUB_DECL (TYPE_MAIN_VARIANT (NODE)))
+
+-/* Nonzero if T is a class (or struct or union) type. Also nonzero
+- for template type parameters, typename types, and instantiated
+- template template parameters. Keep these checks in ascending code
+- order. */
+-#define MAYBE_CLASS_TYPE_P(T) \
++/* Nonzero if T is a type that could resolve to any kind of concrete type
++ at instantiation time. */
++#define WILDCARD_TYPE_P(T) \
+ (TREE_CODE (T) == TEMPLATE_TYPE_PARM \
+ || TREE_CODE (T) == TYPENAME_TYPE \
+ || TREE_CODE (T) == TYPEOF_TYPE \
+ || TREE_CODE (T) == BOUND_TEMPLATE_TEMPLATE_PARM \
+- || TREE_CODE (T) == DECLTYPE_TYPE \
+- || CLASS_TYPE_P (T))
++ || TREE_CODE (T) == DECLTYPE_TYPE)
++
++/* Nonzero if T is a class (or struct or union) type. Also nonzero
++ for template type parameters, typename types, and instantiated
++ template template parameters. Keep these checks in ascending code
++ order. */
++#define MAYBE_CLASS_TYPE_P(T) (WILDCARD_TYPE_P (T) || CLASS_TYPE_P (T))
+
+ /* Set CLASS_TYPE_P for T to VAL. T must be a class, struct, or
+ union type. */
+--- a/src/gcc/cp/cvt.c
++++ b/src/gcc/cp/cvt.c
+@@ -198,6 +198,8 @@
+
+ if (null_ptr_cst_p (expr))
+ {
++ tree val;
++
+ if (c_inhibit_evaluation_warnings == 0
+ && !NULLPTR_TYPE_P (TREE_TYPE (expr)))
+ warning (OPT_Wzero_as_null_pointer_constant,
+@@ -207,16 +209,14 @@
+ return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr, 0,
+ /*c_cast_p=*/false, tf_warning_or_error);
+
+- if (TYPE_PTRMEM_P (type))
+- {
+- /* A NULL pointer-to-member is represented by -1, not by
+- zero. */
+- expr = build_int_cst_type (type, -1);
+- }
+- else
+- expr = build_int_cst (type, 0);
++ /* A NULL pointer-to-data-member is represented by -1, not by
++ zero. */
++ val = (TYPE_PTRMEM_P (type)
++ ? build_int_cst_type (type, -1)
++ : build_int_cst (type, 0));
+
+- return expr;
++ return (TREE_SIDE_EFFECTS (expr)
++ ? build2 (COMPOUND_EXPR, type, expr, val) : val);
+ }
+ else if (TYPE_PTR_TO_MEMBER_P (type) && INTEGRAL_CODE_P (form))
+ {
+@@ -1539,17 +1539,6 @@
+ if (DECL_NONCONVERTING_P (cand))
+ continue;
+
+- if (TREE_CODE (cand) == TEMPLATE_DECL)
+- {
+- if (complain)
+- {
+- error ("ambiguous default type conversion from %qT",
+- basetype);
+- error (" candidate conversions include %qD", cand);
+- }
+- return error_mark_node;
+- }
+-
+ candidate = non_reference (TREE_TYPE (TREE_TYPE (cand)));
+
+ switch (TREE_CODE (candidate))
+@@ -1583,11 +1572,23 @@
+ break;
+
+ default:
++ /* A wildcard could be instantiated to match any desired
++ type, but we can't deduce the template argument. */
++ if (WILDCARD_TYPE_P (candidate))
++ win = true;
+ break;
+ }
+
+ if (win)
+ {
++ if (TREE_CODE (cand) == TEMPLATE_DECL)
++ {
++ if (complain)
++ error ("default type conversion can't deduce template"
++ " argument for %qD", cand);
++ return error_mark_node;
++ }
++
+ if (winner)
+ {
+ if (complain)
+--- a/src/gcc/cp/except.c
++++ b/src/gcc/cp/except.c
+@@ -383,6 +383,9 @@
+ {
+ tree type = body ? TREE_TYPE (body) : void_type_node;
+
++ if (!flag_exceptions)
++ return body;
++
+ if (cond && !value_dependent_expression_p (cond))
+ {
+ cond = cxx_constant_value (cond);
--- a/src/gcc/cp/parser.c
+++ b/src/gcc/cp/parser.c
-@@ -16691,7 +16691,7 @@
+@@ -6317,10 +6317,6 @@
+ /* Look for the `~'. */
+ cp_parser_require (parser, CPP_COMPL, RT_COMPL);
+
+- /* Once we see the ~, this has to be a pseudo-destructor. */
+- if (!processing_template_decl && !cp_parser_error_occurred (parser))
+- cp_parser_commit_to_tentative_parse (parser);
+-
+ /* Look for the type-name again. We are not responsible for
+ checking that it matches the first type-name. */
+ *type = cp_parser_nonclass_name (parser);
+@@ -16691,7 +16687,7 @@
cp_parser_late_return_type_opt (cp_parser* parser, cp_cv_quals quals)
{
cp_token *token;
@@ -57942,7 +60787,7 @@
/* Peek at the next token. */
token = cp_lexer_peek_token (parser->lexer);
-@@ -16702,8 +16702,8 @@
+@@ -16702,8 +16698,8 @@
/* Consume the ->. */
cp_lexer_consume_token (parser->lexer);
@@ -57953,9 +60798,74 @@
if (quals >= 0)
{
/* DR 1207: 'this' is in scope in the trailing return type. */
+--- a/src/gcc/cp/pt.c
++++ b/src/gcc/cp/pt.c
+@@ -5521,6 +5521,10 @@
+ else
+ return NULL_TREE;
+ }
++
++ /* Avoid typedef problems. */
++ if (TREE_TYPE (expr) != type)
++ expr = fold_convert (type, expr);
+ }
+ /* [temp.arg.nontype]/5, bullet 2
+
+@@ -12214,6 +12218,9 @@
+ case TYPE_DECL:
+ return tsubst (t, args, complain, in_decl);
+
++ case USING_DECL:
++ t = DECL_NAME (t);
++ /* Fall through. */
+ case IDENTIFIER_NODE:
+ if (IDENTIFIER_TYPENAME_P (t))
+ {
+@@ -19545,7 +19552,7 @@
+ any_type_dependent_elements_p (const_tree list)
+ {
+ for (; list; list = TREE_CHAIN (list))
+- if (value_dependent_expression_p (TREE_VALUE (list)))
++ if (type_dependent_expression_p (TREE_VALUE (list)))
+ return true;
+
+ return false;
--- a/src/gcc/cp/semantics.c
+++ b/src/gcc/cp/semantics.c
-@@ -8959,13 +8959,12 @@
+@@ -7412,15 +7412,17 @@
+ }
+ }
+ }
+- /* *(foo *)fooarrptreturn> (*fooarrptr)[0] */
++ /* *(foo *)fooarrptr => (*fooarrptr)[0] */
+ else if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE
+ && (same_type_ignoring_top_level_qualifiers_p
+ (type, TREE_TYPE (TREE_TYPE (subtype)))))
+ {
+ tree type_domain;
+ tree min_val = size_zero_node;
+- sub = cxx_fold_indirect_ref (loc, TREE_TYPE (subtype), sub, NULL);
+- if (!sub)
++ tree newsub = cxx_fold_indirect_ref (loc, TREE_TYPE (subtype), sub, NULL);
++ if (newsub)
++ sub = newsub;
++ else
+ sub = build1_loc (loc, INDIRECT_REF, TREE_TYPE (subtype), sub);
+ type_domain = TYPE_DOMAIN (TREE_TYPE (sub));
+ if (type_domain && TYPE_MIN_VALUE (type_domain))
+@@ -7457,11 +7459,6 @@
+ {
+ tree sub = op0;
+ STRIP_NOPS (sub);
+- if (TREE_CODE (sub) == POINTER_PLUS_EXPR)
+- {
+- sub = TREE_OPERAND (sub, 0);
+- STRIP_NOPS (sub);
+- }
+ if (TREE_CODE (sub) == ADDR_EXPR)
+ {
+ /* We couldn't fold to a constant value. Make sure it's not
+@@ -8959,13 +8956,12 @@
insert_capture_proxy (tree var)
{
cp_binding_level *b;
@@ -57970,7 +60880,7 @@
{
cp_binding_level *n = b->level_chain;
if (n->kind == sk_function_parms)
-@@ -8976,8 +8975,7 @@
+@@ -8976,8 +8972,7 @@
/* And put a DECL_EXPR in the STATEMENT_LIST for the same block. */
var = build_stmt (DECL_SOURCE_LOCATION (var), DECL_EXPR, var);
@@ -57980,11 +60890,54 @@
gcc_assert (stmt_list);
append_to_statement_list_force (var, &stmt_list);
}
---- a/src/gcc/DATESTAMP
-+++ b/src/gcc/DATESTAMP
-@@ -1 +1 @@
--20130411
-+20130508
+--- a/src/gcc/cp/tree.c
++++ b/src/gcc/cp/tree.c
+@@ -816,10 +816,12 @@
+
+ if (TYPE_MAIN_VARIANT (t) != m)
+ {
+- if (COMPLETE_TYPE_P (t) && !COMPLETE_TYPE_P (m))
++ if (COMPLETE_TYPE_P (TREE_TYPE (t)) && !COMPLETE_TYPE_P (m))
+ {
+ /* m was built before the element type was complete, so we
+- also need to copy the layout info from t. */
++ also need to copy the layout info from t. We might
++ end up doing this multiple times if t is an array of
++ unknown bound. */
+ tree size = TYPE_SIZE (t);
+ tree size_unit = TYPE_SIZE_UNIT (t);
+ unsigned int align = TYPE_ALIGN (t);
+--- a/src/gcc/cp/typeck.c
++++ b/src/gcc/cp/typeck.c
+@@ -7246,7 +7246,7 @@
+ /* Handle null pointer to member function conversions. */
+ if (null_ptr_cst_p (pfn))
+ {
+- pfn = build_c_cast (input_location, type, nullptr_node);
++ pfn = build_c_cast (input_location, type, pfn);
+ return build_ptrmemfunc1 (to_type,
+ integer_zero_node,
+ pfn);
+@@ -7929,7 +7929,8 @@
+ && TREE_CODE (retval) == VAR_DECL
+ && DECL_CONTEXT (retval) == current_function_decl
+ && ! TREE_STATIC (retval)
+- && ! DECL_ANON_UNION_VAR_P (retval)
++ /* And not a lambda or anonymous union proxy. */
++ && !DECL_HAS_VALUE_EXPR_P (retval)
+ && (DECL_ALIGN (retval)
+ >= DECL_ALIGN (DECL_RESULT (current_function_decl)))
+ /* The cv-unqualified type of the returned value must be the
+@@ -7978,7 +7979,8 @@
+ Note that these conditions are similar to, but not as strict as,
+ the conditions for the named return value optimization. */
+ if ((cxx_dialect != cxx98)
+- && (TREE_CODE (retval) == VAR_DECL
++ && ((TREE_CODE (retval) == VAR_DECL
++ && !DECL_HAS_VALUE_EXPR_P (retval))
+ || TREE_CODE (retval) == PARM_DECL)
+ && DECL_CONTEXT (retval) == current_function_decl
+ && !TREE_STATIC (retval)
--- a/src/gcc/dwarf2out.c
+++ b/src/gcc/dwarf2out.c
@@ -22538,7 +22538,7 @@
@@ -58015,7 +60968,57 @@
{
--- a/src/gcc/fortran/ChangeLog
+++ b/src/gcc/fortran/ChangeLog
-@@ -1,3 +1,39 @@
+@@ -1,3 +1,89 @@
++2013-11-17 Paul Thomas <pault@gcc.gnu.org>
++
++ PR fortran/58771
++ * trans-io.c (transfer_expr): If the backend_decl for a derived
++ type is missing, build it with gfc_typenode_for_spec.
++
++2013-11-02 Janus Weil <janus@gcc.gnu.org>
++
++ Backport from mainline
++ 2013-09-23 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/58355
++ * decl.c (check_extended_derived_type): Prevent segfault, modify error
++ message.
++
++2013-08-11 Janus Weil <janus@gcc.gnu.org>
++
++ Backport from trunk:
++ 2013-08-09 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/58058
++ * trans-intrinsic.c (gfc_conv_intrinsic_transfer): Free the temporary
++ string, if necessary.
++
++2013-07-08 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/57785
++ * simplify.c (compute_dot_product): Complex conjugate for
++ dot_product.
++ (gfc_simplify_dot_product, gfc_simplify_matmul): Update call.
++
++2013-06-06 Tobias Burnus <burnus@net-b.de>
++
++ Backport from mainline
++ 2012-08-27 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/54370
++ * trans-stmt.c (gfc_trans_do_while): Don't change the logical
++ kind for negation of the condition.
++
++2013-06-01 Janus Weil <janus@gcc.gnu.org>
++ Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/57217
++ * interface.c (check_dummy_characteristics): Symmetrize type check.
++
++2013-05-22 Janne Blomqvist <jb@gcc.gnu.org>
++
++ * intrinsic.texi (RANDOM_SEED): Improve example.
++
+2013-05-07 Tobias Burnus <burnus@net-b.de>
+
+ Backport from mainline
@@ -58088,6 +61091,35 @@
if (result_elt_size == 0)
return FAILURE;
+--- a/src/gcc/fortran/decl.c
++++ b/src/gcc/fortran/decl.c
+@@ -7301,6 +7301,7 @@
+
+
+ /* Check a derived type that is being extended. */
++
+ static gfc_symbol*
+ check_extended_derived_type (char *name)
+ {
+@@ -7312,14 +7313,15 @@
+ return NULL;
+ }
+
++ extended = gfc_find_dt_in_generic (extended);
++
++ /* F08:C428. */
+ if (!extended)
+ {
+- gfc_error ("No such symbol in TYPE definition at %C");
++ gfc_error ("Symbol '%s' at %C has not been previously defined", name);
+ return NULL;
+ }
+
+- extended = gfc_find_dt_in_generic (extended);
+-
+ if (extended->attr.flavor != FL_DERIVED)
+ {
+ gfc_error ("'%s' in EXTENDS expression at %C is not a "
--- a/src/gcc/fortran/expr.c
+++ b/src/gcc/fortran/expr.c
@@ -3493,8 +3493,12 @@
@@ -58105,17 +61137,18 @@
}
else
{
---- a/src/gcc/fortran/intrinsic.texi
-+++ b/src/gcc/fortran/intrinsic.texi
-@@ -9209,7 +9209,7 @@
- @item @emph{Arguments}:
- @multitable @columnfractions .15 .70
- @item @var{X} @tab Shall be of type @code{REAL}.
--@item @var{S} @tab (Optional) shall be of type @code{REAL} and
-+@item @var{S} @tab Shall be of type @code{REAL} and
- not equal to zero.
- @end multitable
-
+--- a/src/gcc/fortran/interface.c
++++ b/src/gcc/fortran/interface.c
+@@ -987,7 +987,8 @@
+ bool type_must_agree, char *errmsg, int err_len)
+ {
+ /* Check type and rank. */
+- if (type_must_agree && !compare_type_rank (s2, s1))
++ if (type_must_agree &&
++ (!compare_type_rank (s1, s2) || !compare_type_rank (s2, s1)))
+ {
+ if (errmsg != NULL)
+ snprintf (errmsg, err_len, "Type/rank mismatch in argument '%s'",
--- a/src/gcc/fortran/resolve.c
+++ b/src/gcc/fortran/resolve.c
@@ -3155,6 +3155,7 @@
@@ -58137,7 +61170,50 @@
/* Note that 'simplification' is not just transforming expressions.
For functions that are not simplified at compile time, range
-@@ -3240,7 +3242,7 @@
+@@ -330,13 +332,15 @@
+ }
+
+
+-/* Helper function for gfc_simplify_dot_product() and gfc_simplify_matmul. */
++/* Helper function for gfc_simplify_dot_product() and gfc_simplify_matmul;
++ if conj_a is true, the matrix_a is complex conjugated. */
+
+ static gfc_expr *
+ compute_dot_product (gfc_expr *matrix_a, int stride_a, int offset_a,
+- gfc_expr *matrix_b, int stride_b, int offset_b)
++ gfc_expr *matrix_b, int stride_b, int offset_b,
++ bool conj_a)
+ {
+- gfc_expr *result, *a, *b;
++ gfc_expr *result, *a, *b, *c;
+
+ result = gfc_get_constant_expr (matrix_a->ts.type, matrix_a->ts.kind,
+ &matrix_a->where);
+@@ -359,9 +363,11 @@
+ case BT_INTEGER:
+ case BT_REAL:
+ case BT_COMPLEX:
+- result = gfc_add (result,
+- gfc_multiply (gfc_copy_expr (a),
+- gfc_copy_expr (b)));
++ if (conj_a && a->ts.type == BT_COMPLEX)
++ c = gfc_simplify_conjg (a);
++ else
++ c = gfc_copy_expr (a);
++ result = gfc_add (result, gfc_multiply (c, gfc_copy_expr (b)));
+ break;
+
+ default:
+@@ -1875,7 +1881,7 @@
+ gcc_assert (vector_b->rank == 1);
+ gcc_assert (gfc_compare_types (&vector_a->ts, &vector_b->ts));
+
+- return compute_dot_product (vector_a, 1, 0, vector_b, 1, 0);
++ return compute_dot_product (vector_a, 1, 0, vector_b, 1, 0, true);
+ }
+
+
+@@ -3240,7 +3246,7 @@
gfc_expr* dim = result;
mpz_set_si (dim->value.integer, d);
@@ -58146,7 +61222,16 @@
gfc_free_expr (dim);
if (!result)
goto returnNull;
-@@ -5493,15 +5495,12 @@
+@@ -3881,7 +3887,7 @@
+ for (row = 0; row < result_rows; ++row)
+ {
+ gfc_expr *e = compute_dot_product (matrix_a, stride_a, offset_a,
+- matrix_b, 1, offset_b);
++ matrix_b, 1, offset_b, false);
+ gfc_constructor_append_expr (&result->value.constructor,
+ e, NULL);
+
+@@ -5493,15 +5499,12 @@
e = gfc_get_constant_expr (BT_INTEGER, k, &source->where);
if (t == SUCCESS)
@@ -58164,7 +61249,7 @@
gfc_free_expr (e);
if (f == NULL)
{
-@@ -5512,23 +5511,30 @@
+@@ -5512,23 +5515,30 @@
e = f;
}
@@ -58201,7 +61286,7 @@
/* For unary operations, the size of the result is given by the size
of the operand. For binary ones, it's the size of the first operand
-@@ -5558,7 +5564,7 @@
+@@ -5558,7 +5568,7 @@
replacement = array->value.op.op1;
else
{
@@ -58210,7 +61295,7 @@
if (simplified)
return simplified;
-@@ -5568,18 +5574,20 @@
+@@ -5568,18 +5578,20 @@
}
/* Try to reduce it directly if possible. */
@@ -58239,7 +61324,7 @@
return simplified;
}
-@@ -5598,12 +5606,31 @@
+@@ -5598,12 +5610,31 @@
return NULL;
}
@@ -58361,6 +61446,160 @@
size_t gfc_target_expr_size (gfc_expr *);
/* Write a constant expression in binary form to a target buffer. */
+--- a/src/gcc/fortran/trans-intrinsic.c
++++ b/src/gcc/fortran/trans-intrinsic.c
+@@ -5623,8 +5623,7 @@
+
+ if (expr->ts.type == BT_CHARACTER)
+ {
+- tree direct;
+- tree indirect;
++ tree direct, indirect, free;
+
+ ptr = convert (gfc_get_pchar_type (expr->ts.kind), source);
+ tmpdecl = gfc_create_var (gfc_get_pchar_type (expr->ts.kind),
+@@ -5657,6 +5656,13 @@
+ tmp = build3_v (COND_EXPR, tmp, direct, indirect);
+ gfc_add_expr_to_block (&se->pre, tmp);
+
++ /* Free the temporary string, if necessary. */
++ free = gfc_call_free (tmpdecl);
++ tmp = fold_build2_loc (input_location, GT_EXPR, boolean_type_node,
++ dest_word_len, source_bytes);
++ tmp = build3_v (COND_EXPR, tmp, free, build_empty_stmt (input_location));
++ gfc_add_expr_to_block (&se->post, tmp);
++
+ se->expr = tmpdecl;
+ se->string_length = fold_convert (gfc_charlen_type_node, dest_word_len);
+ }
+--- a/src/gcc/fortran/trans-io.c
++++ b/src/gcc/fortran/trans-io.c
+@@ -244,16 +244,16 @@
+
+ /* The code to generate the error. */
+ gfc_start_block (&block);
+-
++
+ arg1 = gfc_build_addr_expr (NULL_TREE, var);
+-
++
+ arg2 = build_int_cst (integer_type_node, error_code),
+-
++
+ asprintf (&message, "%s", _(msgid));
+ arg3 = gfc_build_addr_expr (pchar_type_node,
+ gfc_build_localized_cstring_const (message));
+ free (message);
+-
++
+ tmp = build_call_expr_loc (input_location,
+ gfor_fndecl_generate_error, 3, arg1, arg2, arg3);
+
+@@ -522,7 +522,7 @@
+ gfc_trans_io_runtime_check (cond, var, LIBERROR_BAD_UNIT,
+ "Unit number in I/O statement too small",
+ &se.pre);
+-
++
+ /* UNIT numbers should be less than the max. */
+ val = gfc_conv_mpz_to_tree (gfc_integer_kinds[i].huge, 4);
+ cond = fold_build2_loc (input_location, GT_EXPR, boolean_type_node,
+@@ -1002,7 +1002,7 @@
+ if (p->convert)
+ mask |= set_string (&block, &post_block, var, IOPARM_open_convert,
+ p->convert);
+-
++
+ if (p->newunit)
+ mask |= set_parameter_ref (&block, &post_block, var, IOPARM_open_newunit,
+ p->newunit);
+@@ -1236,7 +1236,7 @@
+ {
+ mask |= set_parameter_ref (&block, &post_block, var, IOPARM_inquire_exist,
+ p->exist);
+-
++
+ if (p->unit && !p->iostat)
+ {
+ p->iostat = create_dummy_iostat ();
+@@ -1324,7 +1324,7 @@
+ if (p->pad)
+ mask |= set_string (&block, &post_block, var, IOPARM_inquire_pad,
+ p->pad);
+-
++
+ if (p->convert)
+ mask |= set_string (&block, &post_block, var, IOPARM_inquire_convert,
+ p->convert);
+@@ -1546,7 +1546,7 @@
+ tree dtype;
+ tree dt_parm_addr;
+ tree decl = NULL_TREE;
+- int n_dim;
++ int n_dim;
+ int itype;
+ int rank = 0;
+
+@@ -2029,7 +2029,7 @@
+ if (gfc_notification_std (GFC_STD_GNU) != SILENT)
+ {
+ gfc_error_now ("Derived type '%s' at %L has PRIVATE components",
+- ts->u.derived->name, code != NULL ? &(code->loc) :
++ ts->u.derived->name, code != NULL ? &(code->loc) :
+ &gfc_current_locus);
+ return;
+ }
+@@ -2038,7 +2038,7 @@
+ ts->kind = ts->u.derived->ts.kind;
+ ts->f90_type = ts->u.derived->ts.f90_type;
+ }
+-
++
+ kind = ts->kind;
+ function = NULL;
+ arg2 = NULL;
+@@ -2120,7 +2120,7 @@
+ function = iocall[IOCALL_X_CHARACTER_WIDE];
+ else
+ function = iocall[IOCALL_X_CHARACTER_WIDE_WRITE];
+-
++
+ tmp = gfc_build_addr_expr (NULL_TREE, dt_parm);
+ tmp = build_call_expr_loc (input_location,
+ function, 4, tmp, addr_expr, arg2, arg3);
+@@ -2152,6 +2152,12 @@
+ expr = build_fold_indirect_ref_loc (input_location,
+ expr);
+
++ /* Make sure that the derived type has been built. An external
++ function, if only referenced in an io statement requires this
++ check (see PR58771). */
++ if (ts->u.derived->backend_decl == NULL_TREE)
++ tmp = gfc_typenode_for_spec (ts);
++
+ for (c = ts->u.derived->components; c; c = c->next)
+ {
+ field = c->backend_decl;
+@@ -2287,7 +2293,7 @@
+ transfer_array_desc (&se, &expr->ts, tmp);
+ goto finish_block_label;
+ }
+-
++
+ /* Initialize the scalarizer. */
+ gfc_init_loopinfo (&loop);
+ gfc_add_ss_to_loop (&loop, ss);
+--- a/src/gcc/fortran/trans-stmt.c
++++ b/src/gcc/fortran/trans-stmt.c
+@@ -1743,7 +1743,7 @@
+ gfc_conv_expr_val (&cond, code->expr1);
+ gfc_add_block_to_block (&block, &cond.pre);
+ cond.expr = fold_build1_loc (code->expr1->where.lb->location,
+- TRUTH_NOT_EXPR, boolean_type_node, cond.expr);
++ TRUTH_NOT_EXPR, TREE_TYPE (cond.expr), cond.expr);
+
+ /* Build "IF (! cond) GOTO exit_label". */
+ tmp = build1_v (GOTO_EXPR, exit_label);
--- a/src/gcc/fwprop.c
+++ b/src/gcc/fwprop.c
@@ -664,7 +664,12 @@
@@ -58417,7 +61656,7 @@
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
-#line 1 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 1 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 1 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
/* -*- indented-text -*- */
/* Process source files and output type information.
Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
@@ -58426,7 +61665,7 @@
<http://www.gnu.org/licenses/>. */
#define YY_NO_INPUT 1
-#line 25 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 25 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 25 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
#ifdef GENERATOR_FILE
#include "bconfig.h"
#else
@@ -58475,7 +61714,7 @@
register int yy_act;
-#line 63 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 63 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 63 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
/* Do this on entry to yylex(): */
*yylval = 0;
@@ -58493,7 +61732,7 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 74 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 74 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 74 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{
BEGIN(in_struct);
return TYPEDEF;
@@ -58502,7 +61741,7 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 78 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 78 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 78 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{
BEGIN(in_struct);
return STRUCT;
@@ -58511,7 +61750,7 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 82 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 82 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 82 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{
BEGIN(in_struct);
return UNION;
@@ -58520,7 +61759,7 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 86 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 86 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 86 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{
BEGIN(in_struct);
return EXTERN;
@@ -58529,7 +61768,7 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 90 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 90 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 90 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{
BEGIN(in_struct);
return STATIC;
@@ -58538,7 +61777,7 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 95 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 95 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 95 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{
BEGIN(in_struct);
return DEFVEC_OP;
@@ -58547,7 +61786,7 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 99 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 99 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 99 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{
BEGIN(in_struct);
return DEFVEC_I;
@@ -58556,7 +61795,7 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 103 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 103 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 103 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{
BEGIN(in_struct);
return DEFVEC_ALLOC;
@@ -58565,21 +61804,21 @@
case 9:
YY_RULE_SETUP
-#line 111 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 111 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 111 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{ BEGIN(in_struct_comment); }
YY_BREAK
case 10:
/* rule 10 can match eol */
YY_RULE_SETUP
-#line 113 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 113 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 113 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{ update_lineno (yytext, yyleng); }
YY_BREAK
case 11:
/* rule 11 can match eol */
YY_RULE_SETUP
-#line 114 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 114 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 114 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{ lexer_line.line++; }
YY_BREAK
case 12:
@@ -58588,7 +61827,7 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 116 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 116 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 116 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
/* don't care */
YY_BREAK
case 13:
@@ -58597,7 +61836,7 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 117 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 117 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 117 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{ return GTY_TOKEN; }
YY_BREAK
case 14:
@@ -58606,7 +61845,7 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 118 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 118 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 118 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{ return VEC_TOKEN; }
YY_BREAK
case 15:
@@ -58615,7 +61854,7 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 119 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 119 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 119 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{ return UNION; }
YY_BREAK
case 16:
@@ -58624,7 +61863,7 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 120 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 120 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 120 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{ return STRUCT; }
YY_BREAK
case 17:
@@ -58633,7 +61872,7 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 121 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 121 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 121 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{ return ENUM; }
YY_BREAK
case 18:
@@ -58642,7 +61881,7 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 122 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 122 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 122 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{ return PTR_ALIAS; }
YY_BREAK
case 19:
@@ -58651,13 +61890,13 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 123 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 123 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 123 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{ return NESTED_PTR; }
YY_BREAK
case 20:
YY_RULE_SETUP
-#line 124 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 124 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 124 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{ return NUM; }
YY_BREAK
case 21:
@@ -58666,7 +61905,7 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 125 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 125 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 125 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{
*yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1);
return PARAM_IS;
@@ -58675,12 +61914,12 @@
(yy_c_buf_p) = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
-#line 131 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 131 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 131 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
case 23:
/* rule 23 can match eol */
YY_RULE_SETUP
-#line 131 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 131 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 131 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{
size_t len;
@@ -58689,7 +61928,7 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 143 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 143 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 143 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{
*yylval = XDUPVAR (const char, yytext, yyleng, yyleng+1);
return ID;
@@ -58698,7 +61937,7 @@
/* rule 25 can match eol */
YY_RULE_SETUP
-#line 148 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 148 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 148 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{
*yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1);
return STRING;
@@ -58707,7 +61946,7 @@
/* rule 26 can match eol */
YY_RULE_SETUP
-#line 153 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 153 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 153 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{
*yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng-1);
return ARRAY;
@@ -58716,7 +61955,7 @@
/* rule 27 can match eol */
YY_RULE_SETUP
-#line 157 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 157 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 157 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{
*yylval = XDUPVAR (const char, yytext+1, yyleng-2, yyleng);
return CHAR;
@@ -58725,13 +61964,13 @@
case 28:
YY_RULE_SETUP
-#line 162 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 162 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 162 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{ return ELLIPSIS; }
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 163 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 163 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 163 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{ return yytext[0]; }
YY_BREAK
/* ignore pp-directives */
@@ -58739,13 +61978,13 @@
/* rule 30 can match eol */
YY_RULE_SETUP
-#line 166 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 166 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 166 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{lexer_line.line++;}
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 168 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 168 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 168 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{
error_at_line (&lexer_line, "unexpected character `%s'", yytext);
}
@@ -58754,35 +61993,35 @@
case 32:
YY_RULE_SETUP
-#line 173 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 173 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 173 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{ BEGIN(in_comment); }
YY_BREAK
case 33:
/* rule 33 can match eol */
YY_RULE_SETUP
-#line 174 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 174 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 174 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{ lexer_line.line++; }
YY_BREAK
case 34:
-#line 176 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 176 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 176 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
case 35:
/* rule 35 can match eol */
-#line 177 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 177 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 177 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
case 36:
/* rule 36 can match eol */
YY_RULE_SETUP
-#line 177 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 177 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 177 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 37:
/* rule 37 can match eol */
YY_RULE_SETUP
-#line 178 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 178 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 178 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{ update_lineno (yytext, yyleng); }
YY_BREAK
case 38:
@@ -58791,7 +62030,7 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 179 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 179 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 179 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
@@ -58799,16 +62038,16 @@
/* rule 39 can match eol */
YY_RULE_SETUP
-#line 182 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 182 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 182 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{ lexer_line.line++; }
YY_BREAK
case 40:
-#line 184 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 184 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 184 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
case 41:
YY_RULE_SETUP
-#line 184 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 184 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 184 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 42:
@@ -58817,29 +62056,29 @@
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 185 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 185 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 185 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 43:
YY_RULE_SETUP
-#line 187 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 187 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 187 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{ BEGIN(INITIAL); }
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 188 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 188 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 188 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{ BEGIN(in_struct); }
YY_BREAK
case 45:
-#line 191 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 191 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 191 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
case 46:
YY_RULE_SETUP
-#line 191 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 191 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 191 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
{
error_at_line (&lexer_line,
"unterminated comment or string; unexpected EOF");
@@ -58848,13 +62087,13 @@
/* rule 47 can match eol */
YY_RULE_SETUP
-#line 196 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 196 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 196 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
/* do nothing */
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 198 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 198 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 198 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
YY_FATAL_ERROR( "flex scanner jammed" );
YY_BREAK
-#line 1654 "gengtype-lex.c"
@@ -58878,7 +62117,7 @@
#define YYTABLES_NAME "yytables"
-#line 198 "/space/rguenther/gcc-4.7.3/gcc-4.7.3/gcc/gengtype-lex.l"
-+#line 198 "/work1/rouxy/work/sources/gcc-linaro/release/4.7-2013.05/gcc-linaro-4.7-2013.05/gcc/gengtype-lex.l"
++#line 198 "/media/lyon/9be1a707-5b7f-46da-9106-e084a5dbb011/ssd/src/GCC/sources/release/4.7-2014.01/gcc-linaro-4.7-2014.01/gcc/gengtype-lex.l"
@@ -60892,10 +64131,6 @@
/* Likewise with X. In particular this can happen when
noce_get_condition looks farther back in the instruction
stream than one might expect. */
---- a/src/gcc/LINARO-VERSION
-+++ b/src/gcc/LINARO-VERSION
-@@ -0,0 +1 @@
-+4.7-2013.05
--- a/src/gcc/lower-subreg.c
+++ b/src/gcc/lower-subreg.c
@@ -233,9 +233,9 @@
@@ -60988,31 +64223,146 @@
return 0;
}
---- a/src/gcc/Makefile.in
-+++ b/src/gcc/Makefile.in
-@@ -1848,11 +1848,12 @@
- "$(MULTILIB_EXTRA_OPTS)" \
- "$(MULTILIB_EXCLUSIONS)" \
- "$(MULTILIB_OSDIRNAMES)" \
-+ "$(MULTILIB_REQUIRED)" \
- "$(MULTIARCH_DIRNAME)" \
- "@enable_multilib@" \
- > tmp-mlib.h; \
- else \
-- $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' "$(MULTIARCH_DIRNAME)" no \
-+ $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' '' "$(MULTIARCH_DIRNAME)" no \
- > tmp-mlib.h; \
- fi
- $(SHELL) $(srcdir)/../move-if-change tmp-mlib.h multilib.h
-@@ -3904,7 +3905,7 @@
- $(SYSTEM_H) coretypes.h $(GTM_H) errors.h $(READ_MD_H) gensupport.h
- build/gengenrtl.o : gengenrtl.c $(BCONFIG_H) $(SYSTEM_H) rtl.def
- gengtype-lex.o build/gengtype-lex.o : gengtype-lex.c gengtype.h $(SYSTEM_H)
--gengtype-lex.o: $(CONFIG_H)
-+gengtype-lex.o: $(CONFIG_H) $(BCONFIG_H)
- build/gengtype-lex.o: $(BCONFIG_H)
- gengtype-parse.o build/gengtype-parse.o : gengtype-parse.c gengtype.h \
- $(SYSTEM_H)
+--- a/src/gcc/objc/ChangeLog
++++ b/src/gcc/objc/ChangeLog
+@@ -1,3 +1,14 @@
++2013-09-01 Iain Sandoe <iain@codesourcery.com>
++
++ Backported from 4.8
++ 2012-06-19 Steven Bosscher <steven@gcc.gnu.org>
++
++ * objc-next-runtime-abi-01.c: Do not include tm.h and output.h.
++ Include c-family/c-target.h.
++ (handle_next_class_ref): Rewrite to emit top-level asm statements.
++ (handle_next_impent): Likewise.
++ * objc/Make-lang.in: Fix dependencies for objc-next-runtime-abi-01.o.
++
+ 2013-04-11 Release Manager
+
+ * GCC 4.7.3 released.
+--- a/src/gcc/objc/Make-lang.in
++++ b/src/gcc/objc/Make-lang.in
+@@ -106,7 +106,7 @@
+ gt-objc-objc-next-runtime-abi-01.h \
+ $(START_HDRS) \
+ $(GGC_H) $(DIAGNOSTIC_CORE_H) $(FLAGS_H) input.h \
+- $(TARGET_H) output.h \
++ $(TARGET_H) \
+ objc/objc-encoding.h \
+ objc/objc-next-metadata-tags.h \
+ objc/objc-runtime-hooks.h \
+--- a/src/gcc/objc/objc-next-runtime-abi-01.c
++++ b/src/gcc/objc/objc-next-runtime-abi-01.c
+@@ -26,7 +26,6 @@
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+-#include "tm.h"
+ #include "tree.h"
+
+ #ifdef OBJCPLUS
+@@ -49,7 +48,7 @@
+
+ #include "ggc.h"
+ #include "target.h"
+-#include "output.h"
++#include "c-family/c-target.h"
+ #include "tree-iterator.h"
+
+ #include "objc-runtime-hooks.h"
+@@ -2268,47 +2267,50 @@
+ init_objc_symtab (TREE_TYPE (UOBJC_SYMBOLS_decl)));
+ }
+
++/* Any target implementing NeXT ObjC m32 ABI has to ensure that objects
++ refer to, and define, symbols that enforce linkage of classes into the
++ executable image, preserving unix archive semantics.
++
++ At present (4.8), the only targets implementing this are Darwin; these
++ use top level asms to implement a scheme (see config/darwin-c.c). The
++ latter method is a hack, but compatible with LTO see also PR48109 for
++ further discussion and other possible methods. */
+
+ static void
+-handle_next_class_ref (tree chain)
++handle_next_class_ref (tree chain ATTRIBUTE_UNUSED)
+ {
+- const char *name = IDENTIFIER_POINTER (TREE_VALUE (chain));
+- char *string = (char *) alloca (strlen (name) + 30);
+-
+- sprintf (string, ".objc_class_name_%s", name);
+-
+-#ifdef ASM_DECLARE_UNRESOLVED_REFERENCE
+- ASM_DECLARE_UNRESOLVED_REFERENCE (asm_out_file, string);
+-#else
+- return ; /* NULL build for targets other than Darwin. */
+-#endif
++ if (targetcm.objc_declare_unresolved_class_reference)
++ {
++ const char *name = IDENTIFIER_POINTER (TREE_VALUE (chain));
++ char *string = (char *) alloca (strlen (name) + 30);
++ sprintf (string, ".objc_class_name_%s", name);
++ targetcm.objc_declare_unresolved_class_reference (string);
++ }
+ }
+
+ static void
+-handle_next_impent (struct imp_entry *impent)
++handle_next_impent (struct imp_entry *impent ATTRIBUTE_UNUSED)
+ {
+- char buf[BUFSIZE];
+-
+- switch (TREE_CODE (impent->imp_context))
++ if (targetcm.objc_declare_class_definition)
+ {
+- case CLASS_IMPLEMENTATION_TYPE:
+- snprintf (buf, BUFSIZE, ".objc_class_name_%s",
+- IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context)));
+- break;
+- case CATEGORY_IMPLEMENTATION_TYPE:
+- snprintf (buf, BUFSIZE, "*.objc_category_name_%s_%s",
+- IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context)),
+- IDENTIFIER_POINTER (CLASS_SUPER_NAME (impent->imp_context)));
+- break;
+- default:
+- return;
+- }
++ char buf[BUFSIZE];
+
+-#ifdef ASM_DECLARE_CLASS_REFERENCE
+- ASM_DECLARE_CLASS_REFERENCE (asm_out_file, buf);
+-#else
+- return ; /* NULL build for targets other than Darwin. */
+-#endif
++ switch (TREE_CODE (impent->imp_context))
++ {
++ case CLASS_IMPLEMENTATION_TYPE:
++ snprintf (buf, BUFSIZE, ".objc_class_name_%s",
++ IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context)));
++ break;
++ case CATEGORY_IMPLEMENTATION_TYPE:
++ snprintf (buf, BUFSIZE, "*.objc_category_name_%s_%s",
++ IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context)),
++ IDENTIFIER_POINTER (CLASS_SUPER_NAME (impent->imp_context)));
++ break;
++ default:
++ return;
++ }
++ targetcm.objc_declare_class_definition (buf);
++ }
+ }
+
+ static void
+@@ -2415,8 +2417,7 @@
+
+ /* Dump the class references. This forces the appropriate classes
+ to be linked into the executable image, preserving unix archive
+- semantics. This can be removed when we move to a more dynamically
+- linked environment. */
++ semantics. */
+
+ for (chain = cls_ref_chain; chain; chain = TREE_CHAIN (chain))
+ {
--- a/src/gcc/optabs.c
+++ b/src/gcc/optabs.c
@@ -3028,6 +3028,47 @@
@@ -61097,6 +64447,57 @@
if (temp)
{
if (mclass != MODE_INT)
+@@ -7212,8 +7267,7 @@
+
+ create_output_operand (&ops[0], target, mode);
+ create_fixed_operand (&ops[1], mem);
+- /* VAL may have been promoted to a wider mode. Shrink it if so. */
+- create_convert_operand_to (&ops[2], val, mode, true);
++ create_input_operand (&ops[2], val, mode);
+ create_integer_operand (&ops[3], model);
+ if (maybe_expand_insn (icode, 4, ops))
+ return ops[0].value;
+@@ -7252,8 +7306,7 @@
+ struct expand_operand ops[3];
+ create_output_operand (&ops[0], target, mode);
+ create_fixed_operand (&ops[1], mem);
+- /* VAL may have been promoted to a wider mode. Shrink it if so. */
+- create_convert_operand_to (&ops[2], val, mode, true);
++ create_input_operand (&ops[2], val, mode);
+ if (maybe_expand_insn (icode, 3, ops))
+ return ops[0].value;
+ }
+@@ -7295,8 +7348,6 @@
+ {
+ if (!target || !register_operand (target, mode))
+ target = gen_reg_rtx (mode);
+- if (GET_MODE (val) != VOIDmode && GET_MODE (val) != mode)
+- val = convert_modes (mode, GET_MODE (val), val, 1);
+ if (expand_compare_and_swap_loop (mem, target, val, NULL_RTX))
+ return target;
+ }
+@@ -7508,8 +7559,8 @@
+ create_output_operand (&ops[0], target_bool, bool_mode);
+ create_output_operand (&ops[1], target_oval, mode);
+ create_fixed_operand (&ops[2], mem);
+- create_convert_operand_to (&ops[3], expected, mode, true);
+- create_convert_operand_to (&ops[4], desired, mode, true);
++ create_input_operand (&ops[3], expected, mode);
++ create_input_operand (&ops[4], desired, mode);
+ create_integer_operand (&ops[5], is_weak);
+ create_integer_operand (&ops[6], succ_model);
+ create_integer_operand (&ops[7], fail_model);
+@@ -7530,8 +7581,8 @@
+
+ create_output_operand (&ops[0], target_oval, mode);
+ create_fixed_operand (&ops[1], mem);
+- create_convert_operand_to (&ops[2], expected, mode, true);
+- create_convert_operand_to (&ops[3], desired, mode, true);
++ create_input_operand (&ops[2], expected, mode);
++ create_input_operand (&ops[3], desired, mode);
+ if (!maybe_expand_insn (icode, 4, ops))
+ return false;
+
--- a/src/gcc/opts.c
+++ b/src/gcc/opts.c
@@ -499,6 +499,7 @@
@@ -61443,6 +64844,34 @@
default:
gcc_unreachable ();
}
+--- a/src/gcc/recog.c
++++ b/src/gcc/recog.c
+@@ -3030,6 +3030,9 @@
+ return 1;
+ }
+
++/* Regno offset to be used in the register search. */
++static int search_ofs;
++
+ /* Try to find a hard register of mode MODE, matching the register class in
+ CLASS_STR, which is available at the beginning of insn CURRENT_INSN and
+ remains available until the end of LAST_INSN. LAST_INSN may be NULL_RTX,
+@@ -3045,7 +3048,6 @@
+ peep2_find_free_register (int from, int to, const char *class_str,
+ enum machine_mode mode, HARD_REG_SET *reg_set)
+ {
+- static int search_ofs;
+ enum reg_class cl;
+ HARD_REG_SET live;
+ df_ref *def_rec;
+@@ -3488,6 +3490,7 @@
+ /* Initialize the regsets we're going to use. */
+ for (i = 0; i < MAX_INSNS_PER_PEEP2 + 1; ++i)
+ peep2_insn_data[i].live_before = BITMAP_ALLOC (&reg_obstack);
++ search_ofs = 0;
+ live = BITMAP_ALLOC (&reg_obstack);
+
+ FOR_EACH_BB_REVERSE (bb)
--- a/src/gcc/reload.c
+++ b/src/gcc/reload.c
@@ -283,7 +283,7 @@
@@ -62009,6 +65438,16 @@
{
sched_init_region_reg_pressure_info ();
for (bb = 0; bb < current_nr_blocks; bb++)
+--- a/src/gcc/simplify-rtx.c
++++ b/src/gcc/simplify-rtx.c
+@@ -2558,6 +2558,7 @@
+ HOST_WIDE_INT mask = INTVAL (trueop1) << count;
+
+ if (mask >> count == INTVAL (trueop1)
++ && trunc_int_for_mode (mask, mode) == mask
+ && (mask & nonzero_bits (XEXP (op0, 0), mode)) == 0)
+ return simplify_gen_binary (ASHIFTRT, mode,
+ plus_constant (XEXP (op0, 0), mask),
--- a/src/gcc/target.def
+++ b/src/gcc/target.def
@@ -2758,6 +2758,13 @@
@@ -62027,7 +65466,217 @@
bool, false)
--- a/src/gcc/testsuite/ChangeLog
+++ b/src/gcc/testsuite/ChangeLog
-@@ -1,3 +1,105 @@
+@@ -1,3 +1,315 @@
++2014-01-03 Joseph Myers <joseph@codesourcery.com>
++
++ * gcc.target/powerpc/rs6000-ldouble-3.c: New test.
++
++2013-12-12 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-12-12 Ryan Mansfield <rmansfield@qnx.com>
++
++ PR testsuite/59442
++ * gcc.target/i386/sse2-movapd-1.c: Fix alignment attributes.
++ * gcc.target/i386/sse2-movapd-2.c: Likewise.
++ * gcc.target/i386/avx-vmovapd-256-1.c: Likewise.
++ * gcc.target/i386/avx-vmovapd-256-2.c: Likewise.
++
++2013-12-04 Marek Polacek <polacek@redhat.com>
++
++ PR c/59351
++ * gcc.dg/pr59351.c: Use -pedantic instead of -Wpedantic.
++
++2013-12-03 Marek Polacek <polacek@redhat.com>
++
++ Backport from mainline
++ 2013-12-03 Marek Polacek <polacek@redhat.com>
++
++ PR c/59351
++ * gcc.dg/pr59351.c: New test.
++
++2013-11-28 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-11-27 Uros Bizjak <ubizjak@gmail.com>
++ Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
++
++ PR target/56788
++ * gcc.target/i386/xop-frczX.c: New test.
++
++2013-11-25 Vidya Praveen <vidyapraveen@arm.com>
++
++ Backport from mainline
++ 2013-10-21 Vidya Praveen <vidyapraveen@arm.com>
++
++ * gcc.dg/20050922-1.c: Remove stdlib.h and declare abort().
++ * gcc.dg/20050922-1.c: Remove stdlib.h and declare abort() and exit().
++
++2013-11-17 Paul Thomas <pault@gcc.gnu.org>
++
++ PR fortran/58771
++ * gfortran.dg/derived_external_function_1.f90 : New test
++
++2013-11-02 Janus Weil <janus@gcc.gnu.org>
++
++ Backport from mainline
++ 2013-09-23 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/58355
++ * gfortran.dg/extends_15.f90: New.
++
++2013-10-28 Tom de Vries <tom@codesourcery.com>
++
++ * gcc.target/arm/require-pic-register-loc.c: New test.
++
++2013-10-28 Tom de Vries <tom@codesourcery.com>
++
++ * gcc.target/arm/require-pic-register-loc.c: New test.
++
++2013-10-26 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-10-22 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/58779
++ * gcc.target/i386/pr30315.c: Remove MINUSCC, DECCC, MINUSCCONLY
++ and MINUSCCZEXT defines. Update scan-assembler dg directive.
++ * gcc.dg/torture/pr58779.c: New test.
++
++2013-10-25 Richard Henderson <rth@redhat.com>
++
++ PR rtl/58542
++ * gcc.dg/atomic-store-6.c: New.
++
++2013-10-25 Tom de Vries <tom@codesourcery.com>
++
++ PR c++/58282
++ * g++.dg/tm/noexcept-6.C: New test.
++
++2013-10-25 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc.c-torture/execute/pr58831.c: New test.
++
++2013-10-16 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/58633
++ * g++.dg/cpp0x/decltype57.C: New.
++ * g++.dg/cpp0x/enum18.C: Revert r174385 changes.
++
++2013-09-23 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gnat.dg/opt28.ad[sb]: New test.
++ * gnat.dg/opt28_pkg.ads: New helper.
++
++2013-09-18 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gnat.dg/in_out_parameter4.adb: New test.
++
++2013-08-13 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gnat.dg/loop_optimization16.adb: New test.
++ * gnat.dg/loop_optimization16_pkg.ad[sb]: New helper.
++
++2013-08-13 Marek Polacek <polacek@redhat.com>
++
++ Backport from 4.8:
++ 2013-08-13 Marek Polacek <polacek@redhat.com>
++
++ PR tree-optimization/57980
++ * gcc.dg/pr57980.c: New test.
++
++2013-08-11 Janus Weil <janus@gcc.gnu.org>
++
++ Backport from trunk:
++ 2013-08-09 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/58058
++ * gfortran.dg/transfer_intrinsic_6.f90: New.
++
++2013-07-16 Iain Sandoe <iain@codesourcery.com>
++
++ PR target/55656
++ PR target/55657
++ * obj-c++.dg/cxx-ivars-3.mm: Use NSObject instead of Object.
++ * obj-c++.dg/strings/const-cfstring-5.mm: Likewise.
++ * obj-c++.dg/torture/strings/const-str-10.mm: Likewise.
++ * obj-c++.dg/torture/strings/const-str-9.mm: Likewise.
++ * objc.dg/image-info.m: Likewise.
++ * objc.dg/symtab-1.m: Likewise.
++ * objc.dg/torture/strings/const-str-10.m: Likewise.
++ * objc.dg/torture/strings/const-str-11.m: Likewise.
++ * objc.dg/torture/strings/const-str-9.m: Likewise.
++ * objc.dg/zero-link-1.m: Likewise.
++ * objc.dg/zero-link-2.m: Likewise.
++ * objc.dg/no-extra-load.m: Avoid Foundation.h.
++ * objc.dg/objc-foreach-4.m: Likewise.
++ * objc.dg/objc-foreach-5.m: Likewise.
++ * obj-c++.dg/proto-lossage-7.mm: Use NSObject instead of Object
++ (for Darwin).
++ * obj-c++.dg/strings/const-str-12.mm: Likewise.
++ * obj-c++.dg/syntax-error-1.mm: Likewise.
++ * objc.dg/method-6.m: Likewise.
++ * objc.dg/pr23214.m: Likewise.
++ * objc.dg/proto-lossage-7.m: Likewise.
++ * objc.dg/strings/const-str-12b.m: Likewise.
++ * objc.dg/zero-link-3.m: Likewise.
++ * obj-c++.dg/method-12.mm: Skip on Darwin versions without 'Object'.
++ * objc.dg/encode-7-next-64bit.m: Use NSObject instead of Object,
++ adjust headers, interfaces and encoded types to reflect current system
++ versions. Add FIXME and outputs from current system compiler for
++ reference.
++
++2012-12-03 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/54170
++ * g++.dg/cpp0x/lambda/lambda-nullptr.C: New.
++
++2013-07-08 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/57785
++ * gfortran.dg/dot_product_2.f90: New.
++
++2013-07-08 Jakub Jelinek <jakub@redhat.com>
++
++ PR rtl-optimization/57829
++ * gcc.c-torture/execute/pr57829.c: New test.
++
++2013-07-05 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-06-20 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/57655
++ * gcc.target/i386/pr57655.c: New test.
++
++2013-06-09 Jakub Jelinek <jakub@redhat.com>
++
++ PR target/57568
++ * gcc.c-torture/execute/pr57568.c: New test.
++
++2013-06-06 Tobias Burnus <burnus@net-b.de>
++
++ Backport from mainline
++ 2012-08-27 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/54370
++ * gfortran.dg/do_5.f90: New.
++
++2013-06-01 Janus Weil <janus@gcc.gnu.org>
++ Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/57217
++ * gfortran.dg/typebound_override_4.f90: New.
++
++2013-05-26 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gnat.dg/specs/last_bit.ads: New test.
++
++2013-05-13 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/57264
++ * gcc.target/i386/pr57264.c: New test.
++
+2013-05-07 Michael Meissner <meissner@linux.vnet.ibm.com>
+
+ Backport from trunk
@@ -62133,6 +65782,15 @@
2013-04-11 Release Manager
* GCC 4.7.3 released.
+@@ -54,7 +366,7 @@
+
+ Backport from mainline
+ 2013-02-27 Andrey Belevantsev <abel@ispras.ru>
+-
++
+ PR middle-end/45472
+ * gcc.dg/pr45472.c: New test.
+
--- a/src/gcc/testsuite/ChangeLog.aarch64
+++ b/src/gcc/testsuite/ChangeLog.aarch64
@@ -0,0 +1,446 @@
@@ -62582,6 +66240,538 @@
+ * gcc.dg/const-float128-ped.c: Likewise.
+ * gcc.dg/const-float128.c: Likewise.
+ * gcc.dg/stack-usage-1.c: Likewise.
+--- a/src/gcc/testsuite/g++.dg/abi/aarch64_guard1.C
++++ b/src/gcc/testsuite/g++.dg/abi/aarch64_guard1.C
+@@ -0,0 +1,17 @@
++// Check that the initialization guard variable is an 8-byte aligned,
++// 8-byte doubleword and that only the least significant bit is used
++// for initialization guard variables.
++// { dg-do compile { target aarch64*-*-* } }
++// { dg-options "-O -fdump-tree-original -fno-section-anchors" }
++
++int bar();
++
++int *foo ()
++{
++ static int x = bar ();
++ return &x;
++}
++
++// { dg-final { scan-assembler _ZGVZ3foovE1x,8,8 } }
++// { dg-final { scan-tree-dump "_ZGVZ3foovE1x & 1" "original" } }
++// { dg-final { cleanup-tree-dump "original" } }
+--- a/src/gcc/testsuite/g++.dg/abi/arm_va_list.C
++++ b/src/gcc/testsuite/g++.dg/abi/arm_va_list.C
+@@ -1,9 +1,10 @@
+-// { dg-do compile }
++// { dg-do compile { target { aarch64*-*-* arm*-*-* } } }
+ // { dg-options "-Wno-abi" }
+-// { dg-require-effective-target arm_eabi }
++// { dg-require-effective-target arm_eabi { target arm*-*-* } }
+
+ // AAPCS \S 7.1.4 requires that va_list be a typedef for "struct
+ // __va_list". The mangling is as if it were "std::__va_list".
++// AAPCS64 \S 7.1.4 has the same requirement for AArch64 targets.
+ // #include <stdarg.h>
+ typedef __builtin_va_list va_list;
+
+--- a/src/gcc/testsuite/g++.dg/abi/mangle-neon-aarch64.C
++++ b/src/gcc/testsuite/g++.dg/abi/mangle-neon-aarch64.C
+@@ -0,0 +1,55 @@
++// Test that AArch64 AdvSIMD (NEON) vector types have their names mangled
++// correctly.
++
++// { dg-do compile { target { aarch64*-*-* } } }
++
++#include <arm_neon.h>
++
++void f0 (int8x8_t a) {}
++void f1 (int16x4_t a) {}
++void f2 (int32x2_t a) {}
++void f3 (uint8x8_t a) {}
++void f4 (uint16x4_t a) {}
++void f5 (uint32x2_t a) {}
++void f6 (float32x2_t a) {}
++void f7 (poly8x8_t a) {}
++void f8 (poly16x4_t a) {}
++
++void f9 (int8x16_t a) {}
++void f10 (int16x8_t a) {}
++void f11 (int32x4_t a) {}
++void f12 (int64x2_t a) {}
++void f13 (uint8x16_t a) {}
++void f14 (uint16x8_t a) {}
++void f15 (uint32x4_t a) {}
++void f16 (uint64x2_t a) {}
++void f17 (float32x4_t a) {}
++void f18 (float64x2_t a) {}
++void f19 (poly8x16_t a) {}
++void f20 (poly16x8_t a) {}
++
++void f21 (int8x16_t, int8x16_t) {}
++
++
++// { dg-final { scan-assembler "_Z2f010__Int8x8_t:" } }
++// { dg-final { scan-assembler "_Z2f111__Int16x4_t:" } }
++// { dg-final { scan-assembler "_Z2f211__Int32x2_t:" } }
++// { dg-final { scan-assembler "_Z2f311__Uint8x8_t:" } }
++// { dg-final { scan-assembler "_Z2f412__Uint16x4_t:" } }
++// { dg-final { scan-assembler "_Z2f512__Uint32x2_t:" } }
++// { dg-final { scan-assembler "_Z2f613__Float32x2_t:" } }
++// { dg-final { scan-assembler "_Z2f711__Poly8x8_t:" } }
++// { dg-final { scan-assembler "_Z2f812__Poly16x4_t:" } }
++// { dg-final { scan-assembler "_Z2f911__Int8x16_t:" } }
++// { dg-final { scan-assembler "_Z3f1011__Int16x8_t:" } }
++// { dg-final { scan-assembler "_Z3f1111__Int32x4_t:" } }
++// { dg-final { scan-assembler "_Z3f1211__Int64x2_t:" } }
++// { dg-final { scan-assembler "_Z3f1312__Uint8x16_t:" } }
++// { dg-final { scan-assembler "_Z3f1412__Uint16x8_t:" } }
++// { dg-final { scan-assembler "_Z3f1512__Uint32x4_t:" } }
++// { dg-final { scan-assembler "_Z3f1612__Uint64x2_t:" } }
++// { dg-final { scan-assembler "_Z3f1713__Float32x4_t:" } }
++// { dg-final { scan-assembler "_Z3f1813__Float64x2_t:" } }
++// { dg-final { scan-assembler "_Z3f1912__Poly8x16_t:" } }
++// { dg-final { scan-assembler "_Z3f2012__Poly16x8_t:" } }
++// { dg-final { scan-assembler "_Z3f2111__Int8x16_tS_:" } }
+--- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr8.C
++++ b/src/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr8.C
+@@ -0,0 +1,54 @@
++// PR c++/57047
++// { dg-require-effective-target c++11 }
++
++template <typename>
++struct A;
++template <typename T>
++struct A <T &>
++{
++ typedef T type;
++};
++template <typename T>
++constexpr T && foo (typename A <T>::type & __t) noexcept
++{
++ return static_cast <T &&>(__t);
++}
++template <class T1, class T2>
++struct B
++{
++ T1 t1;
++ T2 t2;
++ template <class U>
++ constexpr B (U && __x, const T2 & __y) : t1 (foo <U> (__x)), t2 (__y) {}
++};
++static inline constexpr bool
++fn1 (const char c)
++{
++ return ('0' <= c) && (c <= '9');
++}
++static inline constexpr bool
++fn2 (const char c)
++{
++ return (('A' <= c) && (c <= 'Z')) || (('a' <= c) && (c <= 'z'));
++}
++static constexpr bool
++fn3 (const char *const x)
++{
++ return (x[1] == '\0' && x[0] == ']') ? true : (!fn1 (x[0])) ? false : fn3 (&x[1]);
++}
++static constexpr bool
++fn4 (const char *const x)
++{
++ return (x[0] == '\0') ? fn3 (&x[1]) : fn4 (&x[1]);
++}
++static inline constexpr bool
++fn5 (const char *const x)
++{
++ return fn2 (x[0]) ? fn4 (x) : false;
++}
++struct C final
++{
++ constexpr C (const char *const t1) : c (fn5 (t1) ? 199 : 69) {}
++ unsigned c;
++};
++B <C, C> p ("a", "b");
+--- a/src/gcc/testsuite/g++.dg/cpp0x/decltype57.C
++++ b/src/gcc/testsuite/g++.dg/cpp0x/decltype57.C
+@@ -0,0 +1,8 @@
++// PR c++/58633
++// { dg-do compile { target c++11 } }
++
++void foo(int i)
++{
++ typedef int I;
++ decltype(i.I::~I())* p;
++}
+--- a/src/gcc/testsuite/g++.dg/cpp0x/enum18.C
++++ b/src/gcc/testsuite/g++.dg/cpp0x/enum18.C
+@@ -4,5 +4,5 @@
+ int main(void) {
+ enum e {};
+ e ev;
+- ev.e::~e_u(); // { dg-error "e_u. has not been declared" }
++ ev.e::~e_u(); // { dg-error "" }
+ }
+--- a/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh3.C
++++ b/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh3.C
+@@ -0,0 +1,14 @@
++// PR c++/56388
++// { dg-require-effective-target c++11 }
++
++int main()
++{
++ bool /*const*/ condition = false;
++
++ [&]{
++ try{}
++ catch(...){
++ if(condition){}
++ }
++ }();
++}
+--- a/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nullptr.C
++++ b/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nullptr.C
+@@ -0,0 +1,47 @@
++// PR c++/54170
++// { dg-do run { target c++11 } }
++
++#include <cassert>
++
++struct A;
++typedef A* ptr;
++typedef int (A::*pmf) (int);
++typedef int (A::*pdm);
++
++int total;
++
++void add(int n)
++{
++ total += n;
++}
++
++template <typename RType, typename Callable>
++RType Call(Callable native_func, int arg)
++{
++ return native_func(arg);
++}
++
++template <typename RType>
++RType do_test(int delta)
++{
++ return Call<RType>([=](int delta) { add(delta); return nullptr; }, delta);
++}
++
++template <typename RType>
++void test()
++{
++ total = 0;
++ assert (!do_test<RType>(5));
++ assert (total == 5);
++ assert (!do_test<RType>(20));
++ assert (total == 25);
++ assert (!do_test<RType>(-256));
++ assert (total == -231);
++}
++
++int main()
++{
++ test<ptr>();
++ test<pdm>();
++ test<pmf>();
++}
+--- a/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-return1.C
++++ b/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-return1.C
+@@ -0,0 +1,26 @@
++// PR c++/57437
++// { dg-require-effective-target c++11 }
++
++struct A {
++ int i;
++
++ A(): i(42) {}
++ A(const A&) = default;
++ A(A&& a): i(a.i) { a.i = 0; }
++};
++
++int main()
++{
++ A x;
++
++ auto y = [x] () mutable {
++ x.i++;
++ return x;
++ };
++
++ if (y().i != 43)
++ __builtin_abort ();
++
++ if (y().i != 44)
++ __builtin_abort ();
++}
+--- a/src/gcc/testsuite/g++.dg/debug/template2.C
++++ b/src/gcc/testsuite/g++.dg/debug/template2.C
+@@ -0,0 +1,14 @@
++// PR c++/57545
++
++template<typename T, long unsigned int N>
++struct array {
++ T data[N];
++};
++
++template<typename T>
++struct derived {
++ typedef long unsigned int size_type;
++ static const size_type n = 42;
++
++ array<int, n> a;
++};
+--- a/src/gcc/testsuite/g++.dg/expr/const1.C
++++ b/src/gcc/testsuite/g++.dg/expr/const1.C
+@@ -0,0 +1,9 @@
++// PR c++/57551
++
++extern unsigned long ADDR;
++
++unsigned long f(){
++ const unsigned long* const var=&ADDR;
++ const unsigned long retval=var[1];
++ return retval;
++}
+--- a/src/gcc/testsuite/g++.dg/other/PR23205.C
++++ b/src/gcc/testsuite/g++.dg/other/PR23205.C
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-skip-if "No stabs" { mmix-*-* *-*-aix* alpha*-*-* hppa*64*-*-* ia64-*-* tile*-*-* *-*-vxworks } { "*" } { "" } } */
++/* { dg-skip-if "No stabs" { aarch64*-*-* mmix-*-* *-*-aix* alpha*-*-* hppa*64*-*-* ia64-*-* tile*-*-* *-*-vxworks } { "*" } { "" } } */
+ /* { dg-options "-gstabs+ -fno-eliminate-unused-debug-types" } */
+
+ const int foobar = 4;
+--- a/src/gcc/testsuite/g++.dg/other/pr23205-2.C
++++ b/src/gcc/testsuite/g++.dg/other/pr23205-2.C
+@@ -1,5 +1,5 @@
+ /* { dg-do compile } */
+-/* { dg-skip-if "No stabs" { mmix-*-* *-*-aix* alpha*-*-* hppa*64*-*-* ia64-*-* tile*-*-* } { "*" } { "" } } */
++/* { dg-skip-if "No stabs" { aarch64*-*-* mmix-*-* *-*-aix* alpha*-*-* hppa*64*-*-* ia64-*-* tile*-*-* } { "*" } { "" } } */
+ /* { dg-options "-gstabs+ -fno-eliminate-unused-debug-types -ftoplevel-reorder" } */
+
+ const int foobar = 4;
+--- a/src/gcc/testsuite/g++.dg/template/array26.C
++++ b/src/gcc/testsuite/g++.dg/template/array26.C
+@@ -0,0 +1,40 @@
++// PR c++/57325
++
++class valarray { int _M_data; };
++template < typename > struct SimpleJet { valarray partials; };
++
++template < class C > struct scoped_ptr_impl
++{
++ scoped_ptr_impl (C *):data_ () { }
++ struct Data
++ {
++ C ptr;
++ };
++ Data data_;
++};
++
++template < class, class = int >struct scoped_ptr;
++template < class C, class D > struct scoped_ptr <C[], D >
++{
++ scoped_ptr ():impl_ (0) { }
++ scoped_ptr_impl < C > impl_;
++};
++
++template < typename JetsT > void
++TestJets (JetsT *)
++{
++ typedef typename JetsT::JetType JetT;
++ scoped_ptr < JetT[] > a;
++}
++
++template < typename T > struct SimpleJets
++{
++ typedef SimpleJet < T > JetType;
++ scoped_ptr < SimpleJet < T >[] > vars_;
++};
++
++void fn ()
++{
++ SimpleJets < double >b;
++ TestJets (&b);
++}
+--- a/src/gcc/testsuite/g++.dg/template/delete2.C
++++ b/src/gcc/testsuite/g++.dg/template/delete2.C
+@@ -0,0 +1,26 @@
++// PR c++/58119
++
++template <class T>
++struct A
++{
++ operator T*();
++ template <class U>
++ operator A<U>();
++};
++
++template <class T>
++struct B
++{
++ operator T*();
++ template <class U>
++ operator A<U>*();
++};
++
++int main()
++{
++ A<int> a;
++ delete a;
++
++ B<int> b;
++ delete b; // { dg-error "template|delete" }
++}
+--- a/src/gcc/testsuite/g++.dg/template/inherit9.C
++++ b/src/gcc/testsuite/g++.dg/template/inherit9.C
+@@ -0,0 +1,15 @@
++// PR c++/58273
++
++class A {};
++class B
++{
++ int goo(A);
++};
++template<typename E>
++class D : public B
++{
++ void foo(A t)
++ {
++ int const i(B::goo(t));
++ }
++};
+--- a/src/gcc/testsuite/g++.dg/template/using23.C
++++ b/src/gcc/testsuite/g++.dg/template/using23.C
+@@ -0,0 +1,15 @@
++// PR c++/57831
++
++struct A {
++ void f();
++};
++template <class T> struct B : T {
++ typedef T base;
++ using base::f; // If I write "using B<T>::f" it's ok
++ void g( ) {
++ B<T>::f(); // This is OK as expected
++ (this->*&T::f)(); // This is also OK
++ (this->*&B<T>::f)(); // This causes error
++ }
++};
++template struct B< A >;
+--- a/src/gcc/testsuite/g++.dg/tm/noexcept-6.C
++++ b/src/gcc/testsuite/g++.dg/tm/noexcept-6.C
+@@ -0,0 +1,23 @@
++// { dg-do compile }
++// { dg-options "-fno-exceptions -fgnu-tm -O -std=c++0x -fdump-tree-tmlower" }
++
++struct TrueFalse
++{
++ static constexpr bool v() { return true; }
++};
++
++int global;
++
++template<typename T> int foo()
++{
++ return __transaction_atomic noexcept(T::v()) (global + 1);
++}
++
++int f1()
++{
++ return foo<TrueFalse>();
++}
++
++/* { dg-final { scan-tree-dump-times "eh_must_not_throw" 0 "tmlower" } } */
++/* { dg-final { scan-tree-dump-times "__transaction_atomic" 1 "tmlower" } } */
++/* { dg-final { cleanup-tree-dump "tmlower" } } */
+--- a/src/gcc/testsuite/g++.dg/torture/pr54684.C
++++ b/src/gcc/testsuite/g++.dg/torture/pr54684.C
+@@ -0,0 +1,62 @@
++// { dg-do compile }
++
++typedef union tree_node *tree;
++typedef union gimple_statement_d *gimple;
++struct vec_prefix { unsigned num_; };
++template<typename T> struct vec_t {
++ unsigned length (void) const;
++ T &operator[] (unsigned);
++ vec_prefix prefix_;
++ T vec_[1];
++};
++template<typename T> inline unsigned vec_t<T>::length (void) const {
++ return prefix_.num_;
++}
++template<typename T> T & vec_t<T>::operator[] (unsigned ix) {
++ ((void)(__builtin_expect(!(ix < prefix_.num_), 0) ? __builtin_unreachable(), 0 : 0));
++ return vec_[ix];
++}
++enum tree_code { PARM_DECL };
++struct tree_base {
++ enum tree_code code : 16;
++ unsigned default_def_flag : 1;
++};
++union tree_node {
++ struct tree_base base;
++};
++struct ipa_param_descriptor {
++ tree decl;
++ unsigned used : 1;
++};
++typedef struct ipa_param_descriptor ipa_param_descriptor_t;
++struct ipa_node_params {
++ vec_t<ipa_param_descriptor_t> *descriptors;
++};
++static inline int ipa_get_param_count (struct ipa_node_params *info) {
++ return ((info->descriptors) ? (info->descriptors)->length () : 0);
++}
++static inline tree ipa_get_param (struct ipa_node_params *info, int i) {
++ return ((*(info->descriptors))[i]).decl;
++}
++static inline void ipa_set_param_used (struct ipa_node_params *info, int i, bool val) {
++ ((*(info->descriptors))[i]).used = val;
++}
++int ipa_get_param_decl_index (struct ipa_node_params *info, tree ptree)
++{
++ int i, count;
++ count = ipa_get_param_count (info);
++ for (i = 0; i < count; i++)
++ if (ipa_get_param (info, i) == ptree) return i;
++ return -1;
++}
++bool visit_ref_for_mod_analysis (gimple stmt __attribute__ ((__unused__)),
++ tree op, void *data)
++{
++ struct ipa_node_params *info = (struct ipa_node_params *) data;
++ if (op && ((enum tree_code) (op)->base.code) == PARM_DECL)
++ {
++ int index = ipa_get_param_decl_index (info, op);
++ ((void)(__builtin_expect(!(index >= 0), 0) ? __builtin_unreachable(), 0 : 0));
++ ipa_set_param_used (info, index, true);
++ }
++}
+--- a/src/gcc/testsuite/g++.dg/tree-ssa/ivopts-2.C
++++ b/src/gcc/testsuite/g++.dg/tree-ssa/ivopts-2.C
+@@ -7,5 +7,5 @@
+ *p = 1;
+ }
+
+-/* { dg-final { scan-tree-dump-times "PHI <p" 1 "ivopts"} } */
++/* { dg-final { scan-tree-dump-times "PHI <\[pb\]" 1 "ivopts"} } */
+ /* { dg-final { cleanup-tree-dump "ivopts" } } */
+--- a/src/gcc/testsuite/g++.old-deja/g++.abi/ptrmem.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.abi/ptrmem.C
+@@ -7,7 +7,7 @@
+ function. However, some platforms use all bits to encode a
+ function pointer. Such platforms use the lowest bit of the delta,
+ that is shifted left by one bit. */
+-#if defined __MN10300__ || defined __SH5__ || defined __arm__ || defined __thumb__ || defined __mips__
++#if defined __MN10300__ || defined __SH5__ || defined __arm__ || defined __thumb__ || defined __mips__ || defined __aarch64__
+ #define ADJUST_PTRFN(func, virt) ((void (*)())(func))
+ #define ADJUST_DELTA(delta, virt) (((delta) << 1) + !!(virt))
+ #else
--- a/src/gcc/testsuite/gcc.c-torture/compile/pr56484.c
+++ b/src/gcc/testsuite/gcc.c-torture/compile/pr56484.c
@@ -0,0 +1,17 @@
@@ -62663,6 +66853,98 @@
+#endif
+ return 0;
+}
+--- a/src/gcc/testsuite/gcc.c-torture/execute/pr57568.c
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr57568.c
+@@ -0,0 +1,12 @@
++/* PR target/57568 */
++
++extern void abort (void);
++int a[6][9] = { }, b = 1, *c = &a[3][5];
++
++int
++main ()
++{
++ if (b && (*c = *c + *c))
++ abort ();
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.c-torture/execute/pr57829.c
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr57829.c
+@@ -0,0 +1,31 @@
++/* PR rtl-optimization/57829 */
++
++__attribute__((noinline, noclone))
++int
++f1 (int k)
++{
++ return 2 | ((k - 1) >> ((int) sizeof (int) * __CHAR_BIT__ - 1));
++}
++
++__attribute__((noinline, noclone))
++long int
++f2 (long int k)
++{
++ return 2L | ((k - 1L) >> ((int) sizeof (long int) * __CHAR_BIT__ - 1));
++}
++
++__attribute__((noinline, noclone))
++int
++f3 (int k)
++{
++ k &= 63;
++ return 4 | ((k + 2) >> 5);
++}
++
++int
++main ()
++{
++ if (f1 (1) != 2 || f2 (1L) != 2L || f3 (63) != 6 || f3 (1) != 4)
++ __builtin_abort ();
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.c-torture/execute/pr58831.c
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr58831.c
+@@ -0,0 +1,40 @@
++#include <assert.h>
++
++int a, *b, c, d, f, **i, p, q, *r;
++short o, j;
++
++static int __attribute__((noinline, noclone))
++fn1 (int *p1, int **p2)
++{
++ int **e = &b;
++ for (; p; p++)
++ *p1 = 1;
++ *e = *p2 = &d;
++
++ assert (r);
++
++ return c;
++}
++
++static int ** __attribute__((noinline, noclone))
++fn2 (void)
++{
++ for (f = 0; f != 42; f++)
++ {
++ int *g[3] = {0, 0, 0};
++ for (o = 0; o; o--)
++ for (; a > 1;)
++ {
++ int **h[1] = { &g[2] };
++ }
++ }
++ return &r;
++}
++
++int
++main (void)
++{
++ i = fn2 ();
++ fn1 (b, i);
++ return 0;
++}
--- a/src/gcc/testsuite/gcc.dg/20020312-2.c
+++ b/src/gcc/testsuite/gcc.dg/20020312-2.c
@@ -92,6 +92,8 @@
@@ -62685,6 +66967,45 @@
/* { dg-options "-gstabs" } */
int
+--- a/src/gcc/testsuite/gcc.dg/20050922-1.c
++++ b/src/gcc/testsuite/gcc.dg/20050922-1.c
+@@ -4,7 +4,7 @@
+ /* { dg-do run } */
+ /* { dg-options "-O1 -std=c99" } */
+
+-#include <stdlib.h>
++extern void abort (void);
+
+ #if __INT_MAX__ == 2147483647
+ typedef unsigned int uint32_t;
+--- a/src/gcc/testsuite/gcc.dg/20050922-2.c
++++ b/src/gcc/testsuite/gcc.dg/20050922-2.c
+@@ -4,7 +4,8 @@
+ /* { dg-do run } */
+ /* { dg-options "-O1 -std=c99" } */
+
+-#include <stdlib.h>
++extern void abort (void);
++extern void exit (int);
+
+ #if __INT_MAX__ == 2147483647
+ typedef unsigned int uint32_t;
+--- a/src/gcc/testsuite/gcc.dg/atomic-store-6.c
++++ b/src/gcc/testsuite/gcc.dg/atomic-store-6.c
+@@ -0,0 +1,13 @@
++/* { dg-do run } */
++/* { dg-require-effective-target sync_int_128_runtime } */
++/* { dg-options "-mcx16" { target { i?86-*-* x86_64-*-* } } } */
++
++__int128_t i;
++
++int main()
++{
++ __atomic_store_16(&i, -1, 0);
++ if (i != -1)
++ __builtin_abort();
++ return 0;
++}
--- a/src/gcc/testsuite/gcc.dg/builtin-apply2.c
+++ b/src/gcc/testsuite/gcc.dg/builtin-apply2.c
@@ -1,5 +1,5 @@
@@ -62897,6 +67218,39 @@
+ }
+ return number;
+}
+--- a/src/gcc/testsuite/gcc.dg/pr57980.c
++++ b/src/gcc/testsuite/gcc.dg/pr57980.c
+@@ -0,0 +1,19 @@
++/* PR tree-optimization/57980 */
++/* { dg-do compile } */
++/* { dg-options "-O -foptimize-sibling-calls -w" } */
++
++typedef int V __attribute__ ((vector_size (2 * sizeof (int))));
++extern V f (void);
++
++V
++bar (void)
++{
++ return -f ();
++}
++
++V
++foo (void)
++{
++ V v = { };
++ return v - f ();
++}
+--- a/src/gcc/testsuite/gcc.dg/pr59351.c
++++ b/src/gcc/testsuite/gcc.dg/pr59351.c
+@@ -0,0 +1,8 @@
++/* { dg-do compile } */
++/* { dg-options "-std=c99 -pedantic" } */
++
++unsigned int
++foo (void)
++{
++ return sizeof ((int[]) {}); /* { dg-warning "ISO C forbids empty initializer braces" } */
++}
--- a/src/gcc/testsuite/gcc.dg/stack-usage-1.c
+++ b/src/gcc/testsuite/gcc.dg/stack-usage-1.c
@@ -7,7 +7,9 @@
@@ -62986,6 +67340,21 @@
int x(int a)
{
+--- a/src/gcc/testsuite/gcc.dg/torture/pr58779.c
++++ b/src/gcc/testsuite/gcc.dg/torture/pr58779.c
+@@ -0,0 +1,12 @@
++/* { dg-do run } */
++
++int a, c;
++
++int main ()
++{
++ int e = -1;
++ short d = (c <= 0) ^ e;
++ if ((unsigned int) a - (a || d) <= (unsigned int) a)
++ __builtin_abort ();
++ return 0;
++}
--- a/src/gcc/testsuite/gcc.dg/tree-ssa/forwprop-11.c
+++ b/src/gcc/testsuite/gcc.dg/tree-ssa/forwprop-11.c
@@ -16,5 +16,5 @@
@@ -63877,6 +68246,68 @@
+#endif
+#define RUNTIME_ENDIANNESS_CHECK_FUNCTION_DEFINED
+#endif
+--- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/abitest.S
++++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/abitest.S
+@@ -0,0 +1,59 @@
++ .global dumpregs
++ .global myfunc
++ .type dumpregs,%function
++ .type myfunc,%function
++dumpregs:
++myfunc:
++ mov x16, sp
++ mov x17, sp
++ sub sp, sp, 352 // 336 for registers and 16 for old sp and lr
++
++ stp x8, x9, [x17, #-16]! //320
++
++ stp q6, q7, [x17, #-32]! //288
++ stp q4, q5, [x17, #-32]! //256
++ stp q2, q3, [x17, #-32]! //224
++ stp q0, q1, [x17, #-32]! //192
++
++ stp x6, x7, [x17, #-16]! //176
++ stp x4, x5, [x17, #-16]! //160
++ stp x2, x3, [x17, #-16]! //144
++ stp x0, x1, [x17, #-16]! //128
++
++ stp w6, w7, [x17, #-8]! //120
++ stp w4, w5, [x17, #-8]! //112
++ stp w2, w3, [x17, #-8]! //104
++ stp w0, w1, [x17, #-8]! // 96
++
++ stp s6, s7, [x17, #-8]! // 88
++ stp s4, s5, [x17, #-8]! // 80
++ stp s2, s3, [x17, #-8]! // 72
++ stp s0, s1, [x17, #-8]! // 64
++
++ stp d6, d7, [x17, #-16]! // 48
++ stp d4, d5, [x17, #-16]! // 32
++ stp d2, d3, [x17, #-16]! // 16
++ stp d0, d1, [x17, #-16]! // 0
++
++ add x0, sp, #16
++ stp x16, x30, [x17, #-16]!
++
++ adrp x9, which_kind_of_test // determine the type of test
++ add x9, x9, :lo12:which_kind_of_test
++ ldr w9, [x9, #0]
++ cmp w9, #1
++ bgt LABEL_TEST_FUNC_RETURN
++ bl testfunc // parameter passing test or va_arg code gen test
++ b LABEL_RET
++LABEL_TEST_FUNC_RETURN:
++ adrp x9, testfunc_ptr
++ add x9, x9, :lo12:testfunc_ptr
++ ldr x9, [x9, #0]
++ blr x9 // function return value test
++LABEL_RET:
++ ldp x0, x30, [sp]
++ mov sp, x0
++ ret
++
++.weak testfunc
++.weak testfunc_ptr
--- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/abitest.h
+++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/abitest.h
@@ -0,0 +1,159 @@
@@ -64039,68 +68470,6 @@
+ return 0;
+}
+
---- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/abitest.S
-+++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/abitest.S
-@@ -0,0 +1,59 @@
-+ .global dumpregs
-+ .global myfunc
-+ .type dumpregs,%function
-+ .type myfunc,%function
-+dumpregs:
-+myfunc:
-+ mov x16, sp
-+ mov x17, sp
-+ sub sp, sp, 352 // 336 for registers and 16 for old sp and lr
-+
-+ stp x8, x9, [x17, #-16]! //320
-+
-+ stp q6, q7, [x17, #-32]! //288
-+ stp q4, q5, [x17, #-32]! //256
-+ stp q2, q3, [x17, #-32]! //224
-+ stp q0, q1, [x17, #-32]! //192
-+
-+ stp x6, x7, [x17, #-16]! //176
-+ stp x4, x5, [x17, #-16]! //160
-+ stp x2, x3, [x17, #-16]! //144
-+ stp x0, x1, [x17, #-16]! //128
-+
-+ stp w6, w7, [x17, #-8]! //120
-+ stp w4, w5, [x17, #-8]! //112
-+ stp w2, w3, [x17, #-8]! //104
-+ stp w0, w1, [x17, #-8]! // 96
-+
-+ stp s6, s7, [x17, #-8]! // 88
-+ stp s4, s5, [x17, #-8]! // 80
-+ stp s2, s3, [x17, #-8]! // 72
-+ stp s0, s1, [x17, #-8]! // 64
-+
-+ stp d6, d7, [x17, #-16]! // 48
-+ stp d4, d5, [x17, #-16]! // 32
-+ stp d2, d3, [x17, #-16]! // 16
-+ stp d0, d1, [x17, #-16]! // 0
-+
-+ add x0, sp, #16
-+ stp x16, x30, [x17, #-16]!
-+
-+ adrp x9, which_kind_of_test // determine the type of test
-+ add x9, x9, :lo12:which_kind_of_test
-+ ldr w9, [x9, #0]
-+ cmp w9, #1
-+ bgt LABEL_TEST_FUNC_RETURN
-+ bl testfunc // parameter passing test or va_arg code gen test
-+ b LABEL_RET
-+LABEL_TEST_FUNC_RETURN:
-+ adrp x9, testfunc_ptr
-+ add x9, x9, :lo12:testfunc_ptr
-+ ldr x9, [x9, #0]
-+ blr x9 // function return value test
-+LABEL_RET:
-+ ldp x0, x30, [sp]
-+ mov sp, x0
-+ ret
-+
-+.weak testfunc
-+.weak testfunc_ptr
--- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/func-ret-1.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/func-ret-1.c
@@ -0,0 +1,44 @@
@@ -64731,6 +69100,40 @@
+ ANON(type_promoted, val_promoted, offset, __VA_ARGS__)
+
+#endif /* AARCH64_VARIADIC_MACRO_DEF_GEN_ARGUMENT_LIST */
+--- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/test_1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/test_1.c
+@@ -0,0 +1,31 @@
++/* Test AAPCS64 layout */
++
++/* C.7 If the argument is an Integral Type, the size of the argument is
++ less than or equal to 8 bytes and the NGRN is less than 8, the
++ argument is copied to the least significant bits in x[NGRN]. The
++ NGRN is incremented by one. The argument has now been allocated. */
++
++/* { dg-do run { target aarch64*-*-* } } */
++
++#ifndef IN_FRAMEWORK
++#define TESTFILE "test_1.c"
++/* TODO: review if we need this */
++#define RUNTIME_ENDIANNESS_CHECK
++#include "abitest.h"
++#else
++ ARG(int, 4, W0)
++ ARG(double, 4.0, D0)
++ ARG(int, 3, W1)
++ /* TODO: review the way of memcpy char, short, etc. */
++#ifndef __AAPCS64_BIG_ENDIAN__
++ ARG(char, 0xEF, X2)
++ ARG(short, 0xBEEF, X3)
++ ARG(int, 0xDEADBEEF, X4)
++#else
++ /* TODO: need the model/qemu to be big-endian as well */
++ ARG(char, 0xEF, X2+7)
++ ARG(short, 0xBEEF, X3+6)
++ ARG(int, 0xDEADBEEF, X4+4)
++#endif
++ LAST_ARG(long long, 0xDEADBEEFCAFEBABELL, X5)
++#endif
--- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/test_10.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/test_10.c
@@ -0,0 +1,26 @@
@@ -65093,39 +69496,24 @@
+ PTR_ANON(struct y, v, X1)
+ LAST_ANON(int, 10, W2)
+#endif
---- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/test_1.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/test_1.c
-@@ -0,0 +1,31 @@
+--- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/test_2.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/test_2.c
+@@ -0,0 +1,16 @@
+/* Test AAPCS64 layout */
+
-+/* C.7 If the argument is an Integral Type, the size of the argument is
-+ less than or equal to 8 bytes and the NGRN is less than 8, the
-+ argument is copied to the least significant bits in x[NGRN]. The
-+ NGRN is incremented by one. The argument has now been allocated. */
-+
+/* { dg-do run { target aarch64*-*-* } } */
+
+#ifndef IN_FRAMEWORK
-+#define TESTFILE "test_1.c"
-+/* TODO: review if we need this */
-+#define RUNTIME_ENDIANNESS_CHECK
++#define VFP
++#define TESTFILE "test_2.c"
+#include "abitest.h"
++
+#else
-+ ARG(int, 4, W0)
-+ ARG(double, 4.0, D0)
-+ ARG(int, 3, W1)
-+ /* TODO: review the way of memcpy char, short, etc. */
-+#ifndef __AAPCS64_BIG_ENDIAN__
-+ ARG(char, 0xEF, X2)
-+ ARG(short, 0xBEEF, X3)
-+ ARG(int, 0xDEADBEEF, X4)
-+#else
-+ /* TODO: need the model/qemu to be big-endian as well */
-+ ARG(char, 0xEF, X2+7)
-+ ARG(short, 0xBEEF, X3+6)
-+ ARG(int, 0xDEADBEEF, X4+4)
-+#endif
-+ LAST_ARG(long long, 0xDEADBEEFCAFEBABELL, X5)
++ ARG(float, 1.0f, S0)
++ ARG(double, 4.0, D1)
++ ARG(float, 2.0f, S2)
++ ARG(double, 5.0, D3)
++ LAST_ARG(int, 3, W0)
+#endif
--- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/test_20.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/test_20.c
@@ -65389,25 +69777,6 @@
+ARG (struct x1, s1, D1)
+LAST_ARG_NONFLAT (int, 89012, X5, i32in64)
+#endif
---- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/test_2.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/test_2.c
-@@ -0,0 +1,16 @@
-+/* Test AAPCS64 layout */
-+
-+/* { dg-do run { target aarch64*-*-* } } */
-+
-+#ifndef IN_FRAMEWORK
-+#define VFP
-+#define TESTFILE "test_2.c"
-+#include "abitest.h"
-+
-+#else
-+ ARG(float, 1.0f, S0)
-+ ARG(double, 4.0, D1)
-+ ARG(float, 2.0f, S2)
-+ ARG(double, 5.0, D3)
-+ LAST_ARG(int, 3, W0)
-+#endif
--- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/test_3.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/test_3.c
@@ -0,0 +1,18 @@
@@ -66101,6 +70470,59 @@
+ double a;
+ float b;
+};
+--- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-1.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-1.c
+@@ -0,0 +1,50 @@
++/* Test AAPCS64 layout and __builtin_va_arg.
++
++ This test covers fundamental data types as specified in AAPCS64 \S 4.1.
++ It is focus on unnamed parameter passed in registers. */
++
++/* { dg-do run { target aarch64*-*-* } } */
++
++#ifndef IN_FRAMEWORK
++#define AAPCS64_TEST_STDARG
++#define TESTFILE "va_arg-1.c"
++#include "type-def.h"
++
++vf2_t vf2 = (vf2_t){ 17.f, 18.f };
++vi4_t vi4 = (vi4_t){ 0xdeadbabe, 0xbabecafe, 0xcafebeef, 0xbeefdead };
++union int128_t qword;
++signed char sc = 0xed;
++signed int sc_promoted = 0xffffffed;
++signed short ss = 0xcba9;
++signed int ss_promoted = 0xffffcba9;
++float fp = 65432.12345f;
++double fp_promoted = (double)65432.12345f;
++
++#define HAS_DATA_INIT_FUNC
++void init_data ()
++{
++ /* Init signed quad-word integer. */
++ qword.l64 = 0xfdb9753102468aceLL;
++ qword.h64 = 0xeca8642013579bdfLL;
++}
++
++#include "abitest.h"
++#else
++ ARG ( int , 0xff , X0, LAST_NAMED_ARG_ID)
++ DOTS
++ ANON_PROMOTED(unsigned char , 0xfe , unsigned int, 0xfe , X1, 1)
++ ANON_PROMOTED( signed char , sc , signed int, sc_promoted, X2, 2)
++ ANON_PROMOTED(unsigned short , 0xdcba, unsigned int, 0xdcba , X3, 3)
++ ANON_PROMOTED( signed short , ss , signed int, ss_promoted, X4, 4)
++ ANON (unsigned int , 0xdeadbeef, X5, 5)
++ ANON ( signed int , 0xcafebabe, X6, 6)
++ ANON (unsigned long long, 0xba98765432101234ULL, X7, 7)
++ ANON ( signed long long, 0xa987654321012345LL , STACK, 8)
++ ANON ( __int128, qword.i , STACK+16, 9)
++ ANON_PROMOTED( float , fp , double, fp_promoted, D0, 10)
++ ANON ( double , 9876543.212345, D1, 11)
++ ANON ( long double , 98765432123456789.987654321L, Q2, 12)
++ ANON ( vf2_t, vf2 , D3, 13)
++ ANON ( vi4_t, vi4 , Q4, 14)
++ LAST_ANON ( int , 0xeeee, STACK+32,15)
++#endif
--- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-10.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-10.c
@@ -0,0 +1,29 @@
@@ -66231,59 +70653,6 @@
+ LAST_ANON(double, 123.45, D0, 10)
+
+#endif
---- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-1.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-1.c
-@@ -0,0 +1,50 @@
-+/* Test AAPCS64 layout and __builtin_va_arg.
-+
-+ This test covers fundamental data types as specified in AAPCS64 \S 4.1.
-+ It is focus on unnamed parameter passed in registers. */
-+
-+/* { dg-do run { target aarch64*-*-* } } */
-+
-+#ifndef IN_FRAMEWORK
-+#define AAPCS64_TEST_STDARG
-+#define TESTFILE "va_arg-1.c"
-+#include "type-def.h"
-+
-+vf2_t vf2 = (vf2_t){ 17.f, 18.f };
-+vi4_t vi4 = (vi4_t){ 0xdeadbabe, 0xbabecafe, 0xcafebeef, 0xbeefdead };
-+union int128_t qword;
-+signed char sc = 0xed;
-+signed int sc_promoted = 0xffffffed;
-+signed short ss = 0xcba9;
-+signed int ss_promoted = 0xffffcba9;
-+float fp = 65432.12345f;
-+double fp_promoted = (double)65432.12345f;
-+
-+#define HAS_DATA_INIT_FUNC
-+void init_data ()
-+{
-+ /* Init signed quad-word integer. */
-+ qword.l64 = 0xfdb9753102468aceLL;
-+ qword.h64 = 0xeca8642013579bdfLL;
-+}
-+
-+#include "abitest.h"
-+#else
-+ ARG ( int , 0xff , X0, LAST_NAMED_ARG_ID)
-+ DOTS
-+ ANON_PROMOTED(unsigned char , 0xfe , unsigned int, 0xfe , X1, 1)
-+ ANON_PROMOTED( signed char , sc , signed int, sc_promoted, X2, 2)
-+ ANON_PROMOTED(unsigned short , 0xdcba, unsigned int, 0xdcba , X3, 3)
-+ ANON_PROMOTED( signed short , ss , signed int, ss_promoted, X4, 4)
-+ ANON (unsigned int , 0xdeadbeef, X5, 5)
-+ ANON ( signed int , 0xcafebabe, X6, 6)
-+ ANON (unsigned long long, 0xba98765432101234ULL, X7, 7)
-+ ANON ( signed long long, 0xa987654321012345LL , STACK, 8)
-+ ANON ( __int128, qword.i , STACK+16, 9)
-+ ANON_PROMOTED( float , fp , double, fp_promoted, D0, 10)
-+ ANON ( double , 9876543.212345, D1, 11)
-+ ANON ( long double , 98765432123456789.987654321L, Q2, 12)
-+ ANON ( vf2_t, vf2 , D3, 13)
-+ ANON ( vi4_t, vi4 , Q4, 14)
-+ LAST_ANON ( int , 0xeeee, STACK+32,15)
-+#endif
--- a/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-2.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/aapcs64/va_arg-2.c
@@ -0,0 +1,59 @@
@@ -68436,6 +72805,64 @@
+ /* { dg-final { scan-assembler "add\tw\[0-9\]+,.*sxth\n" } } */
+ return a + (int)i;
+}
+--- a/src/gcc/testsuite/gcc.target/aarch64/fcvt.x
++++ b/src/gcc/testsuite/gcc.target/aarch64/fcvt.x
+@@ -0,0 +1,55 @@
++extern GPF SUFFIX(trunc) (GPF);
++extern GPF SUFFIX(ceil) (GPF);
++extern GPF SUFFIX(floor) (GPF);
++extern GPF SUFFIX(round) (GPF);
++
++GPI test1a (GPF x) {
++ return SUFFIX(__builtin_trunc)(x);
++}
++
++GPI test1b (GPF x)
++{
++ return SUFFIX(trunc)(x);
++}
++
++GPI test2a (GPF x)
++{
++ return SUFFIX(__builtin_lceil)(x);
++}
++
++GPI test2b (GPF x)
++{
++ return SUFFIX(ceil)(x);
++}
++
++GPI test2c (GPF x)
++{
++ return SUFFIX(__builtin_ceil)(x);
++}
++
++GPI test3a (GPF x)
++{
++ return SUFFIX(__builtin_lfloor)(x);
++}
++
++GPI test3b (GPF x)
++{
++ return SUFFIX(floor)(x);
++}
++
++GPI test3c (GPF x)
++{
++ return SUFFIX(__builtin_floor)(x);
++}
++
++GPI test4a (GPF x)
++{
++ return SUFFIX(__builtin_round)(x);
++}
++
++GPI test4b (GPF x)
++{
++ return SUFFIX(round)(x);
++}
++
++
--- a/src/gcc/testsuite/gcc.target/aarch64/fcvt_double_int.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/fcvt_double_int.c
@@ -0,0 +1,15 @@
@@ -68576,64 +73003,6 @@
+/* { dg-final { scan-assembler-times "fcvtms\tx\[0-9\]+, *s\[0-9\]" 1 } } */
+/* { dg-final { scan-assembler-times "fcvtmu\tx\[0-9\]+, *s\[0-9\]" 2 } } */
+/* { dg-final { scan-assembler-times "fcvtau\tx\[0-9\]+, *s\[0-9\]" 2 } } */
---- a/src/gcc/testsuite/gcc.target/aarch64/fcvt.x
-+++ b/src/gcc/testsuite/gcc.target/aarch64/fcvt.x
-@@ -0,0 +1,55 @@
-+extern GPF SUFFIX(trunc) (GPF);
-+extern GPF SUFFIX(ceil) (GPF);
-+extern GPF SUFFIX(floor) (GPF);
-+extern GPF SUFFIX(round) (GPF);
-+
-+GPI test1a (GPF x) {
-+ return SUFFIX(__builtin_trunc)(x);
-+}
-+
-+GPI test1b (GPF x)
-+{
-+ return SUFFIX(trunc)(x);
-+}
-+
-+GPI test2a (GPF x)
-+{
-+ return SUFFIX(__builtin_lceil)(x);
-+}
-+
-+GPI test2b (GPF x)
-+{
-+ return SUFFIX(ceil)(x);
-+}
-+
-+GPI test2c (GPF x)
-+{
-+ return SUFFIX(__builtin_ceil)(x);
-+}
-+
-+GPI test3a (GPF x)
-+{
-+ return SUFFIX(__builtin_lfloor)(x);
-+}
-+
-+GPI test3b (GPF x)
-+{
-+ return SUFFIX(floor)(x);
-+}
-+
-+GPI test3c (GPF x)
-+{
-+ return SUFFIX(__builtin_floor)(x);
-+}
-+
-+GPI test4a (GPF x)
-+{
-+ return SUFFIX(__builtin_round)(x);
-+}
-+
-+GPI test4b (GPF x)
-+{
-+ return SUFFIX(round)(x);
-+}
-+
-+
--- a/src/gcc/testsuite/gcc.target/aarch64/ffs.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/ffs.c
@@ -0,0 +1,12 @@
@@ -68707,8 +73076,8 @@
+/* { dg-final { scan-assembler-times "fnmadd\td\[0-9\]" 1 } } */
+/* { dg-final { scan-assembler-times "fnmadd\ts\[0-9\]" 1 } } */
+
---- a/src/gcc/testsuite/gcc.target/aarch64/fmovd.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/fmovd.c
+--- a/src/gcc/testsuite/gcc.target/aarch64/fmovd-zero.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/fmovd-zero.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
@@ -68716,12 +73085,12 @@
+void
+foo (double *output)
+{
-+ *output = 4.25;
++ *output = 0.0;
+}
+
-+/* { dg-final { scan-assembler "fmov\\td\[0-9\]+, 4\\.25" } } */
---- a/src/gcc/testsuite/gcc.target/aarch64/fmovd-zero.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/fmovd-zero.c
++/* { dg-final { scan-assembler "fmov\\td\[0-9\]+, xzr" } } */
+--- a/src/gcc/testsuite/gcc.target/aarch64/fmovd.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/fmovd.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
@@ -68729,12 +73098,12 @@
+void
+foo (double *output)
+{
-+ *output = 0.0;
++ *output = 4.25;
+}
+
-+/* { dg-final { scan-assembler "fmov\\td\[0-9\]+, xzr" } } */
---- a/src/gcc/testsuite/gcc.target/aarch64/fmovf.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/fmovf.c
++/* { dg-final { scan-assembler "fmov\\td\[0-9\]+, 4\\.25" } } */
+--- a/src/gcc/testsuite/gcc.target/aarch64/fmovf-zero.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/fmovf-zero.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
@@ -68742,12 +73111,12 @@
+void
+foo (float *output)
+{
-+ *output = 4.25;
++ *output = 0.0;
+}
+
-+/* { dg-final { scan-assembler "fmov\\ts\[0-9\]+, 4\\.25" } } */
---- a/src/gcc/testsuite/gcc.target/aarch64/fmovf-zero.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/fmovf-zero.c
++/* { dg-final { scan-assembler "fmov\\ts\[0-9\]+, wzr" } } */
+--- a/src/gcc/testsuite/gcc.target/aarch64/fmovf.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/fmovf.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
@@ -68755,10 +73124,10 @@
+void
+foo (float *output)
+{
-+ *output = 0.0;
++ *output = 4.25;
+}
+
-+/* { dg-final { scan-assembler "fmov\\ts\[0-9\]+, wzr" } } */
++/* { dg-final { scan-assembler "fmov\\ts\[0-9\]+, 4\\.25" } } */
--- a/src/gcc/testsuite/gcc.target/aarch64/fnmadd-fastmath.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/fnmadd-fastmath.c
@@ -0,0 +1,19 @@
@@ -68781,40 +73150,6 @@
+/* { dg-final { scan-assembler-times "fnmadd\td\[0-9\]" 1 } } */
+/* { dg-final { scan-assembler-times "fnmadd\ts\[0-9\]" 1 } } */
+
---- a/src/gcc/testsuite/gcc.target/aarch64/frint_double.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/frint_double.c
-@@ -0,0 +1,14 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2" } */
-+
-+#define GPF double
-+#define SUFFIX(x) x
-+
-+#include "frint.x"
-+
-+/* { dg-final { scan-assembler-times "frintz\td\[0-9\]" 2 } } */
-+/* { dg-final { scan-assembler-times "frintp\td\[0-9\]" 2 } } */
-+/* { dg-final { scan-assembler-times "frintm\td\[0-9\]" 2 } } */
-+/* { dg-final { scan-assembler-times "frinti\td\[0-9\]" 2 } } */
-+/* { dg-final { scan-assembler-times "frintx\td\[0-9\]" 2 } } */
-+/* { dg-final { scan-assembler-times "frinta\td\[0-9\]" 2 } } */
---- a/src/gcc/testsuite/gcc.target/aarch64/frint_float.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/frint_float.c
-@@ -0,0 +1,14 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2" } */
-+
-+#define GPF float
-+#define SUFFIX(x) x##f
-+
-+#include "frint.x"
-+
-+/* { dg-final { scan-assembler-times "frintz\ts\[0-9\]" 2 } } */
-+/* { dg-final { scan-assembler-times "frintp\ts\[0-9\]" 2 } } */
-+/* { dg-final { scan-assembler-times "frintm\ts\[0-9\]" 2 } } */
-+/* { dg-final { scan-assembler-times "frinti\ts\[0-9\]" 2 } } */
-+/* { dg-final { scan-assembler-times "frintx\ts\[0-9\]" 2 } } */
-+/* { dg-final { scan-assembler-times "frinta\ts\[0-9\]" 2 } } */
--- a/src/gcc/testsuite/gcc.target/aarch64/frint.x
+++ b/src/gcc/testsuite/gcc.target/aarch64/frint.x
@@ -0,0 +1,66 @@
@@ -68884,6 +73219,40 @@
+{
+ return SUFFIX(round)(x);
+}
+--- a/src/gcc/testsuite/gcc.target/aarch64/frint_double.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/frint_double.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++#define GPF double
++#define SUFFIX(x) x
++
++#include "frint.x"
++
++/* { dg-final { scan-assembler-times "frintz\td\[0-9\]" 2 } } */
++/* { dg-final { scan-assembler-times "frintp\td\[0-9\]" 2 } } */
++/* { dg-final { scan-assembler-times "frintm\td\[0-9\]" 2 } } */
++/* { dg-final { scan-assembler-times "frinti\td\[0-9\]" 2 } } */
++/* { dg-final { scan-assembler-times "frintx\td\[0-9\]" 2 } } */
++/* { dg-final { scan-assembler-times "frinta\td\[0-9\]" 2 } } */
+--- a/src/gcc/testsuite/gcc.target/aarch64/frint_float.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/frint_float.c
+@@ -0,0 +1,14 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++#define GPF float
++#define SUFFIX(x) x##f
++
++#include "frint.x"
++
++/* { dg-final { scan-assembler-times "frintz\ts\[0-9\]" 2 } } */
++/* { dg-final { scan-assembler-times "frintp\ts\[0-9\]" 2 } } */
++/* { dg-final { scan-assembler-times "frintm\ts\[0-9\]" 2 } } */
++/* { dg-final { scan-assembler-times "frinti\ts\[0-9\]" 2 } } */
++/* { dg-final { scan-assembler-times "frintx\ts\[0-9\]" 2 } } */
++/* { dg-final { scan-assembler-times "frinta\ts\[0-9\]" 2 } } */
--- a/src/gcc/testsuite/gcc.target/aarch64/index.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/index.c
@@ -0,0 +1,111 @@
@@ -71293,6 +75662,21 @@
+jumpto:
+ if (!(x1 & 0x08)) goto jumpto;
+}
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-abs-compile.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-abs-compile.c
+@@ -0,0 +1,12 @@
++
++/* { dg-do compile } */
++/* { dg-options "-O3" } */
++
++#define N 16
++
++#include "vect-abs.x"
++
++/* { dg-final { scan-assembler "abs\\tv\[0-9\]+\.16b" } } */
++/* { dg-final { scan-assembler "abs\\tv\[0-9\]+\.8h" } } */
++/* { dg-final { scan-assembler "abs\\tv\[0-9\]+\.4s" } } */
++/* { dg-final { scan-assembler "abs\\tv\[0-9\]+\.2d" } } */
--- a/src/gcc/testsuite/gcc.target/aarch64/vect-abs.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-abs.c
@@ -0,0 +1,131 @@
@@ -71427,21 +75811,6 @@
+
+ return 0;
+}
---- a/src/gcc/testsuite/gcc.target/aarch64/vect-abs-compile.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-abs-compile.c
-@@ -0,0 +1,12 @@
-+
-+/* { dg-do compile } */
-+/* { dg-options "-O3" } */
-+
-+#define N 16
-+
-+#include "vect-abs.x"
-+
-+/* { dg-final { scan-assembler "abs\\tv\[0-9\]+\.16b" } } */
-+/* { dg-final { scan-assembler "abs\\tv\[0-9\]+\.8h" } } */
-+/* { dg-final { scan-assembler "abs\\tv\[0-9\]+\.4s" } } */
-+/* { dg-final { scan-assembler "abs\\tv\[0-9\]+\.2d" } } */
--- a/src/gcc/testsuite/gcc.target/aarch64/vect-abs.x
+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-abs.x
@@ -0,0 +1,36 @@
@@ -71481,102 +75850,6 @@
+ for (i=0; i<N; i++)
+ a[i] = labs (b[i]);
+}
---- a/src/gcc/testsuite/gcc.target/aarch64/vect.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vect.c
-@@ -0,0 +1,93 @@
-+
-+/* { dg-do run } */
-+/* { dg-options "-O3" } */
-+
-+#include "vect.x"
-+
-+extern void abort (void);
-+
-+void set_vector (int *a, int n)
-+{
-+ int i;
-+ for (i=0; i<16; i++)
-+ a[i] = n;
-+}
-+
-+void check_vector (pRINT c, pRINT result, char *str)
-+{
-+ int i;
-+ for (i=0; i<16 ; i++)
-+ if (c[i] != result[i])
-+ abort ();
-+}
-+
-+#define TEST(func, sign) set_vector (sign##c, 0); \
-+ func (sign##a, sign##b, sign##c); \
-+ check_vector (sign##c, func##_vector, #func);
-+
-+
-+#define TESTV(func, sign) \
-+ if (func (sign##a) != func##_value) \
-+ abort ();
-+
-+#define TESTVLL(func, sign) \
-+ if (func (ll##sign##a) != func##_value) \
-+ abort ();
-+
-+int main (void)
-+{
-+ int sa[16];
-+ int sb[16];
-+ int sc[16];
-+ unsigned int ua[16];
-+ unsigned int ub[16];
-+ unsigned int uc[16];
-+ long long llsa[16];
-+ unsigned long long llua[16];
-+ int i;
-+
-+ /* Table of standard values to compare against. */
-+ unsigned int test_bic_vector[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-+ unsigned int test_orn_vector[] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
-+ int mla_vector[] = {0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225};
-+ int mls_vector[] = {0, -1, -4, -9, -16, -25, -36, -49, -64, -81, -100, -121, -144, -169, -196, -225};
-+ int smax_vector[] = {0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15};
-+ int smin_vector[] = {0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15};
-+ unsigned int umax_vector[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
-+ unsigned int umin_vector[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
-+ int reduce_smax_value = 0;
-+ int reduce_smin_value = -15;
-+ unsigned int reduce_umax_value = 15;
-+ unsigned int reduce_umin_value = 0;
-+ unsigned int reduce_add_u32_value = 120;
-+ int reduce_add_s32_value = -120;
-+ long long reduce_add_s64_value = -120;
-+ unsigned long long reduce_add_u64_value = 120;
-+
-+ /* Set up input vectors. */
-+ for (i=0; i < 16; i++)
-+ {
-+ sa[i] = sb[i] = -i;
-+ llsa[i] = (long long)-i;
-+ ua[i] = ub[i] = i;
-+ llua[i] = (unsigned long long)i;
-+ }
-+
-+ TEST (test_bic, s);
-+ TEST (test_orn, s);
-+ TEST (mla, s);
-+ TEST (mls, s);
-+ TEST (smax, s);
-+ TEST (smin, s);
-+ TEST (umax, u);
-+ TEST (umin, u);
-+ TESTV (reduce_smax, s);
-+ TESTV (reduce_smin, s);
-+ TESTV (reduce_umax, u);
-+ TESTV (reduce_umin, u);
-+ TESTV (reduce_add_u32, u);
-+ TESTV (reduce_add_s32, s);
-+ TESTVLL (reduce_add_u64, u);
-+ TESTVLL (reduce_add_s64, s);
-+ return 0;
-+}
--- a/src/gcc/testsuite/gcc.target/aarch64/vect-compile.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-compile.c
@@ -0,0 +1,20 @@
@@ -71600,6 +75873,16 @@
+/* { dg-final { scan-assembler "sminv" } } */
+/* { dg-final { scan-assembler-times "addv" 2} } */
+/* { dg-final { scan-assembler-times "addp" 2} } */
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-faddv-compile.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-faddv-compile.c
+@@ -0,0 +1,7 @@
++
++/* { dg-do compile } */
++/* { dg-options "-O3 -ffast-math" } */
++
++#include "vect-faddv.x"
++
++/* { dg-final { scan-assembler-times "faddp\\tv" 2} } */
--- a/src/gcc/testsuite/gcc.target/aarch64/vect-faddv.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-faddv.c
@@ -0,0 +1,31 @@
@@ -71634,16 +75917,6 @@
+
+ return 0;
+}
---- a/src/gcc/testsuite/gcc.target/aarch64/vect-faddv-compile.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-faddv-compile.c
-@@ -0,0 +1,7 @@
-+
-+/* { dg-do compile } */
-+/* { dg-options "-O3 -ffast-math" } */
-+
-+#include "vect-faddv.x"
-+
-+/* { dg-final { scan-assembler-times "faddp\\tv" 2} } */
--- a/src/gcc/testsuite/gcc.target/aarch64/vect-faddv.x
+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-faddv.x
@@ -0,0 +1,23 @@
@@ -71849,6 +76122,16 @@
+ return 0;
+}
+
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-fmax-fmin-compile.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fmax-fmin-compile.c
+@@ -0,0 +1,7 @@
++/* { dg-do compile } */
++/* { dg-options "-O3 -ffast-math" } */
++
++#include "vect-fmax-fmin.x"
++
++/* { dg-final { scan-assembler "fmaxnm\\tv" } } */
++/* { dg-final { scan-assembler "fminnm\\tv" } } */
--- a/src/gcc/testsuite/gcc.target/aarch64/vect-fmax-fmin.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fmax-fmin.c
@@ -0,0 +1,105 @@
@@ -71957,16 +76240,6 @@
+
+ return 0;
+}
---- a/src/gcc/testsuite/gcc.target/aarch64/vect-fmax-fmin-compile.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fmax-fmin-compile.c
-@@ -0,0 +1,7 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O3 -ffast-math" } */
-+
-+#include "vect-fmax-fmin.x"
-+
-+/* { dg-final { scan-assembler "fmaxnm\\tv" } } */
-+/* { dg-final { scan-assembler "fminnm\\tv" } } */
--- a/src/gcc/testsuite/gcc.target/aarch64/vect-fmax-fmin.x
+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fmax-fmin.x
@@ -0,0 +1,32 @@
@@ -72061,8 +76334,8 @@
+
+ return s;
+}
---- a/src/gcc/testsuite/gcc.target/aarch64/vect-fmovd.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fmovd.c
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-fmovd-zero.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fmovd-zero.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all" } */
@@ -72075,14 +76348,14 @@
+ int i = 0;
+ /* Vectorizable. */
+ for (i = 0; i < N; i++)
-+ output[i] = 4.25;
++ output[i] = 0.0;
+}
+
++/* { dg-final { scan-assembler "movi\\tv\[0-9\]+\\.2d, 0" } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-+/* { dg-final { scan-assembler "fmov\\tv\[0-9\]+\\.2d, 4\\.25" } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
---- a/src/gcc/testsuite/gcc.target/aarch64/vect-fmovd-zero.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fmovd-zero.c
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-fmovd.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fmovd.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all" } */
@@ -72095,14 +76368,14 @@
+ int i = 0;
+ /* Vectorizable. */
+ for (i = 0; i < N; i++)
-+ output[i] = 0.0;
++ output[i] = 4.25;
+}
+
-+/* { dg-final { scan-assembler "movi\\tv\[0-9\]+\\.2d, 0" } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
++/* { dg-final { scan-assembler "fmov\\tv\[0-9\]+\\.2d, 4\\.25" } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
---- a/src/gcc/testsuite/gcc.target/aarch64/vect-fmovf.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fmovf.c
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-fmovf-zero.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fmovf-zero.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all" } */
@@ -72115,14 +76388,14 @@
+ int i = 0;
+ /* Vectorizable. */
+ for (i = 0; i < N; i++)
-+ output[i] = 4.25;
++ output[i] = 0.0;
+}
+
++/* { dg-final { scan-assembler "movi\\tv\[0-9\]+\\.\[24\]s, 0" } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
-+/* { dg-final { scan-assembler "fmov\\tv\[0-9\]+\\.\[24\]s, 4\\.25" } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
---- a/src/gcc/testsuite/gcc.target/aarch64/vect-fmovf-zero.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fmovf-zero.c
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-fmovf.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fmovf.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-all" } */
@@ -72135,12 +76408,28 @@
+ int i = 0;
+ /* Vectorizable. */
+ for (i = 0; i < N; i++)
-+ output[i] = 0.0;
++ output[i] = 4.25;
+}
+
-+/* { dg-final { scan-assembler "movi\\tv\[0-9\]+\\.\[24\]s, 0" } } */
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */
++/* { dg-final { scan-assembler "fmov\\tv\[0-9\]+\\.\[24\]s, 4\\.25" } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-fp-compile.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fp-compile.c
+@@ -0,0 +1,13 @@
++
++
++/* { dg-do compile } */
++/* { dg-options "-O3" } */
++
++#include "vect-fp.x"
++
++/* { dg-final { scan-assembler "fadd\\tv" } } */
++/* { dg-final { scan-assembler "fsub\\tv" } } */
++/* { dg-final { scan-assembler "fmul\\tv" } } */
++/* { dg-final { scan-assembler "fdiv\\tv" } } */
++/* { dg-final { scan-assembler "fneg\\tv" } } */
++/* { dg-final { scan-assembler "fabs\\tv" } } */
--- a/src/gcc/testsuite/gcc.target/aarch64/vect-fp.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fp.c
@@ -0,0 +1,137 @@
@@ -72281,22 +76570,6 @@
+
+ return 0;
+}
---- a/src/gcc/testsuite/gcc.target/aarch64/vect-fp-compile.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fp-compile.c
-@@ -0,0 +1,13 @@
-+
-+
-+/* { dg-do compile } */
-+/* { dg-options "-O3" } */
-+
-+#include "vect-fp.x"
-+
-+/* { dg-final { scan-assembler "fadd\\tv" } } */
-+/* { dg-final { scan-assembler "fsub\\tv" } } */
-+/* { dg-final { scan-assembler "fmul\\tv" } } */
-+/* { dg-final { scan-assembler "fdiv\\tv" } } */
-+/* { dg-final { scan-assembler "fneg\\tv" } } */
-+/* { dg-final { scan-assembler "fabs\\tv" } } */
--- a/src/gcc/testsuite/gcc.target/aarch64/vect-fp.x
+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-fp.x
@@ -0,0 +1,44 @@
@@ -72344,74 +76617,22 @@
+DEFN2 (neg, -)
+DEF2 (abs, F32, fabsf)
+DEF2 (abs, F64, fabs)
---- a/src/gcc/testsuite/gcc.target/aarch64/vect-ld1r.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-ld1r.c
-@@ -0,0 +1,65 @@
-+/* { dg-do run } */
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-ld1r-compile-fp.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-ld1r-compile-fp.c
+@@ -0,0 +1,13 @@
++/* { dg-do compile } */
+/* { dg-options "-O3" } */
+
-+extern void abort (void);
-+
+#include "stdint.h"
+#include "vect-ld1r.x"
+
-+DEF (int8_t)
-+DEF (int16_t)
-+DEF (int32_t)
-+DEF (int64_t)
-+
-+#define FOOD(TYPE) \
-+ foo_ ## TYPE ## _d (&a_ ## TYPE, output_ ## TYPE)
-+
-+#define FOOQ(TYPE) \
-+ foo_ ## TYPE ## _q (&a_ ## TYPE, output_ ## TYPE)
-+
-+#define CHECKD(TYPE) \
-+ for (i = 0; i < 8 / sizeof (TYPE); i++) \
-+ if (output_ ## TYPE[i] != a_ ## TYPE) \
-+ abort ()
-+
-+#define CHECKQ(TYPE) \
-+ for (i = 0; i < 32 / sizeof (TYPE); i++) \
-+ if (output_ ## TYPE[i] != a_ ## TYPE) \
-+ abort ()
-+
-+#define DECL(TYPE) \
-+ TYPE output_ ## TYPE[32]; \
-+ TYPE a_ ## TYPE = (TYPE)12
-+
-+int
-+main (void)
-+{
-+
-+ DECL(int8_t);
-+ DECL(int16_t);
-+ DECL(int32_t);
-+ DECL(int64_t);
-+ int i;
-+
-+ FOOD (int8_t);
-+ CHECKD (int8_t);
-+ FOOQ (int8_t);
-+ CHECKQ (int8_t);
-+
-+ FOOD (int16_t);
-+ CHECKD (int16_t);
-+ FOOQ (int16_t);
-+ CHECKQ (int16_t);
-+
-+ FOOD (int32_t);
-+ CHECKD (int32_t);
-+ FOOQ (int32_t);
-+ CHECKQ (int32_t);
++DEF (float)
++DEF (double)
+
-+ FOOD (int64_t);
-+ CHECKD (int64_t);
-+ FOOQ (int64_t);
-+ CHECKQ (int64_t);
++/* { dg-final { scan-assembler "ld1r\\t\{v\[0-9\]+\.4s"} } */
++/* { dg-final { scan-assembler "ldr\\t\d\[0-9\]+"} } */
++/* { dg-final { scan-assembler "ld1r\\t\{v\[0-9\]+\.2d"} } */
+
-+ return 0;
-+}
--- a/src/gcc/testsuite/gcc.target/aarch64/vect-ld1r-compile.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-ld1r-compile.c
@@ -0,0 +1,18 @@
@@ -72433,22 +76654,6 @@
+/* { dg-final { scan-assembler "ld1r\\t\{v\[0-9\]+\.4s"} } */
+/* { dg-final { scan-assembler "ldr\\t\x\[0-9\]+"} } */
+/* { dg-final { scan-assembler "ld1r\\t\{v\[0-9\]+\.2d"} } */
---- a/src/gcc/testsuite/gcc.target/aarch64/vect-ld1r-compile-fp.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-ld1r-compile-fp.c
-@@ -0,0 +1,13 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O3" } */
-+
-+#include "stdint.h"
-+#include "vect-ld1r.x"
-+
-+DEF (float)
-+DEF (double)
-+
-+/* { dg-final { scan-assembler "ld1r\\t\{v\[0-9\]+\.4s"} } */
-+/* { dg-final { scan-assembler "ldr\\t\d\[0-9\]+"} } */
-+/* { dg-final { scan-assembler "ld1r\\t\{v\[0-9\]+\.2d"} } */
-+
--- a/src/gcc/testsuite/gcc.target/aarch64/vect-ld1r-fp.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-ld1r-fp.c
@@ -0,0 +1,51 @@
@@ -72503,6 +76708,74 @@
+
+ return 0;
+}
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-ld1r.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-ld1r.c
+@@ -0,0 +1,65 @@
++/* { dg-do run } */
++/* { dg-options "-O3" } */
++
++extern void abort (void);
++
++#include "stdint.h"
++#include "vect-ld1r.x"
++
++DEF (int8_t)
++DEF (int16_t)
++DEF (int32_t)
++DEF (int64_t)
++
++#define FOOD(TYPE) \
++ foo_ ## TYPE ## _d (&a_ ## TYPE, output_ ## TYPE)
++
++#define FOOQ(TYPE) \
++ foo_ ## TYPE ## _q (&a_ ## TYPE, output_ ## TYPE)
++
++#define CHECKD(TYPE) \
++ for (i = 0; i < 8 / sizeof (TYPE); i++) \
++ if (output_ ## TYPE[i] != a_ ## TYPE) \
++ abort ()
++
++#define CHECKQ(TYPE) \
++ for (i = 0; i < 32 / sizeof (TYPE); i++) \
++ if (output_ ## TYPE[i] != a_ ## TYPE) \
++ abort ()
++
++#define DECL(TYPE) \
++ TYPE output_ ## TYPE[32]; \
++ TYPE a_ ## TYPE = (TYPE)12
++
++int
++main (void)
++{
++
++ DECL(int8_t);
++ DECL(int16_t);
++ DECL(int32_t);
++ DECL(int64_t);
++ int i;
++
++ FOOD (int8_t);
++ CHECKD (int8_t);
++ FOOQ (int8_t);
++ CHECKQ (int8_t);
++
++ FOOD (int16_t);
++ CHECKD (int16_t);
++ FOOQ (int16_t);
++ CHECKQ (int16_t);
++
++ FOOD (int32_t);
++ CHECKD (int32_t);
++ FOOQ (int32_t);
++ CHECKQ (int32_t);
++
++ FOOD (int64_t);
++ CHECKD (int64_t);
++ FOOQ (int64_t);
++ CHECKQ (int64_t);
++
++ return 0;
++}
--- a/src/gcc/testsuite/gcc.target/aarch64/vect-ld1r.x
+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-ld1r.x
@@ -0,0 +1,15 @@
@@ -72521,6 +76794,33 @@
+ for (i = 0; i < 32 / sizeof (TYPE); i++) \
+ output[i] = *a; \
+ }
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect-mull-compile.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect-mull-compile.c
+@@ -0,0 +1,24 @@
++
++/* { dg-do compile } */
++/* { dg-options "-O3" } */
++
++#define N 16
++
++#include "vect-mull.x"
++
++DEF_MULL2 (DEF_MULLB)
++DEF_MULL2 (DEF_MULLH)
++DEF_MULL2 (DEF_MULLS)
++
++/* { dg-final { scan-assembler "smull\\tv\[0-9\]+\.8h"} } */
++/* { dg-final { scan-assembler "smull\\tv\[0-9\]+\.4s"} } */
++/* { dg-final { scan-assembler "smull\\tv\[0-9\]+\.2d"} } */
++/* { dg-final { scan-assembler "umull\\tv\[0-9\]+\.8h"} } */
++/* { dg-final { scan-assembler "umull\\tv\[0-9\]+\.4s"} } */
++/* { dg-final { scan-assembler "umull\\tv\[0-9\]+\.2d"} } */
++/* { dg-final { scan-assembler "smull2\\tv\[0-9\]+\.8h"} } */
++/* { dg-final { scan-assembler "smull2\\tv\[0-9\]+\.4s"} } */
++/* { dg-final { scan-assembler "smull2\\tv\[0-9\]+\.2d"} } */
++/* { dg-final { scan-assembler "umull2\\tv\[0-9\]+\.8h"} } */
++/* { dg-final { scan-assembler "umull2\\tv\[0-9\]+\.4s"} } */
++/* { dg-final { scan-assembler "umull2\\tv\[0-9\]+\.2d"} } */
--- a/src/gcc/testsuite/gcc.target/aarch64/vect-mull.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-mull.c
@@ -0,0 +1,138 @@
@@ -72662,33 +76962,6 @@
+
+ return 0;
+}
---- a/src/gcc/testsuite/gcc.target/aarch64/vect-mull-compile.c
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-mull-compile.c
-@@ -0,0 +1,24 @@
-+
-+/* { dg-do compile } */
-+/* { dg-options "-O3" } */
-+
-+#define N 16
-+
-+#include "vect-mull.x"
-+
-+DEF_MULL2 (DEF_MULLB)
-+DEF_MULL2 (DEF_MULLH)
-+DEF_MULL2 (DEF_MULLS)
-+
-+/* { dg-final { scan-assembler "smull\\tv\[0-9\]+\.8h"} } */
-+/* { dg-final { scan-assembler "smull\\tv\[0-9\]+\.4s"} } */
-+/* { dg-final { scan-assembler "smull\\tv\[0-9\]+\.2d"} } */
-+/* { dg-final { scan-assembler "umull\\tv\[0-9\]+\.8h"} } */
-+/* { dg-final { scan-assembler "umull\\tv\[0-9\]+\.4s"} } */
-+/* { dg-final { scan-assembler "umull\\tv\[0-9\]+\.2d"} } */
-+/* { dg-final { scan-assembler "smull2\\tv\[0-9\]+\.8h"} } */
-+/* { dg-final { scan-assembler "smull2\\tv\[0-9\]+\.4s"} } */
-+/* { dg-final { scan-assembler "smull2\\tv\[0-9\]+\.2d"} } */
-+/* { dg-final { scan-assembler "umull2\\tv\[0-9\]+\.8h"} } */
-+/* { dg-final { scan-assembler "umull2\\tv\[0-9\]+\.4s"} } */
-+/* { dg-final { scan-assembler "umull2\\tv\[0-9\]+\.2d"} } */
--- a/src/gcc/testsuite/gcc.target/aarch64/vect-mull.x
+++ b/src/gcc/testsuite/gcc.target/aarch64/vect-mull.x
@@ -0,0 +1,49 @@
@@ -72741,6 +77014,245 @@
+
+#define DEF_MULL2(x) x (S) \
+ x (U)
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect.c
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect.c
+@@ -0,0 +1,93 @@
++
++/* { dg-do run } */
++/* { dg-options "-O3" } */
++
++#include "vect.x"
++
++extern void abort (void);
++
++void set_vector (int *a, int n)
++{
++ int i;
++ for (i=0; i<16; i++)
++ a[i] = n;
++}
++
++void check_vector (pRINT c, pRINT result, char *str)
++{
++ int i;
++ for (i=0; i<16 ; i++)
++ if (c[i] != result[i])
++ abort ();
++}
++
++#define TEST(func, sign) set_vector (sign##c, 0); \
++ func (sign##a, sign##b, sign##c); \
++ check_vector (sign##c, func##_vector, #func);
++
++
++#define TESTV(func, sign) \
++ if (func (sign##a) != func##_value) \
++ abort ();
++
++#define TESTVLL(func, sign) \
++ if (func (ll##sign##a) != func##_value) \
++ abort ();
++
++int main (void)
++{
++ int sa[16];
++ int sb[16];
++ int sc[16];
++ unsigned int ua[16];
++ unsigned int ub[16];
++ unsigned int uc[16];
++ long long llsa[16];
++ unsigned long long llua[16];
++ int i;
++
++ /* Table of standard values to compare against. */
++ unsigned int test_bic_vector[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
++ unsigned int test_orn_vector[] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
++ int mla_vector[] = {0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225};
++ int mls_vector[] = {0, -1, -4, -9, -16, -25, -36, -49, -64, -81, -100, -121, -144, -169, -196, -225};
++ int smax_vector[] = {0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15};
++ int smin_vector[] = {0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15};
++ unsigned int umax_vector[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
++ unsigned int umin_vector[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
++ int reduce_smax_value = 0;
++ int reduce_smin_value = -15;
++ unsigned int reduce_umax_value = 15;
++ unsigned int reduce_umin_value = 0;
++ unsigned int reduce_add_u32_value = 120;
++ int reduce_add_s32_value = -120;
++ long long reduce_add_s64_value = -120;
++ unsigned long long reduce_add_u64_value = 120;
++
++ /* Set up input vectors. */
++ for (i=0; i < 16; i++)
++ {
++ sa[i] = sb[i] = -i;
++ llsa[i] = (long long)-i;
++ ua[i] = ub[i] = i;
++ llua[i] = (unsigned long long)i;
++ }
++
++ TEST (test_bic, s);
++ TEST (test_orn, s);
++ TEST (mla, s);
++ TEST (mls, s);
++ TEST (smax, s);
++ TEST (smin, s);
++ TEST (umax, u);
++ TEST (umin, u);
++ TESTV (reduce_smax, s);
++ TESTV (reduce_smin, s);
++ TESTV (reduce_umax, u);
++ TESTV (reduce_umin, u);
++ TESTV (reduce_add_u32, u);
++ TESTV (reduce_add_s32, s);
++ TESTVLL (reduce_add_u64, u);
++ TESTVLL (reduce_add_s64, s);
++ return 0;
++}
+--- a/src/gcc/testsuite/gcc.target/aarch64/vect.x
++++ b/src/gcc/testsuite/gcc.target/aarch64/vect.x
+@@ -0,0 +1,140 @@
++typedef int *__restrict__ pRINT;
++typedef unsigned int *__restrict__ pRUINT;
++typedef long long *__restrict__ pRINT64;
++typedef unsigned long long *__restrict__ pRUINT64;
++
++void test_orn (pRUINT a, pRUINT b, pRUINT c)
++{
++ int i;
++ for (i = 0; i < 16; i++)
++ c[i] = a[i] | (~b[i]);
++}
++
++void test_bic (pRUINT a, pRUINT b, pRUINT c)
++{
++ int i;
++ for (i = 0; i < 16; i++)
++ c[i] = a[i] & (~b[i]);
++}
++
++void mla (pRINT a, pRINT b, pRINT c)
++{
++ int i;
++ for (i=0;i<16;i++)
++ c[i] += a[i] * b[i];
++}
++
++void mls (pRINT a, pRINT b, pRINT c)
++{
++ int i;
++ for (i=0;i<16;i++)
++ c[i] -= a[i] * b[i];
++}
++
++void smax (pRINT a, pRINT b, pRINT c)
++{
++ int i;
++ for (i=0;i<16;i++)
++ c[i] = (a[i] > b[i] ? a[i] : b[i]);
++}
++
++void smin (pRINT a, pRINT b, pRINT c)
++{
++ int i;
++ for (i=0;i<16;i++)
++ c[i] = (a[i] < b[i] ? a[i] : b[i]);
++}
++
++void umax (pRUINT a, pRUINT b, pRUINT c)
++{
++ int i;
++ for (i=0;i<16;i++)
++ c[i] = (a[i] > b[i] ? a[i] : b[i]);
++}
++
++void umin (pRUINT a, pRUINT b, pRUINT c)
++{
++ int i;
++ for (i=0;i<16;i++)
++ c[i] = (a[i] < b[i] ? a[i] : b[i]);
++}
++
++unsigned int reduce_umax (pRUINT a)
++{
++ int i;
++ unsigned int s = a[0];
++ for (i = 1; i < 16; i++)
++ s = (s > a[i] ? s : a[i]);
++
++ return s;
++}
++
++unsigned int reduce_umin (pRUINT a)
++{
++ int i;
++ unsigned int s = a[0];
++ for (i = 1; i < 16; i++)
++ s = (s < a[i] ? s : a[i]);
++
++ return s;
++}
++
++int reduce_smax (pRINT a)
++{
++ int i;
++ int s = a[0];
++ for (i = 1; i < 16; i++)
++ s = (s > a[i] ? s : a[i]);
++
++ return s;
++}
++
++int reduce_smin (pRINT a)
++{
++ int i;
++ int s = a[0];
++ for (i = 1; i < 16; i++)
++ s = (s < a[i] ? s : a[i]);
++
++ return s;
++}
++
++unsigned int reduce_add_u32 (pRINT a)
++{
++ int i;
++ unsigned int s = 0;
++ for (i = 0; i < 16; i++)
++ s += a[i];
++
++ return s;
++}
++
++int reduce_add_s32 (pRINT a)
++{
++ int i;
++ int s = 0;
++ for (i = 0; i < 16; i++)
++ s += a[i];
++
++ return s;
++}
++
++unsigned long long reduce_add_u64 (pRUINT64 a)
++{
++ int i;
++ unsigned long long s = 0;
++ for (i = 0; i < 16; i++)
++ s += a[i];
++
++ return s;
++}
++
++long long reduce_add_s64 (pRINT64 a)
++{
++ int i;
++ long long s = 0;
++ for (i = 0; i < 16; i++)
++ s += a[i];
++
++ return s;
++}
--- a/src/gcc/testsuite/gcc.target/aarch64/vector_intrinsics.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/vector_intrinsics.c
@@ -0,0 +1,803 @@
@@ -73547,149 +78059,6 @@
+{
+ return vshll_high_n_u8 (__a, 8);
+}
---- a/src/gcc/testsuite/gcc.target/aarch64/vect.x
-+++ b/src/gcc/testsuite/gcc.target/aarch64/vect.x
-@@ -0,0 +1,140 @@
-+typedef int *__restrict__ pRINT;
-+typedef unsigned int *__restrict__ pRUINT;
-+typedef long long *__restrict__ pRINT64;
-+typedef unsigned long long *__restrict__ pRUINT64;
-+
-+void test_orn (pRUINT a, pRUINT b, pRUINT c)
-+{
-+ int i;
-+ for (i = 0; i < 16; i++)
-+ c[i] = a[i] | (~b[i]);
-+}
-+
-+void test_bic (pRUINT a, pRUINT b, pRUINT c)
-+{
-+ int i;
-+ for (i = 0; i < 16; i++)
-+ c[i] = a[i] & (~b[i]);
-+}
-+
-+void mla (pRINT a, pRINT b, pRINT c)
-+{
-+ int i;
-+ for (i=0;i<16;i++)
-+ c[i] += a[i] * b[i];
-+}
-+
-+void mls (pRINT a, pRINT b, pRINT c)
-+{
-+ int i;
-+ for (i=0;i<16;i++)
-+ c[i] -= a[i] * b[i];
-+}
-+
-+void smax (pRINT a, pRINT b, pRINT c)
-+{
-+ int i;
-+ for (i=0;i<16;i++)
-+ c[i] = (a[i] > b[i] ? a[i] : b[i]);
-+}
-+
-+void smin (pRINT a, pRINT b, pRINT c)
-+{
-+ int i;
-+ for (i=0;i<16;i++)
-+ c[i] = (a[i] < b[i] ? a[i] : b[i]);
-+}
-+
-+void umax (pRUINT a, pRUINT b, pRUINT c)
-+{
-+ int i;
-+ for (i=0;i<16;i++)
-+ c[i] = (a[i] > b[i] ? a[i] : b[i]);
-+}
-+
-+void umin (pRUINT a, pRUINT b, pRUINT c)
-+{
-+ int i;
-+ for (i=0;i<16;i++)
-+ c[i] = (a[i] < b[i] ? a[i] : b[i]);
-+}
-+
-+unsigned int reduce_umax (pRUINT a)
-+{
-+ int i;
-+ unsigned int s = a[0];
-+ for (i = 1; i < 16; i++)
-+ s = (s > a[i] ? s : a[i]);
-+
-+ return s;
-+}
-+
-+unsigned int reduce_umin (pRUINT a)
-+{
-+ int i;
-+ unsigned int s = a[0];
-+ for (i = 1; i < 16; i++)
-+ s = (s < a[i] ? s : a[i]);
-+
-+ return s;
-+}
-+
-+int reduce_smax (pRINT a)
-+{
-+ int i;
-+ int s = a[0];
-+ for (i = 1; i < 16; i++)
-+ s = (s > a[i] ? s : a[i]);
-+
-+ return s;
-+}
-+
-+int reduce_smin (pRINT a)
-+{
-+ int i;
-+ int s = a[0];
-+ for (i = 1; i < 16; i++)
-+ s = (s < a[i] ? s : a[i]);
-+
-+ return s;
-+}
-+
-+unsigned int reduce_add_u32 (pRINT a)
-+{
-+ int i;
-+ unsigned int s = 0;
-+ for (i = 0; i < 16; i++)
-+ s += a[i];
-+
-+ return s;
-+}
-+
-+int reduce_add_s32 (pRINT a)
-+{
-+ int i;
-+ int s = 0;
-+ for (i = 0; i < 16; i++)
-+ s += a[i];
-+
-+ return s;
-+}
-+
-+unsigned long long reduce_add_u64 (pRUINT64 a)
-+{
-+ int i;
-+ unsigned long long s = 0;
-+ for (i = 0; i < 16; i++)
-+ s += a[i];
-+
-+ return s;
-+}
-+
-+long long reduce_add_s64 (pRINT64 a)
-+{
-+ int i;
-+ long long s = 0;
-+ for (i = 0; i < 16; i++)
-+ s += a[i];
-+
-+ return s;
-+}
--- a/src/gcc/testsuite/gcc.target/aarch64/vfp-1.c
+++ b/src/gcc/testsuite/gcc.target/aarch64/vfp-1.c
@@ -0,0 +1,109 @@
@@ -74098,24 +78467,6 @@
+
+ return 0;
+}
---- a/src/gcc/testsuite/gcc.target/arm/builtin-bswap16-1.c
-+++ b/src/gcc/testsuite/gcc.target/arm/builtin-bswap16-1.c
-@@ -0,0 +1,15 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2" } */
-+/* { dg-require-effective-target arm_arch_v7a_ok } */
-+/* { dg-add-options arm_arch_v7a } */
-+/* { dg-final { scan-assembler-not "orr\[ \t\]" } } */
-+
-+unsigned short swapu16_1 (unsigned short x)
-+{
-+ return (x << 8) | (x >> 8);
-+}
-+
-+unsigned short swapu16_2 (unsigned short x)
-+{
-+ return (x >> 8) | (x << 8);
-+}
--- a/src/gcc/testsuite/gcc.target/arm/builtin-bswap-1.c
+++ b/src/gcc/testsuite/gcc.target/arm/builtin-bswap-1.c
@@ -0,0 +1,81 @@
@@ -74200,6 +78551,24 @@
+ z = __builtin_bswap32 (x);
+ return foou32 (z);
+}
+--- a/src/gcc/testsuite/gcc.target/arm/builtin-bswap16-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/builtin-bswap16-1.c
+@@ -0,0 +1,15 @@
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++/* { dg-require-effective-target arm_arch_v7a_ok } */
++/* { dg-add-options arm_arch_v7a } */
++/* { dg-final { scan-assembler-not "orr\[ \t\]" } } */
++
++unsigned short swapu16_1 (unsigned short x)
++{
++ return (x << 8) | (x >> 8);
++}
++
++unsigned short swapu16_2 (unsigned short x)
++{
++ return (x >> 8) | (x << 8);
++}
--- a/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanes64.c
+++ b/src/gcc/testsuite/gcc.target/arm/neon/vgetQ_lanes64.c
@@ -10,11 +10,11 @@
@@ -74431,6 +78800,26 @@
+ vshl with a negative amount in register. */
+/* { dg-final {scan-assembler-times "vshr" 6} } */
+/* { dg-final {scan-assembler-times "vshl" 2} } */
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-1.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-1.c
+@@ -0,0 +1,17 @@
++/* Test the optimization of `vdupq_n_f32' ARM Neon intrinsic. */
++
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++float32x4_t out_float32x4_t;
++void test_vdupq_nf32 (void)
++{
++ out_float32x4_t = vdupq_n_f32 (0.0);
++}
++
++/* { dg-final { scan-assembler "vmov\.f32\[ \]+\[qQ\]\[0-9\]+, #0\.0\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
++/* { dg-final { cleanup-saved-temps } } */
--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-10.c
+++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-10.c
@@ -0,0 +1,17 @@
@@ -74631,26 +79020,6 @@
+
+/* { dg-final { scan-assembler "vmov\.i32\[ \]+\[qQ\]\[0-9\]+, #4293722112\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+/* { dg-final { cleanup-saved-temps } } */
---- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-1.c
-+++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-1.c
-@@ -0,0 +1,17 @@
-+/* Test the optimization of `vdupq_n_f32' ARM Neon intrinsic. */
-+
-+/* { dg-do compile } */
-+/* { dg-require-effective-target arm_neon_ok } */
-+/* { dg-options "-O2" } */
-+/* { dg-add-options arm_neon } */
-+
-+#include <arm_neon.h>
-+
-+float32x4_t out_float32x4_t;
-+void test_vdupq_nf32 (void)
-+{
-+ out_float32x4_t = vdupq_n_f32 (0.0);
-+}
-+
-+/* { dg-final { scan-assembler "vmov\.f32\[ \]+\[qQ\]\[0-9\]+, #0\.0\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
-+/* { dg-final { cleanup-saved-temps } } */
--- a/src/gcc/testsuite/gcc.target/arm/neon-vdup-2.c
+++ b/src/gcc/testsuite/gcc.target/arm/neon-vdup-2.c
@@ -0,0 +1,17 @@
@@ -74811,124 +79180,6 @@
+
+/* { dg-final { scan-assembler "vmov\.i32\[ \]+\[qQ\]\[0-9\]+, #4293787647\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
+/* { dg-final { cleanup-saved-temps } } */
---- a/src/gcc/testsuite/gcc.target/arm/neon-vext.c
-+++ b/src/gcc/testsuite/gcc.target/arm/neon-vext.c
-@@ -0,0 +1,115 @@
-+/* { dg-do compile } */
-+/* { dg-require-effective-target arm_neon_ok } */
-+/* { dg-require-effective-target arm_little_endian } */
-+/* { dg-options "-O2" } */
-+/* { dg-add-options arm_neon } */
-+
-+#include <arm_neon.h>
-+
-+uint8x8_t
-+tst_vext_u8 (uint8x8_t __a, uint8x8_t __b)
-+{
-+ uint8x8_t __mask1 = {2, 3, 4, 5, 6, 7, 8, 9};
-+
-+ return __builtin_shuffle ( __a, __b, __mask1) ;
-+}
-+
-+uint8x8_t
-+tst_vext_u8_rotate (uint8x8_t __a)
-+{
-+ uint8x8_t __mask1 = {2, 3, 4, 5, 6, 7, 0, 1};
-+ return __builtin_shuffle ( __a, __mask1) ;
-+}
-+
-+uint16x4_t
-+tst_vext_u16 (uint16x4_t __a, uint16x4_t __b)
-+{
-+ uint16x4_t __mask1 = {2, 3, 4, 5};
-+ return __builtin_shuffle ( __a, __b, __mask1) ;
-+}
-+
-+uint16x4_t
-+tst_vext_u16_rotate (uint16x4_t __a)
-+{
-+ uint16x4_t __mask1 = {2, 3, 0, 1};
-+ return __builtin_shuffle ( __a, __mask1) ;
-+}
-+
-+uint32x2_t
-+tst_vext_u32 (uint32x2_t __a, uint32x2_t __b)
-+{
-+ uint32x2_t __mask1 = {1, 2};
-+ return __builtin_shuffle ( __a, __b, __mask1) ;
-+}
-+
-+/* This one is mapped into vrev64.32. */
-+uint32x2_t
-+tst_vext_u32_rotate (uint32x2_t __a)
-+{
-+ uint32x2_t __mask1 = {1, 0};
-+ return __builtin_shuffle ( __a, __mask1) ;
-+}
-+
-+uint8x16_t
-+tst_vextq_u8 (uint8x16_t __a, uint8x16_t __b)
-+{
-+ uint8x16_t __mask1 = {4, 5, 6, 7, 8, 9, 10, 11,
-+ 12, 13, 14, 15, 16, 17, 18, 19};
-+ return __builtin_shuffle ( __a, __b, __mask1) ;
-+}
-+
-+uint8x16_t
-+tst_vextq_u8_rotate (uint8x16_t __a)
-+{
-+ uint8x16_t __mask1 = {4, 5, 6, 7, 8, 9, 10, 11,
-+ 12, 13, 14, 15, 0, 1, 2, 3};
-+ return __builtin_shuffle ( __a, __mask1) ;
-+}
-+
-+uint16x8_t
-+tst_vextq_u16 (uint16x8_t __a, uint16x8_t __b)
-+{
-+ uint16x8_t __mask1 = {2, 3, 4, 5, 6, 7, 8, 9};
-+ return __builtin_shuffle ( __a, __b, __mask1) ;
-+}
-+
-+uint16x8_t
-+tst_vextq_u16_rotate (uint16x8_t __a)
-+{
-+ uint16x8_t __mask1 = {2, 3, 4, 5, 6, 7, 0, 1};
-+ return __builtin_shuffle ( __a, __mask1) ;
-+}
-+
-+uint32x4_t
-+tst_vextq_u32 (uint32x4_t __a, uint32x4_t __b)
-+{
-+ uint32x4_t __mask1 = {1, 2, 3, 4};
-+ return __builtin_shuffle ( __a, __b, __mask1) ;
-+}
-+
-+uint32x4_t
-+tst_vextq_u32_rotate (uint32x4_t __a)
-+{
-+ uint32x4_t __mask1 = {1, 2, 3, 0};
-+ return __builtin_shuffle ( __a, __mask1) ;
-+}
-+
-+uint64x2_t
-+tst_vextq_u64 (uint64x2_t __a, uint64x2_t __b)
-+{
-+ uint64x2_t __mask1 = {1, 2};
-+ return __builtin_shuffle ( __a, __b, __mask1) ;
-+}
-+
-+uint64x2_t
-+tst_vextq_u64_rotate (uint64x2_t __a)
-+{
-+ uint64x2_t __mask1 = {1, 0};
-+ return __builtin_shuffle ( __a, __mask1) ;
-+}
-+
-+/* { dg-final {scan-assembler-times "vext\.8\\t" 4} } */
-+/* { dg-final {scan-assembler-times "vext\.16\\t" 4} } */
-+/* { dg-final {scan-assembler-times "vext\.32\\t" 3} } */
-+/* { dg-final {scan-assembler-times "vrev64\.32\\t" 1} } */
-+/* { dg-final {scan-assembler-times "vext\.64\\t" 2} } */
--- a/src/gcc/testsuite/gcc.target/arm/neon-vext-execute.c
+++ b/src/gcc/testsuite/gcc.target/arm/neon-vext-execute.c
@@ -0,0 +1,340 @@
@@ -75272,6 +79523,124 @@
+
+ return 0;
+}
+--- a/src/gcc/testsuite/gcc.target/arm/neon-vext.c
++++ b/src/gcc/testsuite/gcc.target/arm/neon-vext.c
+@@ -0,0 +1,115 @@
++/* { dg-do compile } */
++/* { dg-require-effective-target arm_neon_ok } */
++/* { dg-require-effective-target arm_little_endian } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++
++uint8x8_t
++tst_vext_u8 (uint8x8_t __a, uint8x8_t __b)
++{
++ uint8x8_t __mask1 = {2, 3, 4, 5, 6, 7, 8, 9};
++
++ return __builtin_shuffle ( __a, __b, __mask1) ;
++}
++
++uint8x8_t
++tst_vext_u8_rotate (uint8x8_t __a)
++{
++ uint8x8_t __mask1 = {2, 3, 4, 5, 6, 7, 0, 1};
++ return __builtin_shuffle ( __a, __mask1) ;
++}
++
++uint16x4_t
++tst_vext_u16 (uint16x4_t __a, uint16x4_t __b)
++{
++ uint16x4_t __mask1 = {2, 3, 4, 5};
++ return __builtin_shuffle ( __a, __b, __mask1) ;
++}
++
++uint16x4_t
++tst_vext_u16_rotate (uint16x4_t __a)
++{
++ uint16x4_t __mask1 = {2, 3, 0, 1};
++ return __builtin_shuffle ( __a, __mask1) ;
++}
++
++uint32x2_t
++tst_vext_u32 (uint32x2_t __a, uint32x2_t __b)
++{
++ uint32x2_t __mask1 = {1, 2};
++ return __builtin_shuffle ( __a, __b, __mask1) ;
++}
++
++/* This one is mapped into vrev64.32. */
++uint32x2_t
++tst_vext_u32_rotate (uint32x2_t __a)
++{
++ uint32x2_t __mask1 = {1, 0};
++ return __builtin_shuffle ( __a, __mask1) ;
++}
++
++uint8x16_t
++tst_vextq_u8 (uint8x16_t __a, uint8x16_t __b)
++{
++ uint8x16_t __mask1 = {4, 5, 6, 7, 8, 9, 10, 11,
++ 12, 13, 14, 15, 16, 17, 18, 19};
++ return __builtin_shuffle ( __a, __b, __mask1) ;
++}
++
++uint8x16_t
++tst_vextq_u8_rotate (uint8x16_t __a)
++{
++ uint8x16_t __mask1 = {4, 5, 6, 7, 8, 9, 10, 11,
++ 12, 13, 14, 15, 0, 1, 2, 3};
++ return __builtin_shuffle ( __a, __mask1) ;
++}
++
++uint16x8_t
++tst_vextq_u16 (uint16x8_t __a, uint16x8_t __b)
++{
++ uint16x8_t __mask1 = {2, 3, 4, 5, 6, 7, 8, 9};
++ return __builtin_shuffle ( __a, __b, __mask1) ;
++}
++
++uint16x8_t
++tst_vextq_u16_rotate (uint16x8_t __a)
++{
++ uint16x8_t __mask1 = {2, 3, 4, 5, 6, 7, 0, 1};
++ return __builtin_shuffle ( __a, __mask1) ;
++}
++
++uint32x4_t
++tst_vextq_u32 (uint32x4_t __a, uint32x4_t __b)
++{
++ uint32x4_t __mask1 = {1, 2, 3, 4};
++ return __builtin_shuffle ( __a, __b, __mask1) ;
++}
++
++uint32x4_t
++tst_vextq_u32_rotate (uint32x4_t __a)
++{
++ uint32x4_t __mask1 = {1, 2, 3, 0};
++ return __builtin_shuffle ( __a, __mask1) ;
++}
++
++uint64x2_t
++tst_vextq_u64 (uint64x2_t __a, uint64x2_t __b)
++{
++ uint64x2_t __mask1 = {1, 2};
++ return __builtin_shuffle ( __a, __b, __mask1) ;
++}
++
++uint64x2_t
++tst_vextq_u64_rotate (uint64x2_t __a)
++{
++ uint64x2_t __mask1 = {1, 0};
++ return __builtin_shuffle ( __a, __mask1) ;
++}
++
++/* { dg-final {scan-assembler-times "vext\.8\\t" 4} } */
++/* { dg-final {scan-assembler-times "vext\.16\\t" 4} } */
++/* { dg-final {scan-assembler-times "vext\.32\\t" 3} } */
++/* { dg-final {scan-assembler-times "vrev64\.32\\t" 1} } */
++/* { dg-final {scan-assembler-times "vext\.64\\t" 2} } */
--- a/src/gcc/testsuite/gcc.target/arm/pr52686.c
+++ b/src/gcc/testsuite/gcc.target/arm/pr52686.c
@@ -0,0 +1,19 @@
@@ -75697,6 +80066,28 @@
+
+/* { dg-final { scan-assembler "lslne" } } */
+/* { dg-final { scan-assembler "asrne" } } */
+--- a/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c
++++ b/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c
+@@ -15,7 +15,7 @@
+ avx_test (void)
+ {
+ union256d u;
+- double e [4] __attribute__ ((aligned (8))) = {41124.234,2344.2354,8653.65635,856.43576};
++ double e [4] __attribute__ ((aligned (32))) = {41124.234,2344.2354,8653.65635,856.43576};
+
+ u.x = test (e);
+
+--- a/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c
++++ b/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c
+@@ -15,7 +15,7 @@
+ avx_test (void)
+ {
+ union256d u;
+- double e [4] __attribute__ ((aligned (8))) = {0.0};
++ double e [4] __attribute__ ((aligned (32))) = {0.0};
+
+ u.x = _mm256_set_pd (39578.467285, 7856.342941, 85632.783567, 47563.234215);
+
--- a/src/gcc/testsuite/gcc.target/i386/builtin-bswap-4.c
+++ b/src/gcc/testsuite/gcc.target/i386/builtin-bswap-4.c
@@ -0,0 +1,8 @@
@@ -75708,6 +80099,72 @@
+{
+ return __builtin_bswap16 (x);
+}
+--- a/src/gcc/testsuite/gcc.target/i386/pr30315.c
++++ b/src/gcc/testsuite/gcc.target/i386/pr30315.c
+@@ -1,6 +1,6 @@
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+-/* { dg-final { scan-assembler-times "cmp" 4 } } */
++/* { dg-final { scan-assembler-not "cmp" } } */
+
+ extern void abort (void);
+ int c;
+@@ -34,39 +34,10 @@
+ }
+ #define PLUSCCONLY(T, t) PLUSCCONLY1(T, t, a) PLUSCCONLY1(T, t, b)
+
+-#define MINUSCC(T, t) \
+-T minuscc##t (T a, T b) \
+-{ \
+- T difference = a - b; \
+- if (difference > a) \
+- abort (); \
+- return difference; \
+-}
+-
+-#define DECCC(T, t) \
+-T deccc##t (T a, T b) \
+-{ \
+- T difference = a - b; \
+- if (difference > a) \
+- c --; \
+- return difference; \
+-}
+-
+-#define MINUSCCONLY(T, t) \
+-void minuscconly##t (T a, T b) \
+-{ \
+- T difference = a - b; \
+- if (difference > a) \
+- abort (); \
+-}
+-
+ #define TEST(T, t) \
+ PLUSCC(T, t) \
+ PLUSCCONLY(T, t) \
+- INCCC(T, t) \
+- MINUSCC(T, t) \
+- MINUSCCONLY(T, t) \
+- DECCC(T, t)
++ INCCC(T, t)
+
+ TEST (unsigned long, l)
+ TEST (unsigned int, i)
+@@ -84,14 +55,3 @@
+
+ PLUSCCZEXT(a)
+ PLUSCCZEXT(b)
+-
+-#define MINUSCCZEXT \
+-unsigned long minuscczext (unsigned int a, unsigned int b) \
+-{ \
+- unsigned int difference = a - b; \
+- if (difference > a) \
+- abort (); \
+- return difference; \
+-}
+-
+-MINUSCCZEXT
--- a/src/gcc/testsuite/gcc.target/i386/pr44578.c
+++ b/src/gcc/testsuite/gcc.target/i386/pr44578.c
@@ -0,0 +1,31 @@
@@ -75774,6 +80231,125 @@
+{
+ *p = __builtin_shuffle (*p, *mask);
+}
+--- a/src/gcc/testsuite/gcc.target/i386/pr57264.c
++++ b/src/gcc/testsuite/gcc.target/i386/pr57264.c
+@@ -0,0 +1,18 @@
++/* { dg-do compile } */
++/* { dg-options "-O1 -mcld" } */
++
++void test (int x, int **pp)
++{
++ while (x)
++ {
++ int *ip = *pp;
++ int *op = *pp;
++ while (*ip)
++ {
++ int v = *ip++;
++ *op++ = v + 1;
++ }
++ }
++}
++
++/* { dg-final { scan-assembler-not "stosl" } } */
+--- a/src/gcc/testsuite/gcc.target/i386/pr57655.c
++++ b/src/gcc/testsuite/gcc.target/i386/pr57655.c
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-mavx -mvzeroupper -mno-fp-ret-in-387" }
++
++/* { dg-error "x87 register return with x87 disabled" "" { target { ! ia32 } } 8 } */
++
++long double
++foo (long double x)
++{
++ return __builtin_ilogbl (x);
++}
+--- a/src/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c
++++ b/src/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c
+@@ -25,7 +25,7 @@
+ TEST (void)
+ {
+ union128d u;
+- double e[2] __attribute__ ((aligned (8))) = {2134.3343,1234.635654};
++ double e[2] __attribute__ ((aligned (16))) = {2134.3343,1234.635654};
+
+ u.x = test (e);
+
+--- a/src/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c
++++ b/src/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c
+@@ -25,7 +25,7 @@
+ TEST (void)
+ {
+ union128d u;
+- double e[2] __attribute__ ((aligned (8))) = {0.0};
++ double e[2] __attribute__ ((aligned (16))) = {0.0};
+
+ u.x = _mm_set_pd (2134.3343,1234.635654);
+
+--- a/src/gcc/testsuite/gcc.target/i386/xop-frczX.c
++++ b/src/gcc/testsuite/gcc.target/i386/xop-frczX.c
+@@ -0,0 +1,60 @@
++/* { dg-do run } */
++/* { dg-require-effective-target xop } */
++/* { dg-options "-O2 -mxop" } */
++
++#include "xop-check.h"
++
++#include <x86intrin.h>
++
++void
++check_mm_vmfrcz_sd (__m128d __A, __m128d __B)
++{
++ union128d a, b, c;
++ double d[2];
++
++ a.x = __A;
++ b.x = __B;
++ c.x = _mm_frcz_sd (__A, __B);
++ d[0] = b.a[0] - (int)b.a[0] ;
++ d[1] = a.a[1];
++ if (check_union128d (c, d))
++ abort ();
++}
++
++void
++check_mm_vmfrcz_ss (__m128 __A, __m128 __B)
++{
++ union128 a, b, c;
++ float f[4];
++
++ a.x = __A;
++ b.x = __B;
++ c.x = _mm_frcz_ss (__A, __B);
++ f[0] = b.a[0] - (int)b.a[0] ;
++ f[1] = a.a[1];
++ f[2] = a.a[2];
++ f[3] = a.a[3];
++ if (check_union128 (c, f))
++ abort ();
++}
++
++static void
++xop_test (void)
++{
++ union128 a, b;
++ union128d c,d;
++ int i;
++
++ for (i = 0; i < 4; i++)
++ {
++ a.a[i] = i + 3.5;
++ b.a[i] = i + 7.9;
++ }
++ for (i = 0; i < 2; i++)
++ {
++ c.a[i] = i + 3.5;
++ d.a[i] = i + 7.987654321;
++ }
++ check_mm_vmfrcz_ss (a.x, b.x);
++ check_mm_vmfrcz_sd (c.x, d.x);
++}
--- a/src/gcc/testsuite/gcc.target/powerpc/pr57150.c
+++ b/src/gcc/testsuite/gcc.target/powerpc/pr57150.c
@@ -0,0 +1,23 @@
@@ -75800,6 +80376,30 @@
+ for (i = 0; i < n; i++)
+ ptr[i] += modify (value);
+}
+--- a/src/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c
++++ b/src/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c
+@@ -0,0 +1,21 @@
++/* Test accuracy of long double division (glibc bug 15396). */
++/* { dg-do run { target powerpc*-*-linux* powerpc*-*-darwin* powerpc*-*-aix* rs6000-*-* } } */
++/* { dg-options "-mlong-double-128" } */
++
++extern void exit (int);
++extern void abort (void);
++
++volatile long double a = 0x1p-1024L;
++volatile long double b = 0x3p-53L;
++volatile long double r;
++volatile long double expected = 0x1.55555555555555555555555555p-973L;
++
++int
++main (void)
++{
++ r = a / b;
++ /* Allow error up to 2ulp. */
++ if (__builtin_fabsl (r - expected) > 0x1p-1073L)
++ abort ();
++ exit (0);
++}
--- a/src/gcc/testsuite/gcc.target/sh/pr57108.c
+++ b/src/gcc/testsuite/gcc.target/sh/pr57108.c
@@ -0,0 +1,19 @@
@@ -75822,218 +80422,138 @@
+
+
+ }
---- a/src/gcc/testsuite/g++.dg/abi/aarch64_guard1.C
-+++ b/src/gcc/testsuite/g++.dg/abi/aarch64_guard1.C
-@@ -0,0 +1,17 @@
-+// Check that the initialization guard variable is an 8-byte aligned,
-+// 8-byte doubleword and that only the least significant bit is used
-+// for initialization guard variables.
-+// { dg-do compile { target aarch64*-*-* } }
-+// { dg-options "-O -fdump-tree-original -fno-section-anchors" }
-+
-+int bar();
+--- a/src/gcc/testsuite/gfortran.dg/debug/pr35154-stabs.f
++++ b/src/gcc/testsuite/gfortran.dg/debug/pr35154-stabs.f
+@@ -1,6 +1,6 @@
+ C Test program for common block debugging. G. Helffrich 11 July 2004.
+ C { dg-do compile }
+-C { dg-skip-if "No stabs" { mmix-*-* alpha*-*-* hppa*64*-*-* ia64-*-* *-*-vxworks* } { "*" } { "" } }
++C { dg-skip-if "No stabs" { aarch64*-*-* mmix-*-* alpha*-*-* hppa*64*-*-* ia64-*-* *-*-vxworks* } { "*" } { "" } }
+ C { dg-skip-if "No stabs" {*-*-* } { "*" } { "-gstabs" } }
+ common i,j
+ common /label/l,m
+--- a/src/gcc/testsuite/gfortran.dg/derived_external_function_1.f90
++++ b/src/gcc/testsuite/gfortran.dg/derived_external_function_1.f90
+@@ -0,0 +1,27 @@
++! { dg-do run }
++!
++! PR fortran/58771
++!
++! Contributed by Vittorio Secca <zeccav@gmail.com>
++!
++! ICEd on the write statement with f() because the derived type backend
++! declaration not built.
++!
++module m
++ type t
++ integer(4) g
++ end type
++end
+
-+int *foo ()
-+{
-+ static int x = bar ();
-+ return &x;
-+}
++type(t) function f() result(ff)
++ use m
++ ff%g = 42
++end
+
-+// { dg-final { scan-assembler _ZGVZ3foovE1x,8,8 } }
-+// { dg-final { scan-tree-dump "_ZGVZ3foovE1x & 1" "original" } }
-+// { dg-final { cleanup-tree-dump "original" } }
---- a/src/gcc/testsuite/g++.dg/abi/arm_va_list.C
-+++ b/src/gcc/testsuite/g++.dg/abi/arm_va_list.C
-@@ -1,9 +1,10 @@
--// { dg-do compile }
-+// { dg-do compile { target { aarch64*-*-* arm*-*-* } } }
- // { dg-options "-Wno-abi" }
--// { dg-require-effective-target arm_eabi }
-+// { dg-require-effective-target arm_eabi { target arm*-*-* } }
-
- // AAPCS \S 7.1.4 requires that va_list be a typedef for "struct
- // __va_list". The mangling is as if it were "std::__va_list".
-+// AAPCS64 \S 7.1.4 has the same requirement for AArch64 targets.
- // #include <stdarg.h>
- typedef __builtin_va_list va_list;
-
---- a/src/gcc/testsuite/g++.dg/abi/mangle-neon-aarch64.C
-+++ b/src/gcc/testsuite/g++.dg/abi/mangle-neon-aarch64.C
-@@ -0,0 +1,55 @@
-+// Test that AArch64 AdvSIMD (NEON) vector types have their names mangled
-+// correctly.
++ use m
++ character (20) :: line1, line2
++ type(t) f
++ write (line1, *) f()
++ write (line2, *) 42_4
++ if (line1 .ne. line2) call abort
++end
+--- a/src/gcc/testsuite/gfortran.dg/do_5.f90
++++ b/src/gcc/testsuite/gfortran.dg/do_5.f90
+@@ -0,0 +1,29 @@
++! { dg-do compile }
++!
++! PR fortran/54370
++!
++! The following program was ICEing at tree-check time
++! "L()" was regarded as default-kind logical.
++!
++! Contributed by Kirill Chilikin
++!
++ MODULE M
++ CONTAINS
++
++ LOGICAL(C_BOOL) FUNCTION L() BIND(C)
++ USE, INTRINSIC :: ISO_C_BINDING
++ L = .FALSE.
++ END FUNCTION
++
++ LOGICAL(8) FUNCTION L2() BIND(C) ! { dg-warning "may not be a C interoperable kind but it is bind" }
++ L2 = .FALSE._8
++ END FUNCTION
++
++ SUBROUTINE S()
++ DO WHILE (L())
++ ENDDO
++ DO WHILE (L2())
++ ENDDO
++ END
++
++ END
+--- a/src/gcc/testsuite/gfortran.dg/dot_product_2.f90
++++ b/src/gcc/testsuite/gfortran.dg/dot_product_2.f90
+@@ -0,0 +1,38 @@
++! { dg-do compile }
++! { dg-options "-fdump-tree-original" }
++!
++! PR fortran/57785
++!
++! Contributed by Kontantinos Anagnostopoulos
++!
++! The implicit complex conjugate was missing for DOT_PRODUCT
+
-+// { dg-do compile { target { aarch64*-*-* } } }
+
-+#include <arm_neon.h>
++! For the following, the compile-time simplification fails for SUM;
++! see PR fortran/56342. Hence, a manually expanded SUM is used.
+
-+void f0 (int8x8_t a) {}
-+void f1 (int16x4_t a) {}
-+void f2 (int32x2_t a) {}
-+void f3 (uint8x8_t a) {}
-+void f4 (uint16x4_t a) {}
-+void f5 (uint32x2_t a) {}
-+void f6 (float32x2_t a) {}
-+void f7 (poly8x8_t a) {}
-+void f8 (poly16x4_t a) {}
++!if (DOT_PRODUCT ((/ (1.0, 2.0), (2.0, 3.0) /), (/ (1.0, 1.0), (1.0, 4.0) /)) &
++! /= SUM (CONJG ((/ (1.0, 2.0), (2.0, 3.0) /))*(/ (1.0, 1.0), (1.0, 4.0) /))) &
++! call abort ()
++!
++!if (ANY (MATMUL ((/ (1.0, 2.0), (2.0, 3.0) /), &
++! RESHAPE ((/ (1.0, 1.0), (1.0, 4.0) /),(/2, 1/))) /= &
++! SUM ((/ (1.0, 2.0), (2.0, 3.0) /)*(/ (1.0, 1.0), (1.0, 4.0) /)))) &
++! call abort ()
++
++
++if (DOT_PRODUCT ((/ (1.0, 2.0), (2.0, 3.0) /), (/ (1.0, 1.0), (1.0, 4.0) /)) &
++ /= CONJG (cmplx(1.0, 2.0)) * cmplx(1.0, 1.0) &
++ + CONJG (cmplx(2.0, 3.0)) * cmplx(1.0, 4.0)) &
++ call abort ()
++
++if (ANY (MATMUL ((/ (1.0, 2.0), (2.0, 3.0) /), &
++ RESHAPE ((/ (1.0, 1.0), (1.0, 4.0) /),(/2, 1/))) &
++ /= cmplx(1.0, 2.0) * cmplx(1.0, 1.0) &
++ + cmplx(2.0, 3.0) * cmplx(1.0, 4.0))) &
++ call abort ()
++end
+
-+void f9 (int8x16_t a) {}
-+void f10 (int16x8_t a) {}
-+void f11 (int32x4_t a) {}
-+void f12 (int64x2_t a) {}
-+void f13 (uint8x16_t a) {}
-+void f14 (uint16x8_t a) {}
-+void f15 (uint32x4_t a) {}
-+void f16 (uint64x2_t a) {}
-+void f17 (float32x4_t a) {}
-+void f18 (float64x2_t a) {}
-+void f19 (poly8x16_t a) {}
-+void f20 (poly16x8_t a) {}
+
-+void f21 (int8x16_t, int8x16_t) {}
++! { dg-final { scan-tree-dump-not "abort" "original" } }
++! { dg-final { cleanup-tree-dump "original" } }
+--- a/src/gcc/testsuite/gfortran.dg/extends_15.f90
++++ b/src/gcc/testsuite/gfortran.dg/extends_15.f90
+@@ -0,0 +1,16 @@
++! { dg-do compile }
++!
++! PR 58355: [4.7/4.8/4.9 Regression] [F03] ICE with TYPE, EXTENDS before parent TYPE defined
++!
++! Contributed by Andrew Benson <abensonca@gmail.com>
+
++module ct
++ public :: t1
+
-+// { dg-final { scan-assembler "_Z2f010__Int8x8_t:" } }
-+// { dg-final { scan-assembler "_Z2f111__Int16x4_t:" } }
-+// { dg-final { scan-assembler "_Z2f211__Int32x2_t:" } }
-+// { dg-final { scan-assembler "_Z2f311__Uint8x8_t:" } }
-+// { dg-final { scan-assembler "_Z2f412__Uint16x4_t:" } }
-+// { dg-final { scan-assembler "_Z2f512__Uint32x2_t:" } }
-+// { dg-final { scan-assembler "_Z2f613__Float32x2_t:" } }
-+// { dg-final { scan-assembler "_Z2f711__Poly8x8_t:" } }
-+// { dg-final { scan-assembler "_Z2f812__Poly16x4_t:" } }
-+// { dg-final { scan-assembler "_Z2f911__Int8x16_t:" } }
-+// { dg-final { scan-assembler "_Z3f1011__Int16x8_t:" } }
-+// { dg-final { scan-assembler "_Z3f1111__Int32x4_t:" } }
-+// { dg-final { scan-assembler "_Z3f1211__Int64x2_t:" } }
-+// { dg-final { scan-assembler "_Z3f1312__Uint8x16_t:" } }
-+// { dg-final { scan-assembler "_Z3f1412__Uint16x8_t:" } }
-+// { dg-final { scan-assembler "_Z3f1512__Uint32x4_t:" } }
-+// { dg-final { scan-assembler "_Z3f1612__Uint64x2_t:" } }
-+// { dg-final { scan-assembler "_Z3f1713__Float32x4_t:" } }
-+// { dg-final { scan-assembler "_Z3f1813__Float64x2_t:" } }
-+// { dg-final { scan-assembler "_Z3f1912__Poly8x16_t:" } }
-+// { dg-final { scan-assembler "_Z3f2012__Poly16x8_t:" } }
-+// { dg-final { scan-assembler "_Z3f2111__Int8x16_tS_:" } }
---- a/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh3.C
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh3.C
-@@ -0,0 +1,14 @@
-+// PR c++/56388
-+// { dg-require-effective-target c++11 }
++ type, extends(t1) :: t2 ! { dg-error "has not been previously defined" }
+
-+int main()
-+{
-+ bool /*const*/ condition = false;
-+
-+ [&]{
-+ try{}
-+ catch(...){
-+ if(condition){}
-+ }
-+ }();
-+}
---- a/src/gcc/testsuite/g++.dg/other/pr23205-2.C
-+++ b/src/gcc/testsuite/g++.dg/other/pr23205-2.C
-@@ -1,5 +1,5 @@
- /* { dg-do compile } */
--/* { dg-skip-if "No stabs" { mmix-*-* *-*-aix* alpha*-*-* hppa*64*-*-* ia64-*-* tile*-*-* } { "*" } { "" } } */
-+/* { dg-skip-if "No stabs" { aarch64*-*-* mmix-*-* *-*-aix* alpha*-*-* hppa*64*-*-* ia64-*-* tile*-*-* } { "*" } { "" } } */
- /* { dg-options "-gstabs+ -fno-eliminate-unused-debug-types -ftoplevel-reorder" } */
-
- const int foobar = 4;
---- a/src/gcc/testsuite/g++.dg/other/PR23205.C
-+++ b/src/gcc/testsuite/g++.dg/other/PR23205.C
-@@ -1,5 +1,5 @@
- /* { dg-do compile } */
--/* { dg-skip-if "No stabs" { mmix-*-* *-*-aix* alpha*-*-* hppa*64*-*-* ia64-*-* tile*-*-* *-*-vxworks } { "*" } { "" } } */
-+/* { dg-skip-if "No stabs" { aarch64*-*-* mmix-*-* *-*-aix* alpha*-*-* hppa*64*-*-* ia64-*-* tile*-*-* *-*-vxworks } { "*" } { "" } } */
- /* { dg-options "-gstabs+ -fno-eliminate-unused-debug-types" } */
-
- const int foobar = 4;
---- a/src/gcc/testsuite/g++.dg/torture/pr54684.C
-+++ b/src/gcc/testsuite/g++.dg/torture/pr54684.C
-@@ -0,0 +1,62 @@
-+// { dg-do compile }
++ type :: t1
++ end type
++end
+
-+typedef union tree_node *tree;
-+typedef union gimple_statement_d *gimple;
-+struct vec_prefix { unsigned num_; };
-+template<typename T> struct vec_t {
-+ unsigned length (void) const;
-+ T &operator[] (unsigned);
-+ vec_prefix prefix_;
-+ T vec_[1];
-+};
-+template<typename T> inline unsigned vec_t<T>::length (void) const {
-+ return prefix_.num_;
-+}
-+template<typename T> T & vec_t<T>::operator[] (unsigned ix) {
-+ ((void)(__builtin_expect(!(ix < prefix_.num_), 0) ? __builtin_unreachable(), 0 : 0));
-+ return vec_[ix];
-+}
-+enum tree_code { PARM_DECL };
-+struct tree_base {
-+ enum tree_code code : 16;
-+ unsigned default_def_flag : 1;
-+};
-+union tree_node {
-+ struct tree_base base;
-+};
-+struct ipa_param_descriptor {
-+ tree decl;
-+ unsigned used : 1;
-+};
-+typedef struct ipa_param_descriptor ipa_param_descriptor_t;
-+struct ipa_node_params {
-+ vec_t<ipa_param_descriptor_t> *descriptors;
-+};
-+static inline int ipa_get_param_count (struct ipa_node_params *info) {
-+ return ((info->descriptors) ? (info->descriptors)->length () : 0);
-+}
-+static inline tree ipa_get_param (struct ipa_node_params *info, int i) {
-+ return ((*(info->descriptors))[i]).decl;
-+}
-+static inline void ipa_set_param_used (struct ipa_node_params *info, int i, bool val) {
-+ ((*(info->descriptors))[i]).used = val;
-+}
-+int ipa_get_param_decl_index (struct ipa_node_params *info, tree ptree)
-+{
-+ int i, count;
-+ count = ipa_get_param_count (info);
-+ for (i = 0; i < count; i++)
-+ if (ipa_get_param (info, i) == ptree) return i;
-+ return -1;
-+}
-+bool visit_ref_for_mod_analysis (gimple stmt __attribute__ ((__unused__)),
-+ tree op, void *data)
-+{
-+ struct ipa_node_params *info = (struct ipa_node_params *) data;
-+ if (op && ((enum tree_code) (op)->base.code) == PARM_DECL)
-+ {
-+ int index = ipa_get_param_decl_index (info, op);
-+ ((void)(__builtin_expect(!(index >= 0), 0) ? __builtin_unreachable(), 0 : 0));
-+ ipa_set_param_used (info, index, true);
-+ }
-+}
---- a/src/gcc/testsuite/g++.dg/tree-ssa/ivopts-2.C
-+++ b/src/gcc/testsuite/g++.dg/tree-ssa/ivopts-2.C
-@@ -7,5 +7,5 @@
- *p = 1;
- }
-
--/* { dg-final { scan-tree-dump-times "PHI <p" 1 "ivopts"} } */
-+/* { dg-final { scan-tree-dump-times "PHI <\[pb\]" 1 "ivopts"} } */
- /* { dg-final { cleanup-tree-dump "ivopts" } } */
---- a/src/gcc/testsuite/gfortran.dg/debug/pr35154-stabs.f
-+++ b/src/gcc/testsuite/gfortran.dg/debug/pr35154-stabs.f
-@@ -1,6 +1,6 @@
- C Test program for common block debugging. G. Helffrich 11 July 2004.
- C { dg-do compile }
--C { dg-skip-if "No stabs" { mmix-*-* alpha*-*-* hppa*64*-*-* ia64-*-* *-*-vxworks* } { "*" } { "" } }
-+C { dg-skip-if "No stabs" { aarch64*-*-* mmix-*-* alpha*-*-* hppa*64*-*-* ia64-*-* *-*-vxworks* } { "*" } { "" } }
- C { dg-skip-if "No stabs" {*-*-* } { "*" } { "-gstabs" } }
- common i,j
- common /label/l,m
++! { dg-final { cleanup-modules "ct" } }
--- a/src/gcc/testsuite/gfortran.dg/namelist_77.f90
+++ b/src/gcc/testsuite/gfortran.dg/namelist_77.f90
@@ -0,0 +1,49 @@
@@ -76336,17 +80856,228 @@
+ real(r8_),intent(out) :: val
+ val = transfer(byte_array(1:8),val)
+end subroutine
---- a/src/gcc/testsuite/g++.old-deja/g++.abi/ptrmem.C
-+++ b/src/gcc/testsuite/g++.old-deja/g++.abi/ptrmem.C
-@@ -7,7 +7,7 @@
- function. However, some platforms use all bits to encode a
- function pointer. Such platforms use the lowest bit of the delta,
- that is shifted left by one bit. */
--#if defined __MN10300__ || defined __SH5__ || defined __arm__ || defined __thumb__ || defined __mips__
-+#if defined __MN10300__ || defined __SH5__ || defined __arm__ || defined __thumb__ || defined __mips__ || defined __aarch64__
- #define ADJUST_PTRFN(func, virt) ((void (*)())(func))
- #define ADJUST_DELTA(delta, virt) (((delta) << 1) + !!(virt))
- #else
+--- a/src/gcc/testsuite/gfortran.dg/transfer_intrinsic_6.f90
++++ b/src/gcc/testsuite/gfortran.dg/transfer_intrinsic_6.f90
+@@ -0,0 +1,20 @@
++! { dg-do compile }
++! { dg-options "-fdump-tree-original" }
++!
++! PR 58058: [4.7/4.8/4.9 Regression] Memory leak with transfer function
++!
++! Contributed by Thomas Jourdan <thomas.jourdan@orange.fr>
++
++ implicit none
++
++ integer, dimension(3) :: t1
++ character(len=64) :: str
++
++ t1 = (/1,2,3/)
++
++ str = transfer(t1,str)
++
++end
++
++! { dg-final { scan-tree-dump-times "__builtin_free" 1 "original" } }
++! { dg-final { cleanup-tree-dump "original" } }
+--- a/src/gcc/testsuite/gfortran.dg/typebound_override_4.f90
++++ b/src/gcc/testsuite/gfortran.dg/typebound_override_4.f90
+@@ -0,0 +1,34 @@
++! { dg-do compile }
++!
++! PR 57217: [4.7/4.8/4.9 Regression][OOP] Accepts invalid TBP overriding - lacking arguments check
++!
++! Contributed by Salvatore Filippone <filippone.salvatore@gmail.com>
++
++module base_mod
++ implicit none
++ type base_type
++ contains
++ procedure, pass(map) :: clone => base_clone
++ end type
++contains
++ subroutine base_clone(map,mapout)
++ class(base_type) :: map
++ class(base_type) :: mapout
++ end subroutine
++end module
++
++module r_mod
++ use base_mod
++ implicit none
++ type, extends(base_type) :: r_type
++ contains
++ procedure, pass(map) :: clone => r_clone ! { dg-error "Type/rank mismatch in argument" }
++ end type
++contains
++ subroutine r_clone(map,mapout)
++ class(r_type) :: map
++ class(r_type) :: mapout
++ end subroutine
++end module
++
++! { dg-final { cleanup-modules "base_mod r_mod" } }
+--- a/src/gcc/testsuite/gnat.dg/in_out_parameter4.adb
++++ b/src/gcc/testsuite/gnat.dg/in_out_parameter4.adb
+@@ -0,0 +1,30 @@
++-- { dg-do run }
++-- { dg-options "-gnat12 -gnatVa" }
++
++procedure In_Out_Parameter4 is
++
++ type Enum is (E_Undetermined, E_Down, E_Up);
++ subtype Status_T is Enum range E_Down .. E_Up;
++
++ function Recurse (Val : in out Integer) return Status_T is
++
++ Result : Status_T;
++
++ procedure Dummy (I : in out Integer) is begin null; end;
++
++ begin
++ if Val > 500 then
++ Val := Val - 1;
++ Result := Recurse (Val);
++ return Result;
++ else
++ return E_UP;
++ end if;
++ end;
++
++ Val : Integer := 501;
++ S : Status_T;
++
++begin
++ S := Recurse (Val);
++end;
+--- a/src/gcc/testsuite/gnat.dg/loop_optimization16.adb
++++ b/src/gcc/testsuite/gnat.dg/loop_optimization16.adb
+@@ -0,0 +1,24 @@
++-- { dg-do run }
++
++with Loop_Optimization16_Pkg; use Loop_Optimization16_Pkg;
++
++procedure Loop_Optimization16 is
++
++ Counter : Natural := 0;
++
++ C : constant Natural := F;
++
++ subtype Index_T is Index_Base range 1 .. Index_Base (C);
++
++begin
++
++ for I in Index_T'First .. Index_T'Last loop
++ Counter := Counter + 1;
++ exit when Counter > 200;
++ end loop;
++
++ if Counter > 200 then
++ raise Program_Error;
++ end if;
++
++end Loop_Optimization16;
+--- a/src/gcc/testsuite/gnat.dg/loop_optimization16_pkg.adb
++++ b/src/gcc/testsuite/gnat.dg/loop_optimization16_pkg.adb
+@@ -0,0 +1,8 @@
++package body Loop_Optimization16_Pkg is
++
++ function F return Natural is
++ begin
++ return Natural (Index_Base'Last);
++ end;
++
++end Loop_Optimization16_Pkg;
+--- a/src/gcc/testsuite/gnat.dg/loop_optimization16_pkg.ads
++++ b/src/gcc/testsuite/gnat.dg/loop_optimization16_pkg.ads
+@@ -0,0 +1,7 @@
++package Loop_Optimization16_Pkg is
++
++ type Index_Base is range 0 .. 127;
++
++ function F return Natural;
++
++end Loop_Optimization16_Pkg;
+--- a/src/gcc/testsuite/gnat.dg/opt28.adb
++++ b/src/gcc/testsuite/gnat.dg/opt28.adb
+@@ -0,0 +1,31 @@
++with Opt28_Pkg; use Opt28_Pkg;
++
++package body Opt28 is
++
++ function Full_Filename (Filename : String) return String is
++ Path : constant String := "PATH";
++ Posix_Path : constant Posix_String := To_Posix (Path);
++ begin
++
++ declare
++ M : constant Posix_String := Value_Of (Posix_Path);
++ N : constant Posix_String (1 .. M'Length) := M;
++ Var : constant String := To_String (Str => N);
++ Start_Pos : Natural := 1;
++ End_Pos : Natural := 1;
++ begin
++ while Start_Pos <= Var'Length loop
++ End_Pos := Position (Var (Start_Pos .. Var'Length));
++
++ if Is_File (To_Posix (Var (Start_Pos .. End_Pos - 1) & Filename)) then
++ return Var (Start_Pos .. End_Pos - 1) & Filename;
++ else
++ Start_Pos := End_Pos + 1;
++ end if;
++ end loop;
++ end;
++
++ return "";
++ end;
++
++end Opt28;
+--- a/src/gcc/testsuite/gnat.dg/opt28.ads
++++ b/src/gcc/testsuite/gnat.dg/opt28.ads
+@@ -0,0 +1,8 @@
++-- { dg-do compile }
++-- { dg-options "-O2" }
++
++package Opt28 is
++
++ function Full_Filename (Filename : String) return String;
++
++end Opt28;
+--- a/src/gcc/testsuite/gnat.dg/opt28_pkg.ads
++++ b/src/gcc/testsuite/gnat.dg/opt28_pkg.ads
+@@ -0,0 +1,11 @@
++package Opt28_Pkg is
++
++ type Posix_String is array (Positive range <>) of aliased Character;
++
++ function To_Posix (Str : String) return Posix_String;
++ function To_String (Str : Posix_String) return String;
++ function Is_File (Str : Posix_String) return Boolean;
++ function Value_Of (Name : Posix_String) return Posix_String;
++ function Position (In_Line : String) return Natural;
++
++end Opt28_Pkg;
+--- a/src/gcc/testsuite/gnat.dg/specs/last_bit.ads
++++ b/src/gcc/testsuite/gnat.dg/specs/last_bit.ads
+@@ -0,0 +1,19 @@
++-- { dg-do compile }
++
++package Last_Bit is
++
++ Max_Components : constant := 100;
++ type Count_Type is new Natural range 0 .. Max_Components;
++ subtype Index_Type is Count_Type range 1 .. Count_Type'Last;
++
++ type List_Type is array (Index_Type range <>) of Integer;
++
++ type Record_Type (Count : Count_Type := 0) is record
++ List : List_Type (1 .. Count);
++ end record;
++
++ Null_Record : Record_Type (Count => 0);
++
++ List_Last_Bit : Integer := Null_Record.List'Last_Bit;
++
++end Last_Bit;
--- a/src/gcc/testsuite/lib/target-supports.exp
+++ b/src/gcc/testsuite/lib/target-supports.exp
@@ -493,6 +493,13 @@
@@ -76875,37 +81606,830 @@
+ return 0
+ }
+}
---- a/src/gcc/tree.c
-+++ b/src/gcc/tree.c
-@@ -9358,6 +9358,7 @@
- integer_ptr_type_node = build_pointer_type (integer_type_node);
+--- a/src/gcc/testsuite/obj-c++.dg/cxx-ivars-3.mm
++++ b/src/gcc/testsuite/obj-c++.dg/cxx-ivars-3.mm
+@@ -2,12 +2,15 @@
- /* Fixed size integer types. */
-+ uint16_type_node = build_nonstandard_integer_type (16, true);
- uint32_type_node = build_nonstandard_integer_type (32, true);
- uint64_type_node = build_nonstandard_integer_type (64, true);
+ // { dg-do run { target *-*-darwin* } }
+ // { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } }
+-// { dg-options "-fobjc-call-cxx-cdtors -mmacosx-version-min=10.4" }
++// { dg-additional-options "-fobjc-call-cxx-cdtors -mmacosx-version-min=10.4 -framework Foundation" }
+ // This test has no equivalent or meaning for m64/ABI V2
+ // { dg-xfail-run-if "No Test Avail" { *-*-darwin* && lp64 } { "-fnext-runtime" } { "" } }
---- a/src/gcc/tree.h
-+++ b/src/gcc/tree.h
-@@ -3746,6 +3746,7 @@
- TI_UINTDI_TYPE,
- TI_UINTTI_TYPE,
+ #include <objc/objc-runtime.h>
+ #include <stdlib.h>
++#include <Foundation/NSObject.h>
++
++//extern "C" { int printf(const char *,...); }
+ #define CHECK_IF(expr) if(!(expr)) abort()
-+ TI_UINT16_TYPE,
- TI_UINT32_TYPE,
- TI_UINT64_TYPE,
+ #ifndef CLS_HAS_CXX_STRUCTORS
+@@ -19,7 +22,7 @@
+ cxx_struct (void) { a = b = 55; }
+ };
-@@ -3901,6 +3902,7 @@
- #define unsigned_intDI_type_node global_trees[TI_UINTDI_TYPE]
- #define unsigned_intTI_type_node global_trees[TI_UINTTI_TYPE]
+-@interface Foo {
++@interface Foo: NSObject {
+ int c;
+ cxx_struct s;
+ }
+@@ -42,9 +45,11 @@
+ Class cls;
+
+ cls = objc_getClass("Foo");
+- CHECK_IF(cls->info & CLS_HAS_CXX_STRUCTORS);
++// printf((const char *)"Foo info %lx\n",cls->info);
++ CHECK_IF((cls->info & CLS_HAS_CXX_STRUCTORS) != 0);
+ cls = objc_getClass("Bar");
+- CHECK_IF(!(cls->info & CLS_HAS_CXX_STRUCTORS));
++// printf((const char *)"Bar info %lx\n",cls->info);
++ CHECK_IF((cls->info & CLS_HAS_CXX_STRUCTORS) == 0);
-+#define uint16_type_node global_trees[TI_UINT16_TYPE]
- #define uint32_type_node global_trees[TI_UINT32_TYPE]
- #define uint64_type_node global_trees[TI_UINT64_TYPE]
+ #else
+ /* No test needed or available. */
+--- a/src/gcc/testsuite/obj-c++.dg/method-12.mm
++++ b/src/gcc/testsuite/obj-c++.dg/method-12.mm
+@@ -2,6 +2,7 @@
+ /* Author: Ziemowit Laski <zlaski@apple.com> */
+ /* { dg-options "-Wstrict-selector-match" } */
+ /* { dg-do compile } */
++/* { dg-skip-if "Object interface removed" { *-*-darwin[1-2]* && { lp64 } } { "-fnext-runtime" } { "" } } */
+
+ #include <objc/Protocol.h>
+
+@@ -19,13 +20,13 @@
+ Class receiver;
+
+ [receiver port]; /* { dg-warning "multiple methods named .\\+port. found" } */
+- /* { dg-message "using .\\-\\(unsigned( int)?\\)port." "" { target *-*-* } 9 } */
+- /* { dg-message "also found .\\+\\(Protocol \\*\\)port." "" { target *-*-* } 14 } */
++ /* { dg-message "using .\\-\\(unsigned( int)?\\)port." "" { target *-*-* } 10 } */
++ /* { dg-message "also found .\\+\\(Protocol \\*\\)port." "" { target *-*-* } 15 } */
+
+ [receiver starboard]; /* { dg-warning "no .\\+starboard. method found" } */
+- /* { dg-warning "Messages without a matching method signature" "" { target *-*-* } 25 } */
+- /* { dg-warning "will be assumed to return .id. and accept" "" { target *-*-* } 25 } */
+- /* { dg-warning ".\.\.\.. as arguments" "" { target *-*-* } 25 } */
++ /* { dg-warning "Messages without a matching method signature" "" { target *-*-* } 26 } */
++ /* { dg-warning "will be assumed to return .id. and accept" "" { target *-*-* } 26 } */
++ /* { dg-warning ".\.\.\.. as arguments" "" { target *-*-* } 26 } */
+
+ [Class port]; /* { dg-error ".Class. is not an Objective\\-C class name or alias" } */
+ }
+--- a/src/gcc/testsuite/obj-c++.dg/proto-lossage-7.mm
++++ b/src/gcc/testsuite/obj-c++.dg/proto-lossage-7.mm
+@@ -1,12 +1,19 @@
+ /* Check that typedefs of ObjC classes preserve
+ any @protocol qualifiers. */
+ /* { dg-do compile } */
++
++#ifdef __NEXT_RUNTIME__
++#include <Foundation/NSObject.h>
++#define OBJECT NSObject
++#else
+ #include <objc/Object.h>
++#define OBJECT Object
++#endif
+
+ @protocol CanDoStuff;
+
+-typedef Object<CanDoStuff> CanDoStuffType;
+-typedef Object<CanDoStuff> *CanDoStuffTypePtr;
++typedef OBJECT<CanDoStuff> CanDoStuffType;
++typedef OBJECT<CanDoStuff> *CanDoStuffTypePtr;
+
+ @protocol CanDoStuff
+ - (int) dostuff;
+--- a/src/gcc/testsuite/obj-c++.dg/strings/const-cfstring-5.mm
++++ b/src/gcc/testsuite/obj-c++.dg/strings/const-cfstring-5.mm
+@@ -6,16 +6,16 @@
+ /* { dg-skip-if "NeXT only" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-options "-mconstant-cfstrings" } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+
+-@interface Foo: Object {
++@interface Foo: NSObject {
+ char *cString;
+ unsigned int len;
+ }
+ + (Foo *)description;
+ @end
+
+-@interface Bar: Object
++@interface Bar: NSObject
+ + (Foo *) getString: (int) which;
+ @end
+
+--- a/src/gcc/testsuite/obj-c++.dg/strings/const-str-12.mm
++++ b/src/gcc/testsuite/obj-c++.dg/strings/const-str-12.mm
+@@ -5,17 +5,23 @@
+ /* { dg-options "-fconstant-string-class=Foo" } */
+ /* { dg-options "-mno-constant-cfstrings -fconstant-string-class=Foo" { target *-*-darwin* } } */
+
++#ifdef __NEXT_RUNTIME__
++#include <Foundation/NSObject.h>
++#define OBJECT NSObject
++#else
+ #include <objc/Object.h>
++#define OBJECT Object
++#endif
+ #include "../../objc-obj-c++-shared/objc-test-suite-types.h"
+
+-@interface Foo: Object {
++@interface Foo: OBJECT {
+ char *cString;
+ unsigned int len;
+ }
+ + (id)description;
+ @end
+
+-@interface Bar: Object
++@interface Bar: OBJECT
+ + (Foo *) getString: (int) which;
+ @end
+
+--- a/src/gcc/testsuite/obj-c++.dg/syntax-error-1.mm
++++ b/src/gcc/testsuite/obj-c++.dg/syntax-error-1.mm
+@@ -1,7 +1,13 @@
+ /* Graceful handling of a syntax error. */
+ /* { dg-do compile } */
+
++#ifdef __NEXT_RUNTIME__
++#include <Foundation/NSObject.h>
++#define OBJECT NSObject
++#else
+ #include <objc/Object.h>
++#define OBJECT Object
++#endif
+
+ class foo {
+ public:
+@@ -12,7 +18,7 @@
+
+ extern void NXLog(const char *, ...);
+
+-@interface Test2 : Object {
++@interface Test2 : OBJECT {
+ }
+ - (void) foo2;
+ @end
+@@ -23,4 +29,4 @@
+ } /* { dg-error "stray .\}. between Objective\\-C\\+\\+ methods" } */
+ @end
+
+-/* { dg-error "expected constructor, destructor, or type conversion before" "" { target *-*-* } 22 } */
++/* { dg-error "expected constructor, destructor, or type conversion before" "" { target *-*-* } 28 } */
+--- a/src/gcc/testsuite/obj-c++.dg/torture/strings/const-str-10.mm
++++ b/src/gcc/testsuite/obj-c++.dg/torture/strings/const-str-10.mm
+@@ -6,10 +6,10 @@
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+ #include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
+
+-@interface NSString: Object
++@interface NSString: NSObject
+ @end
+
+ @interface NSSimpleCString : NSString {
+--- a/src/gcc/testsuite/obj-c++.dg/torture/strings/const-str-11.mm
++++ b/src/gcc/testsuite/obj-c++.dg/torture/strings/const-str-11.mm
+@@ -7,10 +7,10 @@
+ /* { dg-options "-fconstant-string-class=XStr" } */
+ /* { dg-options "-mno-constant-cfstrings -fconstant-string-class=XStr" { target *-*-darwin* } } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+ #include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
+
+-@interface XString: Object {
++@interface XString: NSObject {
+ @protected
+ char *bytes;
+ }
+--- a/src/gcc/testsuite/obj-c++.dg/torture/strings/const-str-9.mm
++++ b/src/gcc/testsuite/obj-c++.dg/torture/strings/const-str-9.mm
+@@ -5,10 +5,10 @@
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+ #include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
+
+-@interface NSConstantString: Object {
++@interface NSConstantString: NSObject {
+ char *cString;
+ unsigned int len;
+ }
+--- a/src/gcc/testsuite/objc.dg/encode-7-next-64bit.m
++++ b/src/gcc/testsuite/objc.dg/encode-7-next-64bit.m
+@@ -4,24 +4,25 @@
+ /* { dg-require-effective-target lp64 } */
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
++/* { dg-additional-options "-framework Foundation" } */
+
+ #include <stdbool.h>
+ #include <string.h>
+ #include <stdlib.h>
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+ #include "../objc-obj-c++-shared/runtime.h"
+
+-#define CHECK_IF(E) if (!(E)) abort ()
++extern int printf(char *,...);
++void CHECK_IF(const char *s1, const char *s2)
++{
++ if (strcmp(s1,s2) != 0) {
++ printf ("'%s'\n'%s'\n",s1,s2);
++ abort ();
++ }
++}
+
+ @class NSDictionary, NSFont, NSError, _NSATSTypesetterGuts, NSString, NSMenu, NSArray;
+
+-typedef unsigned char UInt8;
+-typedef const signed long OSStatus;
+-typedef unsigned long CFIndex;
+-typedef unsigned int UInt32;
+-typedef UInt32 FourCharCode;
+-typedef FourCharCode OSType;
+-
+ struct FSRef {
+ UInt8 hidden[80];
+ };
+@@ -99,10 +100,10 @@
+ unsigned int parameterMask;
+ } NSErrorUserInfoFormatter;
+
+-typedef Object MyObj;
+-typedef Object *MyPtr;
++typedef NSObject MyObj;
++typedef NSObject *MyPtr;
+
+-@interface Foo: Object {
++@interface Foo: NSObject {
+ NSATSGlyphStorageRun r;
+ }
+ - (NSError *)_errorWithOSStatus:(OSStatus)inOSStatus ref1:(const FSRef *)inRef1 ref2:(const struct FSRef *)inRef2
+@@ -114,7 +115,7 @@
+ - (id)str1:(const char *)str1 str2:(char *)str2 str3:(char *const)str3 str4:(const char *const)str4;
+ - (oneway void)foo1:(Foo *)foo1 foo2:(const Foo *)foo2 foo3:(Foo *const)foo3 foo4:(const Foo *const)foo4;
+ - (in const char *)sel1:(const SEL)sel1 id1:(const id)id1;
+-- (inout id)obj1:(const MyPtr)obj1 obj2:(Object *const)obj2 obj3:(MyObj *const)obj3;
++- (inout id)obj1:(const MyPtr)obj1 obj2:(NSObject *const)obj2 obj3:(MyObj *const)obj3;
+ + (ComponentInstance)_defaultScriptingComponent;
+ - (NSString *)_formatCocoaErrorString:(NSString *)formatString parameters:(const char *)parameters
+ applicableFormatters:(NSErrorUserInfoFormatter **)formatters count:(int)numFormatters;
+@@ -156,7 +157,7 @@
+ - (in const char *)sel1:(const SEL)sel1 id1:(const id)id1 {
+ return "Hello";
+ }
+-- (inout id)obj1:(const MyPtr)obj1 obj2:(Object *const)obj2 obj3:(MyObj *const)obj3 {
++- (inout id)obj1:(const MyPtr)obj1 obj2:(NSObject *const)obj2 obj3:(MyObj *const)obj3 {
+ return self;
+ }
+ + (ComponentInstance)_defaultScriptingComponent {
+@@ -191,6 +192,8 @@
+ }
+ @end
+
++/* FIXME: we produce different output c.f. the system compiler on OSX10.6+ */
++
+ int main(void) {
+ Class fooClass = objc_getClass ("Foo");
+ Method meth;
+@@ -199,72 +202,76 @@
+ Ivar ivar;
+
+ meth = class_getInstanceMethod (fooClass, @selector(_errorWithOSStatus:ref1:ref2:reading:));
+- CHECK_IF (!strcmp (method_getTypeEncoding(meth), "@44@0:8q16r^{FSRef=[80C]}24r^{FSRef=[80C]}32c40"));
++ CHECK_IF (method_getTypeEncoding(meth), "@40@0:8i16r^{FSRef=[80C]}20r^{FSRef=[80C]}28c36");
+
+ meth = class_getInstanceMethod (fooClass, @selector(_attributeRunForCharacterAtIndex:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "r^{?=@@QQ^Qffff{_NSRect={_NSPoint=ff}{_NSSize=ff}}q^qQ^Q@@@:::****{?=b1b1b1b1b1b27}}24@0:8Q16"));
++ CHECK_IF (method_getTypeEncoding (meth), "r^{?=@@qq^qffff{_NSRect={_NSPoint=ff}{_NSSize=ff}}q^qQ^Q@@@:::****{?=b1b1b1b1b1b27}}24@0:8q16");
++/* clang produces: r^{?=@@qq^qffff{_NSRect={_NSPoint=ff}{_NSSize=ff}}q^qQ^Q@@@::^{objc_selector}****{?=b1b1b1b1b1b27}}24@0:8q16 */
+
+ meth = class_getInstanceMethod (fooClass, @selector(_getATSTypesetterGuts:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "r@24@0:8r:16"));
++ CHECK_IF (method_getTypeEncoding (meth), "r@24@0:8r:16");
++/* "@24@0:8r^{objc_selector=}16" */
+
+ meth = class_getInstanceMethod (fooClass, @selector(resumeWithSuspensionID:and:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "v32@0:8^{__NSAppleEventManagerSuspension=}16r^Q24"));
++ CHECK_IF (method_getTypeEncoding (meth), "v32@0:8^{__NSAppleEventManagerSuspension=}16r^q24");
+
+ meth = class_getInstanceMethod (fooClass, @selector(anotherMeth:and:and:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "r@40@0:8r:16r@24r@32"));
++ CHECK_IF (method_getTypeEncoding (meth), "r@40@0:8r:16r@24r@32");
+
+ meth = class_getInstanceMethod (fooClass, @selector(str1:str2:str3:str4:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "@48@0:8r*16*24*32r*40"));
++ CHECK_IF (method_getTypeEncoding (meth), "@48@0:8r*16*24*32r*40");
+
+ meth = class_getInstanceMethod (fooClass, @selector(foo1:foo2:foo3:foo4:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "Vv48@0:8@16r@24@32r@40"));
++ CHECK_IF (method_getTypeEncoding (meth), "Vv48@0:8@16r@24@32r@40");
+
+ meth = class_getInstanceMethod (fooClass, @selector(sel1:id1:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "rn*32@0:8r:16r@24"));
++ CHECK_IF (method_getTypeEncoding (meth), "rn*32@0:8r:16r@24");
+
+ meth = class_getInstanceMethod (fooClass, @selector(obj1:obj2:obj3:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "N@40@0:8r@16@24^{Object=#}32"));
++ CHECK_IF (method_getTypeEncoding (meth), "N@40@0:8r@16@24^{NSObject=#}32");
+
+ meth = class_getClassMethod (fooClass, @selector(_defaultScriptingComponent));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "^{ComponentInstanceRecord=[1q]}16@0:8"));
++ CHECK_IF (method_getTypeEncoding (meth), "^{ComponentInstanceRecord=[1q]}16@0:8");
+
+ meth = class_getInstanceMethod (fooClass, @selector(_formatCocoaErrorString:parameters:applicableFormatters:count:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "@44@0:8@16r*24^^{?}32i40"));
++ CHECK_IF (method_getTypeEncoding (meth), "@44@0:8@16r*24^^{?}32i40");
+
+ meth = class_getInstanceMethod (fooClass, @selector(formatter_func:run:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "^{?=^?@I}32@0:8@16r^^{?}24"));
++ CHECK_IF (method_getTypeEncoding (meth), "^{?=^?@I}32@0:8@16r^^{?}24");
+
+ meth = class_getInstanceMethod (fooClass, @selector(_forgetWord:inDictionary:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "c32@0:8nO@16nO@24"));
++ CHECK_IF (method_getTypeEncoding (meth), "c32@0:8nO@16nO@24");
+
+ meth = class_getInstanceMethod (fooClass, @selector(_registerServicesMenu:withSendTypes:andReturnTypes:addToList:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "v44@0:8@16r^*24r^*32c40"));
++ CHECK_IF (method_getTypeEncoding (meth), "v44@0:8@16r^*24r^*32c40");
+
+ meth = class_getClassMethod (fooClass, @selector(_proxySharePointer));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "^^{__CFSet}16@0:8"));
++ CHECK_IF (method_getTypeEncoding (meth), "^^{__CFSet}16@0:8");
+
+ meth = class_getInstanceMethod (fooClass, @selector(_checkGrammarInString:language:details:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "{_NSRange=II}40@0:8n@16nO@24oO^@32"));
++ CHECK_IF (method_getTypeEncoding (meth), "{_NSRange=II}40@0:8n@16nO@24oO^@32");
+
+ meth = class_getInstanceMethod (fooClass, @selector(_resolvePositionalStakeGlyphsForLineFragment:lineFragmentRect:minPosition:maxPosition:maxLineFragmentWidth:breakHint:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "B60@0:8^{__CTLine=}16{_NSRect={_NSPoint=ff}{_NSSize=ff}}24f40f44f48^Q52"));
++ CHECK_IF (method_getTypeEncoding (meth), "B60@0:8^{__CTLine=}16{_NSRect={_NSPoint=ff}{_NSSize=ff}}24f40f44f48^q52");
+
+ meth = class_getClassMethod (fooClass, @selector(findVoiceByIdentifier:returningCreator:returningID:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "c40@0:8@16^I24^I32"));
++ CHECK_IF (method_getTypeEncoding (meth), "c40@0:8@16^I24^I32");
+
+ ivars = class_copyIvarList (fooClass, &ivar_count);
+- CHECK_IF (ivar_count == 1);
++ if (ivar_count != 1) {
++ abort ();
++ }
+
+ ivar = ivars[0];
+- CHECK_IF (!strcmp (ivar_getName(ivar), "r"));
+- CHECK_IF (!strcmp (ivar_getTypeEncoding(ivar),
++ CHECK_IF (ivar_getName(ivar), "r");
++ CHECK_IF (ivar_getTypeEncoding(ivar),
+ "{?=\"_attributes\"@\"NSDictionary\"\"_font\"@\"NSFont\"\"_characterLength\""
+- "Q\"_nominalGlyphLocation\"Q\"p\"^Q\"_defaultLineHeight\"f\"_defaultBaselineOffset\""
++ "q\"_nominalGlyphLocation\"q\"p\"^q\"_defaultLineHeight\"f\"_defaultBaselineOffset\""
+ "f\"_horizExpansion\"f\"_baselineDelta\"f\"_attachmentBBox\"{_NSRect=\"origin\""
+ "{_NSPoint=\"x\"f\"y\"f}\"size\"{_NSSize=\"width\"f\"height\"f}}\"ll\"q\"llp\"^q\"ull\""
+ "Q\"ullp\"^Q\"a\"@\"a1\"@\"a2\"@\"b\":\"b1\":\"b2\":\"str1\"*\"str2\"*\"str3\"*\"str4\""
+ "*\"_rFlags\"{?=\"_isAttachmentRun\"b1\"_hasPositionalStake\"b1\"_isDefaultFace\""
+- "b1\"_hasCombiningMarks\"b1\"_isScreenFont\"b1\"_reserved\"b27}}"));
+-
++ "b1\"_hasCombiningMarks\"b1\"_isScreenFont\"b1\"_reserved\"b27}}");
++/*"{?=\"_attributes\"@\"NSDictionary\"\"_font\"@\"NSFont\"\"_characterLength\"q\"_nominalGlyphLocation\"q\"p\"^q\"_defaultLineHeight\"f\"_defaultBaselineOffset\"f\"_horizExpansion\"f\"_baselineDelta\"f\"_attachmentBBox\"{_NSRect=\"origin\"{_NSPoint=\"x\"f\"y\"f}\"size\"{_NSSize=\"width\"f\"height\"f}}\"ll\"q\"llp\"^q\"ull\"Q\"ullp\"^Q\"a\"@\"a1\"@\"a2\"@\"b\":\"b1\":\"b2\"^{objc_selector}\"str1\"*\"str2\"*\"str3\"*\"str4\"*\"_rFlags\"{?=\"_isAttachmentRun\"b1\"_hasPositionalStake\"b1\"_isDefaultFace\"b1\"_hasCombiningMarks\"b1\"_isScreenFont\"b1\"_reserved\"b27}}"*/
+ return 0;
+ }
+--- a/src/gcc/testsuite/objc.dg/image-info.m
++++ b/src/gcc/testsuite/objc.dg/image-info.m
+@@ -7,20 +7,19 @@
+ /* { dg-skip-if "NeXT-only" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-options "-freplace-objc-classes" } */
+
+-#include <objc/objc.h>
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+
+ extern void abort(void);
+ #define CHECK_IF(expr) if(!(expr)) abort();
+
+-@interface Object (TEST_SUITE_C1)
++@interface NSObject (TEST_SUITE_C1)
+ - init;
+ @end
+-@implementation Object (TEST_SUITE_C1)
++@implementation NSObject (TEST_SUITE_C1)
+ - init {return self;}
+ @end
+
+-@interface Base: Object {
++@interface Base: NSObject {
+ @public
+ int a;
+ float b;
+--- a/src/gcc/testsuite/objc.dg/method-6.m
++++ b/src/gcc/testsuite/objc.dg/method-6.m
+@@ -4,14 +4,21 @@
+ /* { dg-do compile } */
+ /* { dg-options "-Wstrict-selector-match" } */
+
++#ifdef __NEXT_RUNTIME__
++#include <Foundation/NSObject.h>
++#define OBJECT NSObject
++#else
++#include <objc/Object.h>
+ #include <objc/Protocol.h>
++#define OBJECT Object
++#endif
+ @interface Base
+ - (unsigned)port;
+ @end
+
+ @interface Derived: Base
+-- (Object *)port;
++- (OBJECT *)port;
+ + (Protocol *)port;
+ - (id)starboard;
+ @end
+@@ -20,13 +27,13 @@
+ Class receiver;
+
+ [receiver port]; /* { dg-warning "multiple methods named .\\+port. found" } */
+- /* { dg-message "using .\\-\\(unsigned( int)?\\)port." "" { target *-*-* } 10 } */
+- /* { dg-message "also found .\\+\\(Protocol \\*\\)port." "" { target *-*-* } 15 } */
++ /* { dg-message "using .\\-\\(unsigned( int)?\\)port." "" { target *-*-* } 17 } */
++ /* { dg-message "also found .\\+\\(Protocol \\*\\)port." "" { target *-*-* } 22 } */
+
+ [receiver starboard]; /* { dg-warning "no .\\+starboard. method found" } */
+- /* { dg-warning "Messages without a matching method signature" "" { target *-*-* } 26 } */
+- /* { dg-warning "will be assumed to return .id. and accept" "" { target *-*-* } 26 } */
+- /* { dg-warning ".\.\.\.. as arguments" "" { target *-*-* } 26 } */
++ /* { dg-warning "Messages without a matching method signature" "" { target *-*-* } 33 } */
++ /* { dg-warning "will be assumed to return .id. and accept" "" { target *-*-* } 33 } */
++ /* { dg-warning ".\.\.\.. as arguments" "" { target *-*-* } 33 } */
+
+ [Class port]; /* { dg-error ".Class. is not an Objective\\-C class name or alias" } */
+ }
+--- a/src/gcc/testsuite/objc.dg/no-extra-load.m
++++ b/src/gcc/testsuite/objc.dg/no-extra-load.m
+@@ -1,7 +1,7 @@
+ /* { dg-do compile { target *-*-darwin* } } */
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+
+-#import <Foundation/Foundation.h>
++#include <Foundation/NSObject.h>
+ main() { [NSObject new]; }
+
+ /* { dg-final { scan-assembler-not "L_objc_msgSend\\\$non_lazy_ptr" } } */
+--- a/src/gcc/testsuite/objc.dg/objc-foreach-4.m
++++ b/src/gcc/testsuite/objc.dg/objc-foreach-4.m
+@@ -1,17 +1,13 @@
+ /* Test for valid objc objects used in a for-each statement. */
+ /* FIXME: Run this test with the GNU runtime as well. */
+-/* { dg-do compile { target *-*-darwin* } } */
++/* { dg-do run { target *-*-darwin* } } */
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-skip-if "No NeXT fast enum. pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */
++/* { dg-additional-options "-framework Foundation" { target { *-*-darwin* } } } */
+
+-#include <objc/objc-api.h>
+-#include <Foundation/Foundation.h>
+-
+-#if defined (__NEXT_RUNTIME__) && defined (__LP64__)
+-/* Fudge the class reference until we implement the compiler-side
+- const strings. */
+-extern void *_NSConstantStringClassReference;
+-#endif
++#include <Foundation/NSString.h>
++#include <Foundation/NSAutoreleasePool.h>
++#include <Foundation/NSArray.h>
+
+ // gcc -o foo foo.m -framework Foundation
+
+--- a/src/gcc/testsuite/objc.dg/objc-foreach-5.m
++++ b/src/gcc/testsuite/objc.dg/objc-foreach-5.m
+@@ -2,8 +2,10 @@
+ /* { dg-do compile { target *-*-darwin* } } */
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-skip-if "No NeXT fast enum. pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */
++/* { dg-additional-options "-framework Foundation" { target { *-*-darwin* } } } */
+
+-#import <Foundation/Foundation.h>
++#include <Foundation/NSArray.h>
++#include <Foundation/NSAutoreleasePool.h>
+
+ NSArray * createTestVictim(unsigned capacity) {
+ NSMutableArray * arr = [[NSMutableArray alloc] initWithCapacity:capacity];
+--- a/src/gcc/testsuite/objc.dg/pr23214.m
++++ b/src/gcc/testsuite/objc.dg/pr23214.m
+@@ -3,14 +3,24 @@
+
+ /* { dg-do run } */
+ /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
++/* { dg-additional-options "-framework Foundation" { target { { *-*-darwin* } && objc2 } } } */
+
++#if defined (__NEXT_RUNTIME__) && defined(__OBJC2__) \
++ && defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) \
++ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1070
+ #include <objc/Protocol.h>
+-
+-@interface Object (TS_CAT)
++#define OBJECT NSObject
++#else
++#include <objc/Object.h>
++#define OBJECT Object
++#include <objc/Protocol.h>
++#endif
++
++@interface OBJECT (TS_CAT)
+ - test;
+ @end
+
+-@implementation Object (TS_CAT)
++@implementation OBJECT (TS_CAT)
+ - test { return self; }
+ @end
+
+@@ -20,7 +30,7 @@
+ @protocol B
+ @end
+
+-@interface Dummy : Object <B>
++@interface Dummy : OBJECT <B>
+ @end
+
+ int main ()
+--- a/src/gcc/testsuite/objc.dg/proto-lossage-7.m
++++ b/src/gcc/testsuite/objc.dg/proto-lossage-7.m
+@@ -1,12 +1,19 @@
+ /* Check that typedefs of ObjC classes preserve
+ any @protocol qualifiers. */
+ /* { dg-do compile } */
++
++#ifdef __NEXT_RUNTIME__
++#include <Foundation/NSObject.h>
++#define OBJECT NSObject
++#else
+ #include <objc/Object.h>
++#define OBJECT Object
++#endif
+
+ @protocol CanDoStuff;
+
+-typedef Object<CanDoStuff> CanDoStuffType;
+-typedef Object<CanDoStuff> *CanDoStuffTypePtr;
++typedef OBJECT<CanDoStuff> CanDoStuffType;
++typedef OBJECT<CanDoStuff> *CanDoStuffTypePtr;
+
+ @protocol CanDoStuff
+ - (int) dostuff;
+--- a/src/gcc/testsuite/objc.dg/strings/const-cfstring-5.m
++++ b/src/gcc/testsuite/objc.dg/strings/const-cfstring-5.m
+@@ -6,16 +6,16 @@
+ /* { dg-skip-if "NeXT only" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-options "-mconstant-cfstrings" } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+
+-@interface Foo: Object {
++@interface Foo: NSObject {
+ char *cString;
+ unsigned int len;
+ }
+ + (Foo *)description;
+ @end
+
+-@interface Bar: Object
++@interface Bar: NSObject
+ + (Foo *) getString: (int) which;
+ @end
+
+--- a/src/gcc/testsuite/objc.dg/strings/const-str-12b.m
++++ b/src/gcc/testsuite/objc.dg/strings/const-str-12b.m
+@@ -5,17 +5,23 @@
+ /* { dg-options "-fconstant-string-class=Foo" } */
+ /* { dg-options "-mno-constant-cfstrings -fconstant-string-class=Foo" { target *-*-darwin* } } */
+
++#ifdef __NEXT_RUNTIME__
++#include <Foundation/NSObject.h>
++#define OBJECT NSObject
++#else
+ #include <objc/Object.h>
++#define OBJECT Object
++#endif
+ #include "../../objc-obj-c++-shared/objc-test-suite-types.h"
+
+-@interface Foo: Object {
++@interface Foo: OBJECT {
+ char *cString;
+ unsigned int len;
+ }
+ + (id)description;
+ @end
+
+-@interface Bar: Object
++@interface Bar: OBJECT
+ + (Foo *) getString: (int) which;
+ @end
+
+--- a/src/gcc/testsuite/objc.dg/symtab-1.m
++++ b/src/gcc/testsuite/objc.dg/symtab-1.m
+@@ -4,9 +4,9 @@
+ /* { dg-do compile { target { *-*-darwin* } } } */
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+
+-@interface Base: Object
++@interface Base: NSObject
+ - (void)setValues;
+ @end
+
+--- a/src/gcc/testsuite/objc.dg/torture/strings/const-str-10.m
++++ b/src/gcc/testsuite/objc.dg/torture/strings/const-str-10.m
+@@ -6,10 +6,10 @@
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+ #include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
+
+-@interface NSString: Object
++@interface NSString: NSObject
+ @end
+
+ @interface NSSimpleCString : NSString {
+--- a/src/gcc/testsuite/objc.dg/torture/strings/const-str-11.m
++++ b/src/gcc/testsuite/objc.dg/torture/strings/const-str-11.m
+@@ -7,10 +7,10 @@
+ /* { dg-options "-fconstant-string-class=XStr" } */
+ /* { dg-options "-mno-constant-cfstrings -fconstant-string-class=XStr" { target *-*-darwin* } } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+ #include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
+
+-@interface XString: Object {
++@interface XString: NSObject {
+ @protected
+ char *bytes;
+ }
+--- a/src/gcc/testsuite/objc.dg/torture/strings/const-str-9.m
++++ b/src/gcc/testsuite/objc.dg/torture/strings/const-str-9.m
+@@ -5,10 +5,10 @@
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+ #include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
+
+-@interface NSConstantString: Object {
++@interface NSConstantString: NSObject {
+ char *cString;
+ unsigned int len;
+ }
+--- a/src/gcc/testsuite/objc.dg/zero-link-1.m
++++ b/src/gcc/testsuite/objc.dg/zero-link-1.m
+@@ -5,13 +5,12 @@
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-options "-fzero-link" } */
+
+-#include <objc/Object.h>
+-#include <objc/objc.h>
++#include <Foundation/NSObject.h>
+
+ extern void abort(void);
+ #define CHECK_IF(expr) if(!(expr)) abort();
+
+-@interface Base: Object
++@interface Base: NSObject
+ + (int) getValue;
+ @end
+
+--- a/src/gcc/testsuite/objc.dg/zero-link-2.m
++++ b/src/gcc/testsuite/objc.dg/zero-link-2.m
+@@ -5,12 +5,12 @@
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-options "-fno-zero-link" } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+
+ extern void abort(void);
+ #define CHECK_IF(expr) if(!(expr)) abort();
+
+-@interface Base: Object
++@interface Base: NSObject
+ + (int) getValue;
+ @end
+
+--- a/src/gcc/testsuite/objc.dg/zero-link-3.m
++++ b/src/gcc/testsuite/objc.dg/zero-link-3.m
+@@ -2,15 +2,23 @@
+ /* Contributed by Ziemowit Laski <zlaski@apple.com>. */
+
+ /* { dg-do run { target *-*-darwin* } } */
+-/* { dg-options "-fzero-link" } */
++/* { dg-additional-options "-fzero-link" } */
++/* { dg-additional-options "-framework Foundation" { target { *-*-darwin* } } } */
+ /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
+
++#ifdef __NEXT_RUNTIME__
++#include <Foundation/NSObject.h>
++#define OBJECT NSObject
++#else
+ #include <objc/Object.h>
++#include <objc/Protocol.h>
++#define OBJECT Object
++#endif
+
+ extern void abort(void);
+ #define CHECK_IF(expr) if(!(expr)) abort();
+
+-@interface Base: Object
++@interface Base: OBJECT
+ + (int) getValue;
+ @end
+
+--- a/src/gcc/tlink.c
++++ b/src/gcc/tlink.c
+@@ -2,7 +2,7 @@
+ them.
+
+ Copyright (C) 1995, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2007, 2008,
+- 2009, 2010, 2011 Free Software Foundation, Inc.
++ 2009, 2010, 2011, 2013 Free Software Foundation, Inc.
+ Contributed by Jason Merrill (jason@cygnus.com).
+
+ This file is part of GCC.
+@@ -820,18 +820,18 @@
+ void
+ do_tlink (char **ld_argv, char **object_lst ATTRIBUTE_UNUSED)
+ {
+- int exit = tlink_execute ("ld", ld_argv, ldout, lderrout);
++ int ret = tlink_execute ("ld", ld_argv, ldout, lderrout);
+
+ tlink_init ();
+
+- if (exit)
++ if (ret)
+ {
+ int i = 0;
+
+ /* Until collect does a better job of figuring out which are object
+ files, assume that everything on the command line could be. */
+ if (read_repo_files (ld_argv))
+- while (exit && i++ < MAX_ITERATIONS)
++ while (ret && i++ < MAX_ITERATIONS)
+ {
+ if (tlink_verbose >= 3)
+ {
+@@ -846,7 +846,7 @@
+ break;
+ if (tlink_verbose)
+ fprintf (stderr, _("collect: relinking\n"));
+- exit = tlink_execute ("ld", ld_argv, ldout, lderrout);
++ ret = tlink_execute ("ld", ld_argv, ldout, lderrout);
+ }
+ }
+
+@@ -854,9 +854,9 @@
+ unlink (ldout);
+ dump_file (lderrout, stderr);
+ unlink (lderrout);
+- if (exit)
++ if (ret)
+ {
+- error ("ld returned %d exit status", exit);
+- collect_exit (exit);
++ error ("ld returned %d exit status", ret);
++ exit (ret);
+ }
+ }
--- a/src/gcc/tree-ssa-ccp.c
+++ b/src/gcc/tree-ssa-ccp.c
-@@ -2342,6 +2342,72 @@
+@@ -1744,6 +1744,9 @@
+ insert_clobber_before_stack_restore (gimple_phi_result (stmt), var,
+ visited);
+ }
++ else if (gimple_assign_ssa_name_copy_p (stmt))
++ insert_clobber_before_stack_restore (gimple_assign_lhs (stmt), var,
++ visited);
+ else
+ gcc_assert (is_gimple_debug (stmt));
+ }
+@@ -2342,6 +2345,72 @@
}
}
@@ -76978,7 +82502,7 @@
/* A simple pass that attempts to fold all builtin functions. This pass
is run after we've propagated as many constants as we can. */
-@@ -2403,6 +2469,11 @@
+@@ -2403,6 +2472,11 @@
gsi_next (&i);
continue;
@@ -76990,7 +82514,7 @@
case BUILT_IN_VA_START:
case BUILT_IN_VA_END:
case BUILT_IN_VA_COPY:
-@@ -2417,6 +2488,9 @@
+@@ -2417,6 +2491,9 @@
continue;
}
@@ -77252,6 +82776,52 @@
/* This has to happen before SCCVN runs because
loop_optimizer_init may create new phis, etc. */
+--- a/src/gcc/tree-streamer-in.c
++++ b/src/gcc/tree-streamer-in.c
+@@ -172,12 +172,11 @@
+ static void
+ unpack_ts_fixed_cst_value_fields (struct bitpack_d *bp, tree expr)
+ {
+- struct fixed_value fv;
+-
+- fv.mode = bp_unpack_enum (bp, machine_mode, MAX_MACHINE_MODE);
+- fv.data.low = bp_unpack_var_len_int (bp);
+- fv.data.high = bp_unpack_var_len_int (bp);
+- TREE_FIXED_CST (expr) = fv;
++ FIXED_VALUE_TYPE *fp = ggc_alloc_fixed_value ();
++ fp->mode = bp_unpack_enum (bp, machine_mode, MAX_MACHINE_MODE);
++ fp->data.low = bp_unpack_var_len_int (bp);
++ fp->data.high = bp_unpack_var_len_int (bp);
++ TREE_FIXED_CST_PTR (expr) = fp;
+ }
+
+
+--- a/src/gcc/tree-tailcall.c
++++ b/src/gcc/tree-tailcall.c
+@@ -329,8 +329,10 @@
+ case NEGATE_EXPR:
+ if (FLOAT_TYPE_P (TREE_TYPE (op0)))
+ *m = build_real (TREE_TYPE (op0), dconstm1);
+- else
++ else if (INTEGRAL_TYPE_P (TREE_TYPE (op0)))
+ *m = build_int_cst (TREE_TYPE (op0), -1);
++ else
++ return false;
+
+ *ass_var = dest;
+ return true;
+@@ -342,8 +344,10 @@
+ {
+ if (FLOAT_TYPE_P (TREE_TYPE (non_ass_var)))
+ *m = build_real (TREE_TYPE (non_ass_var), dconstm1);
+- else
++ else if (INTEGRAL_TYPE_P (TREE_TYPE (non_ass_var)))
+ *m = build_int_cst (TREE_TYPE (non_ass_var), -1);
++ else
++ return false;
+
+ *a = fold_build1 (NEGATE_EXPR, TREE_TYPE (non_ass_var), non_ass_var);
+ }
--- a/src/gcc/tree-vect-data-refs.c
+++ b/src/gcc/tree-vect-data-refs.c
@@ -111,6 +111,7 @@
@@ -77338,17 +82908,6 @@
/* Data-flow analysis to detect stmts that do not need to be vectorized. */
---- a/src/gcc/tree-vectorizer.h
-+++ b/src/gcc/tree-vectorizer.h
-@@ -941,7 +941,7 @@
- in the future. */
- typedef gimple (* vect_recog_func_ptr) (VEC (gimple, heap) **, tree *, tree *);
- #define NUM_PATTERNS 10
--void vect_pattern_recog (loop_vec_info);
-+void vect_pattern_recog (loop_vec_info, bb_vec_info);
-
- /* In tree-vectorizer.c. */
- unsigned vectorize_loops (void);
--- a/src/gcc/tree-vect-patterns.c
+++ b/src/gcc/tree-vect-patterns.c
@@ -84,15 +84,47 @@
@@ -78136,146 +83695,45 @@
&def, &dt[1]);
if (!ok)
---- a/src/INSTALL/binaries.html
-+++ b/src/INSTALL/binaries.html
-@@ -3,7 +3,7 @@
- <title>Installing GCC: Binaries</title>
- <meta http-equiv="Content-Type" content="text/html">
- <meta name="description" content="Installing GCC: Binaries">
--<meta name="generator" content="makeinfo 4.12">
-+<meta name="generator" content="makeinfo 4.13">
- <link title="Top" rel="top" href="#Top">
- <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
- <!--
---- a/src/INSTALL/build.html
-+++ b/src/INSTALL/build.html
-@@ -3,7 +3,7 @@
- <title>Installing GCC: Building</title>
- <meta http-equiv="Content-Type" content="text/html">
- <meta name="description" content="Installing GCC: Building">
--<meta name="generator" content="makeinfo 4.12">
-+<meta name="generator" content="makeinfo 4.13">
- <link title="Top" rel="top" href="#Top">
- <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
- <!--
---- a/src/INSTALL/configure.html
-+++ b/src/INSTALL/configure.html
-@@ -3,7 +3,7 @@
- <title>Installing GCC: Configuration</title>
- <meta http-equiv="Content-Type" content="text/html">
- <meta name="description" content="Installing GCC: Configuration">
--<meta name="generator" content="makeinfo 4.12">
-+<meta name="generator" content="makeinfo 4.13">
- <link title="Top" rel="top" href="#Top">
- <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
- <!--
-@@ -446,6 +446,14 @@
- conventions, etc. should not be built. The default is to build a
- predefined set of them.
-
-+ <br><dt><code>--enable-multiarch</code><dd>Specify whether to enable or disable multiarch support. The default is
-+to check for glibc start files in a multiarch location, and enable it
-+if the files are found. The auto detection is enabled for native builds,
-+and for cross builds configured with <samp><span class="option">--with-sysroot</span></samp>, and without
-+<samp><span class="option">--with-native-system-header-dir</span></samp>.
-+More documentation about multiarch can be found at
-+<a href="http://wiki.debian.org/Multiarch">http://wiki.debian.org/Multiarch</a>.
-+
- <p>Some targets provide finer-grained control over which multilibs are built
- (e.g., <samp><span class="option">--disable-softfloat</span></samp>):
- <dl>
---- a/src/INSTALL/download.html
-+++ b/src/INSTALL/download.html
-@@ -3,7 +3,7 @@
- <title>Downloading GCC</title>
- <meta http-equiv="Content-Type" content="text/html">
- <meta name="description" content="Downloading GCC">
--<meta name="generator" content="makeinfo 4.12">
-+<meta name="generator" content="makeinfo 4.13">
- <link title="Top" rel="top" href="#Top">
- <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
- <!--
---- a/src/INSTALL/finalinstall.html
-+++ b/src/INSTALL/finalinstall.html
-@@ -3,7 +3,7 @@
- <title>Installing GCC: Final installation</title>
- <meta http-equiv="Content-Type" content="text/html">
- <meta name="description" content="Installing GCC: Final installation">
--<meta name="generator" content="makeinfo 4.12">
-+<meta name="generator" content="makeinfo 4.13">
- <link title="Top" rel="top" href="#Top">
- <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
- <!--
---- a/src/INSTALL/gfdl.html
-+++ b/src/INSTALL/gfdl.html
-@@ -3,7 +3,7 @@
- <title>Installing GCC: GNU Free Documentation License</title>
- <meta http-equiv="Content-Type" content="text/html">
- <meta name="description" content="Installing GCC: GNU Free Documentation License">
--<meta name="generator" content="makeinfo 4.12">
-+<meta name="generator" content="makeinfo 4.13">
- <link title="Top" rel="top" href="#Top">
- <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
- <!--
---- a/src/INSTALL/index.html
-+++ b/src/INSTALL/index.html
-@@ -3,7 +3,7 @@
- <title>Installing GCC</title>
- <meta http-equiv="Content-Type" content="text/html">
- <meta name="description" content="Installing GCC">
--<meta name="generator" content="makeinfo 4.12">
-+<meta name="generator" content="makeinfo 4.13">
- <link title="Top" rel="top" href="#Top">
- <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
- <!--
---- a/src/INSTALL/old.html
-+++ b/src/INSTALL/old.html
-@@ -3,7 +3,7 @@
- <title>Installing GCC: Old documentation</title>
- <meta http-equiv="Content-Type" content="text/html">
- <meta name="description" content="Installing GCC: Old documentation">
--<meta name="generator" content="makeinfo 4.12">
-+<meta name="generator" content="makeinfo 4.13">
- <link title="Top" rel="top" href="#Top">
- <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
- <!--
---- a/src/INSTALL/prerequisites.html
-+++ b/src/INSTALL/prerequisites.html
-@@ -3,7 +3,7 @@
- <title>Prerequisites for GCC</title>
- <meta http-equiv="Content-Type" content="text/html">
- <meta name="description" content="Prerequisites for GCC">
--<meta name="generator" content="makeinfo 4.12">
-+<meta name="generator" content="makeinfo 4.13">
- <link title="Top" rel="top" href="#Top">
- <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
- <!--
---- a/src/INSTALL/specific.html
-+++ b/src/INSTALL/specific.html
-@@ -3,7 +3,7 @@
- <title>Host/Target specific installation notes for GCC</title>
- <meta http-equiv="Content-Type" content="text/html">
- <meta name="description" content="Host/Target specific installation notes for GCC">
--<meta name="generator" content="makeinfo 4.12">
-+<meta name="generator" content="makeinfo 4.13">
- <link title="Top" rel="top" href="#Top">
- <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
- <!--
---- a/src/INSTALL/test.html
-+++ b/src/INSTALL/test.html
-@@ -3,7 +3,7 @@
- <title>Installing GCC: Testing</title>
- <meta http-equiv="Content-Type" content="text/html">
- <meta name="description" content="Installing GCC: Testing">
--<meta name="generator" content="makeinfo 4.12">
-+<meta name="generator" content="makeinfo 4.13">
- <link title="Top" rel="top" href="#Top">
- <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
- <!--
---- a/src/LAST_UPDATED
-+++ b/src/LAST_UPDATED
-@@ -1 +0,0 @@
--Obtained from SVN: tags/gcc_4_7_3_release revision 197739
+--- a/src/gcc/tree-vectorizer.h
++++ b/src/gcc/tree-vectorizer.h
+@@ -941,7 +941,7 @@
+ in the future. */
+ typedef gimple (* vect_recog_func_ptr) (VEC (gimple, heap) **, tree *, tree *);
+ #define NUM_PATTERNS 10
+-void vect_pattern_recog (loop_vec_info);
++void vect_pattern_recog (loop_vec_info, bb_vec_info);
+
+ /* In tree-vectorizer.c. */
+ unsigned vectorize_loops (void);
+--- a/src/gcc/tree.c
++++ b/src/gcc/tree.c
+@@ -9358,6 +9358,7 @@
+ integer_ptr_type_node = build_pointer_type (integer_type_node);
+
+ /* Fixed size integer types. */
++ uint16_type_node = build_nonstandard_integer_type (16, true);
+ uint32_type_node = build_nonstandard_integer_type (32, true);
+ uint64_type_node = build_nonstandard_integer_type (64, true);
+
+--- a/src/gcc/tree.h
++++ b/src/gcc/tree.h
+@@ -3746,6 +3746,7 @@
+ TI_UINTDI_TYPE,
+ TI_UINTTI_TYPE,
+
++ TI_UINT16_TYPE,
+ TI_UINT32_TYPE,
+ TI_UINT64_TYPE,
+
+@@ -3901,6 +3902,7 @@
+ #define unsigned_intDI_type_node global_trees[TI_UINTDI_TYPE]
+ #define unsigned_intTI_type_node global_trees[TI_UINTTI_TYPE]
+
++#define uint16_type_node global_trees[TI_UINT16_TYPE]
+ #define uint32_type_node global_trees[TI_UINT32_TYPE]
+ #define uint64_type_node global_trees[TI_UINT64_TYPE]
+
--- a/src/libcpp/ChangeLog.aarch64
+++ b/src/libcpp/ChangeLog.aarch64
@@ -0,0 +1,13 @@
@@ -78384,29 +83842,79 @@
#else
/* We only have one accellerated alternative. Use a direct call so that
-Binary files gcc-4.7.3/libcpp/po/be.gmo and gcc-linaro-4.7-2013.05/libcpp/po/be.gmo differ
-Binary files gcc-4.7.3/libcpp/po/ca.gmo and gcc-linaro-4.7-2013.05/libcpp/po/ca.gmo differ
-Binary files gcc-4.7.3/libcpp/po/da.gmo and gcc-linaro-4.7-2013.05/libcpp/po/da.gmo differ
-Binary files gcc-4.7.3/libcpp/po/de.gmo and gcc-linaro-4.7-2013.05/libcpp/po/de.gmo differ
-Binary files gcc-4.7.3/libcpp/po/el.gmo and gcc-linaro-4.7-2013.05/libcpp/po/el.gmo differ
-Binary files gcc-4.7.3/libcpp/po/eo.gmo and gcc-linaro-4.7-2013.05/libcpp/po/eo.gmo differ
-Binary files gcc-4.7.3/libcpp/po/es.gmo and gcc-linaro-4.7-2013.05/libcpp/po/es.gmo differ
-Binary files gcc-4.7.3/libcpp/po/fi.gmo and gcc-linaro-4.7-2013.05/libcpp/po/fi.gmo differ
-Binary files gcc-4.7.3/libcpp/po/fr.gmo and gcc-linaro-4.7-2013.05/libcpp/po/fr.gmo differ
-Binary files gcc-4.7.3/libcpp/po/id.gmo and gcc-linaro-4.7-2013.05/libcpp/po/id.gmo differ
-Binary files gcc-4.7.3/libcpp/po/ja.gmo and gcc-linaro-4.7-2013.05/libcpp/po/ja.gmo differ
-Binary files gcc-4.7.3/libcpp/po/nl.gmo and gcc-linaro-4.7-2013.05/libcpp/po/nl.gmo differ
-Binary files gcc-4.7.3/libcpp/po/ru.gmo and gcc-linaro-4.7-2013.05/libcpp/po/ru.gmo differ
-Binary files gcc-4.7.3/libcpp/po/sr.gmo and gcc-linaro-4.7-2013.05/libcpp/po/sr.gmo differ
-Binary files gcc-4.7.3/libcpp/po/sv.gmo and gcc-linaro-4.7-2013.05/libcpp/po/sv.gmo differ
-Binary files gcc-4.7.3/libcpp/po/tr.gmo and gcc-linaro-4.7-2013.05/libcpp/po/tr.gmo differ
-Binary files gcc-4.7.3/libcpp/po/uk.gmo and gcc-linaro-4.7-2013.05/libcpp/po/uk.gmo differ
-Binary files gcc-4.7.3/libcpp/po/vi.gmo and gcc-linaro-4.7-2013.05/libcpp/po/vi.gmo differ
-Binary files gcc-4.7.3/libcpp/po/zh_CN.gmo and gcc-linaro-4.7-2013.05/libcpp/po/zh_CN.gmo differ
-Binary files gcc-4.7.3/libcpp/po/zh_TW.gmo and gcc-linaro-4.7-2013.05/libcpp/po/zh_TW.gmo differ
+Binary files gcc-4.7.3/libcpp/po/be.gmo and gcc-linaro-4.7-2014.01/libcpp/po/be.gmo differ
+Binary files gcc-4.7.3/libcpp/po/ca.gmo and gcc-linaro-4.7-2014.01/libcpp/po/ca.gmo differ
+Binary files gcc-4.7.3/libcpp/po/da.gmo and gcc-linaro-4.7-2014.01/libcpp/po/da.gmo differ
+Binary files gcc-4.7.3/libcpp/po/de.gmo and gcc-linaro-4.7-2014.01/libcpp/po/de.gmo differ
+Binary files gcc-4.7.3/libcpp/po/el.gmo and gcc-linaro-4.7-2014.01/libcpp/po/el.gmo differ
+Binary files gcc-4.7.3/libcpp/po/eo.gmo and gcc-linaro-4.7-2014.01/libcpp/po/eo.gmo differ
+Binary files gcc-4.7.3/libcpp/po/es.gmo and gcc-linaro-4.7-2014.01/libcpp/po/es.gmo differ
+Binary files gcc-4.7.3/libcpp/po/fi.gmo and gcc-linaro-4.7-2014.01/libcpp/po/fi.gmo differ
+Binary files gcc-4.7.3/libcpp/po/fr.gmo and gcc-linaro-4.7-2014.01/libcpp/po/fr.gmo differ
+Binary files gcc-4.7.3/libcpp/po/id.gmo and gcc-linaro-4.7-2014.01/libcpp/po/id.gmo differ
+Binary files gcc-4.7.3/libcpp/po/ja.gmo and gcc-linaro-4.7-2014.01/libcpp/po/ja.gmo differ
+Binary files gcc-4.7.3/libcpp/po/nl.gmo and gcc-linaro-4.7-2014.01/libcpp/po/nl.gmo differ
+Binary files gcc-4.7.3/libcpp/po/ru.gmo and gcc-linaro-4.7-2014.01/libcpp/po/ru.gmo differ
+Binary files gcc-4.7.3/libcpp/po/sr.gmo and gcc-linaro-4.7-2014.01/libcpp/po/sr.gmo differ
+Binary files gcc-4.7.3/libcpp/po/sv.gmo and gcc-linaro-4.7-2014.01/libcpp/po/sv.gmo differ
+Binary files gcc-4.7.3/libcpp/po/tr.gmo and gcc-linaro-4.7-2014.01/libcpp/po/tr.gmo differ
+Binary files gcc-4.7.3/libcpp/po/uk.gmo and gcc-linaro-4.7-2014.01/libcpp/po/uk.gmo differ
+Binary files gcc-4.7.3/libcpp/po/vi.gmo and gcc-linaro-4.7-2014.01/libcpp/po/vi.gmo differ
+Binary files gcc-4.7.3/libcpp/po/zh_CN.gmo and gcc-linaro-4.7-2014.01/libcpp/po/zh_CN.gmo differ
+Binary files gcc-4.7.3/libcpp/po/zh_TW.gmo and gcc-linaro-4.7-2014.01/libcpp/po/zh_TW.gmo differ
--- a/src/libgcc/ChangeLog
+++ b/src/libgcc/ChangeLog
-@@ -1,3 +1,10 @@
+@@ -1,3 +1,60 @@
++2014-01-03 Joseph Myers <joseph@codesourcery.com>
++
++ * config/rs6000/ibm-ldouble.c (__gcc_qdiv): Scale up arguments in
++ case of small numerator and finite nonzero result.
++
++2013-11-10 Kai Tietz <ktietz@redhat.com>
++
++ Back-merged from trunk
++ * config/i386/cygming-crtbegin.c (__gcc_register_frame):
++ Increment load-count on use of LIBGCC_SONAME DLL.
++ (hmod_libgcc): New static variable to hold handle of
++ LIBGCC_SONAME DLL.
++ (__gcc_deregister_frame): Decrement load-count of
++ LIBGCC_SONAME DLL.
++
++2013-11-07 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/32/sfp-machine.c (FP_HANDLE_EXCEPTIONS): Handle
++ FP_EX_DENORM.
++ * config/i386/64/sfp-machine.c (FP_HANDLE_EXCEPTIONS): Ditto.
++
++2013-08-01 Maxim Kuvyrkov <maxim@kugelworks.com>
++
++ Backport from trunk: Fix licenses on several libgcc files.
++
++ * config/ia64/unwind-ia64.h,
++ * config/mips/vr4120-div.S: Fix license from GPL-3.0+ to
++ GPL-3.0-with-GCC-exception.
++
++2013-06-08 Walter Lee <walt@tilera.com>
++
++ Backport from mainline:
++ 2013-06-08 Walter Lee <walt@tilera.com>
++
++ * config/tilepro/atomic.h: Don't include stdint.h or features.h.
++ Replace int64_t with long long. Add __extension__ where
++ appropriate.
++
++2013-06-06 Douglas B Rupp <rupp@adacore.com>
++
++ * config.host (arm-wrs-vxworks): Configure with other soft float.
++
++2013-05-20 Chung-Ju Wu <jasonwucj@gmail.com>
++
++ Backport from mainline:
++ 2012-05-24 Olivier Hainque <hainque@adacore.com>
++
++ * Makefile.in (clean): Remove libgcc_tm.stamp as well.
++ Use a separate command for stamp removals.
++
+2013-04-11 Julian Brown <julian@codesourcery.com>
+
+ * config/arm/linux-atomic.c (SUBWORD_SYNC_OP, SUBWORD_VAL_CAS)
@@ -78417,6 +83925,16 @@ Binary files gcc-4.7.3/libcpp/po/zh_TW.gmo and gcc-linaro-4.7-2013.05/libcpp/po/
2013-04-11 Release Manager
* GCC 4.7.3 released.
+@@ -14,7 +71,8 @@
+
+ PR target/49880
+ * config/sh/lib1funcs.S (sdivsi3_i4, udivsi3_i4): Enable for SH2A.
+- (sdivsi3, udivsi3): Remove SH4 check and always compile these functions.
++ (sdivsi3, udivsi3): Remove SH4 check and always compile these
++ functions.
+
+ 2013-03-06 Oleg Endo <olegendo@gcc.gnu.org>
+
--- a/src/libgcc/ChangeLog.aarch64
+++ b/src/libgcc/ChangeLog.aarch64
@@ -0,0 +1,83 @@
@@ -78503,6 +84021,18 @@ Binary files gcc-4.7.3/libcpp/po/zh_TW.gmo and gcc-linaro-4.7-2013.05/libcpp/po/
+
+ * configure.ac: Enable AArch64.
+ * configure: Regenerate.
+--- a/src/libgcc/Makefile.in
++++ b/src/libgcc/Makefile.in
+@@ -121,7 +121,8 @@
+ .PHONY: all clean
+
+ clean:
+- -rm -f config.h libgcc_tm.h stamp-h stmp-ldirs libgcc.map
++ -rm -f config.h libgcc_tm.h libgcc.map
++ -rm -f libgcc_tm.stamp stamp-h stmp-ldirs
+ -rm -f *$(objext)
+ -rm -f *.dep
+ -rm -f *.a
--- a/src/libgcc/config/aarch64/crti.S
+++ b/src/libgcc/config/aarch64/crti.S
@@ -0,0 +1,68 @@
@@ -79319,6 +84849,300 @@ Binary files gcc-4.7.3/libcpp/po/zh_TW.gmo and gcc-linaro-4.7-2013.05/libcpp/po/
@@ -1 +1 @@
-LIB1ASMFUNCS += _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _call_via_rX _interwork_call_via_rX _clzsi2 _clzdi2
+LIB1ASMFUNCS += _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _call_via_rX _interwork_call_via_rX _clzsi2 _clzdi2 _ctzsi2
+--- a/src/libgcc/config/i386/32/sfp-machine.h
++++ b/src/libgcc/config/i386/32/sfp-machine.h
+@@ -140,6 +140,14 @@
+ __asm__ __volatile__ ("fdiv {%y0, %0|%0, %y0}" : "+t" (f)); \
+ __asm__ __volatile__ ("fwait"); \
+ } \
++ if (_fex & FP_EX_DENORM) \
++ { \
++ struct fenv temp; \
++ __asm__ __volatile__ ("fnstenv %0" : "=m" (temp)); \
++ temp.__status_word |= FP_EX_DENORM; \
++ __asm__ __volatile__ ("fldenv %0" : : "m" (temp)); \
++ __asm__ __volatile__ ("fwait"); \
++ } \
+ if (_fex & FP_EX_DIVZERO) \
+ { \
+ float f = 1.0, g = 0.0; \
+--- a/src/libgcc/config/i386/64/sfp-machine.h
++++ b/src/libgcc/config/i386/64/sfp-machine.h
+@@ -89,6 +89,14 @@
+ float f = 0.0; \
+ __asm__ __volatile__ (ASM_INVALID : : "x" (f)); \
+ } \
++ if (_fex & FP_EX_DENORM) \
++ { \
++ struct fenv temp; \
++ __asm__ __volatile__ ("fnstenv %0" : "=m" (temp)); \
++ temp.__status_word |= FP_EX_DENORM; \
++ __asm__ __volatile__ ("fldenv %0" : : "m" (temp)); \
++ __asm__ __volatile__ ("fwait"); \
++ } \
+ if (_fex & FP_EX_DIVZERO) \
+ { \
+ float f = 1.0, g = 0.0; \
+--- a/src/libgcc/config/i386/cygming-crtbegin.c
++++ b/src/libgcc/config/i386/cygming-crtbegin.c
+@@ -1,5 +1,5 @@
+ /* crtbegin object for windows32 targets.
+- Copyright (C) 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
++ Copyright (C) 2007, 2009-2011, 2013 Free Software Foundation, Inc.
+
+ Contributed by Danny Smith <dannysmith@users.sourceforge.net>
+
+@@ -69,6 +69,9 @@
+ = { };
+
+ static struct object obj;
++
++/* Handle of libgcc's DLL reference. */
++HANDLE hmod_libgcc;
+ #endif
+
+ #if TARGET_USE_JCR_SECTION
+@@ -93,9 +96,14 @@
+
+ void (*register_frame_fn) (const void *, struct object *);
+ HANDLE h = GetModuleHandle (LIBGCC_SONAME);
++
+ if (h)
+- register_frame_fn = (void (*) (const void *, struct object *))
+- GetProcAddress (h, "__register_frame_info");
++ {
++ /* Increasing the load-count of LIBGCC_SONAME DLL. */
++ hmod_libgcc = LoadLibrary (LIBGCC_SONAME);
++ register_frame_fn = (void (*) (const void *, struct object *))
++ GetProcAddress (h, "__register_frame_info");
++ }
+ else
+ register_frame_fn = __register_frame_info;
+ if (register_frame_fn)
+@@ -132,5 +140,7 @@
+ deregister_frame_fn = __deregister_frame_info;
+ if (deregister_frame_fn)
+ deregister_frame_fn (__EH_FRAME_BEGIN__);
++ if (hmod_libgcc)
++ FreeLibrary (hmod_libgcc);
+ #endif
+ }
+--- a/src/libgcc/config/ia64/unwind-ia64.h
++++ b/src/libgcc/config/ia64/unwind-ia64.h
+@@ -2,21 +2,26 @@
+ Contributed by Andrew MacLeod <amacleod@cygnus.com>
+ Andrew Haley <aph@cygnus.com>
+
+- This file is part of GCC.
++This file is part of GCC.
+
+- GCC is free software; you can redistribute it and/or modify
+- it under the terms of the GNU General Public License as published by
+- the Free Software Foundation; either version 3, or (at your option)
+- any later version.
+-
+- GCC is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- GNU General Public License for more details.
+-
+- You should have received a copy of the GNU General Public License
+- along with GCC; see the file COPYING3. If not see
+- <http://www.gnu.org/licenses/>. */
++GCC is free software; you can redistribute it and/or modify it under
++the terms of the GNU General Public License as published by the Free
++Software Foundation; either version 3, or (at your option) any later
++version.
++
++GCC is distributed in the hope that it will be useful, but WITHOUT ANY
++WARRANTY; without even the implied warranty of MERCHANTABILITY or
++FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++for more details.
++
++Under Section 7 of GPL version 3, you are granted additional
++permissions described in the GCC Runtime Library Exception, version
++3.1, as published by the Free Software Foundation.
++
++You should have received a copy of the GNU General Public License and
++a copy of the GCC Runtime Library Exception along with this program;
++see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
++<http://www.gnu.org/licenses/>. */
+
+ struct unw_table_entry
+ {
+--- a/src/libgcc/config/mips/vr4120-div.S
++++ b/src/libgcc/config/mips/vr4120-div.S
+@@ -3,18 +3,23 @@
+
+ This file is part of GCC.
+
+-GCC is free software; you can redistribute it and/or modify
+-it under the terms of the GNU General Public License as published by
+-the Free Software Foundation; either version 3, or (at your option)
+-any later version.
+-
+-GCC is distributed in the hope that it will be useful,
+-but WITHOUT ANY WARRANTY; without even the implied warranty of
+-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-GNU General Public License for more details.
++GCC is free software; you can redistribute it and/or modify it under
++the terms of the GNU General Public License as published by the Free
++Software Foundation; either version 3, or (at your option) any later
++version.
+
+-You should have received a copy of the GNU General Public License
+- along with GCC; see the file COPYING3. If not see
++GCC is distributed in the hope that it will be useful, but WITHOUT ANY
++WARRANTY; without even the implied warranty of MERCHANTABILITY or
++FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++for more details.
++
++Under Section 7 of GPL version 3, you are granted additional
++permissions described in the GCC Runtime Library Exception, version
++3.1, as published by the Free Software Foundation.
++
++You should have received a copy of the GNU General Public License and
++a copy of the GCC Runtime Library Exception along with this program;
++see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains functions which implement divsi3 and modsi3 for
+--- a/src/libgcc/config/rs6000/ibm-ldouble.c
++++ b/src/libgcc/config/rs6000/ibm-ldouble.c
+@@ -189,7 +189,16 @@
+ || nonfinite (t))
+ return t;
+
+- /* Finite nonzero result requires corrections to the highest order term. */
++ /* Finite nonzero result requires corrections to the highest order
++ term. These corrections require the low part of c * t to be
++ exactly represented in double. */
++ if (fabs (a) <= 0x1p-969)
++ {
++ a *= 0x1p106;
++ b *= 0x1p106;
++ c *= 0x1p106;
++ d *= 0x1p106;
++ }
+
+ s = c * t; /* (s,sigma) = c*t exactly. */
+ w = -(-b + d * t); /* Written to get fnmsub for speed, but not
+--- a/src/libgcc/config/tilepro/atomic.h
++++ b/src/libgcc/config/tilepro/atomic.h
+@@ -1,6 +1,5 @@
+ /* Macros for atomic functionality for tile.
+- Copyright (C) 2011, 2012
+- Free Software Foundation, Inc.
++ Copyright (C) 2011-2013 Free Software Foundation, Inc.
+ Contributed by Walter Lee (walt@tilera.com)
+
+ This file is free software; you can redistribute it and/or modify it
+@@ -93,8 +92,6 @@
+ compare-and-exchange routine, so may be potentially less efficient. */
+ #endif
+
+-#include <stdint.h>
+-#include <features.h>
+ #ifdef __tilegx__
+ #include <arch/spr_def.h>
+ #else
+@@ -123,9 +120,9 @@
+
+ /* 64-bit integer compare-and-exchange. */
+ static __inline __attribute__ ((always_inline))
+- int64_t arch_atomic_val_compare_and_exchange_8 (volatile int64_t * mem,
+- int64_t oldval,
+- int64_t newval)
++ long long arch_atomic_val_compare_and_exchange_8 (volatile long long
++ *mem, long long oldval,
++ long long newval)
+ {
+ #ifdef __tilegx__
+ __insn_mtspr (SPR_CMPEXCH_VALUE, oldval);
+@@ -140,7 +137,7 @@
+ "R04" (newval_lo), "R05" (newval_hi),
+ "m" (*mem):"r20", "r21", "r22", "r23", "r24", "r25",
+ "r26", "r27", "r28", "r29", "memory");
+- return ((uint64_t) result_hi) << 32 | result_lo;
++ return ((long long) result_hi) << 32 | result_lo;
+ #endif
+ }
+
+@@ -151,11 +148,11 @@
+
+
+ #define arch_atomic_val_compare_and_exchange(mem, o, n) \
+- ({ \
++ __extension__ ({ \
+ (__typeof(*(mem)))(__typeof(*(mem)-*(mem))) \
+ ((sizeof(*(mem)) == 8) ? \
+ arch_atomic_val_compare_and_exchange_8( \
+- (volatile int64_t*)(mem), (__typeof((o)-(o)))(o), \
++ (volatile long long*)(mem), (__typeof((o)-(o)))(o), \
+ (__typeof((n)-(n)))(n)) : \
+ (sizeof(*(mem)) == 4) ? \
+ arch_atomic_val_compare_and_exchange_4( \
+@@ -165,7 +162,7 @@
+ })
+
+ #define arch_atomic_bool_compare_and_exchange(mem, o, n) \
+- ({ \
++ __extension__ ({ \
+ __typeof(o) __o = (o); \
+ __builtin_expect( \
+ __o == arch_atomic_val_compare_and_exchange((mem), __o, (n)), 1); \
+@@ -175,7 +172,7 @@
+ /* Loop with compare_and_exchange until we guess the correct value.
+ Normally "expr" will be an expression using __old and __value. */
+ #define __arch_atomic_update_cmpxchg(mem, value, expr) \
+- ({ \
++ __extension__ ({ \
+ __typeof(value) __value = (value); \
+ __typeof(*(mem)) *__mem = (mem), __old = *__mem, __guess; \
+ do { \
+@@ -190,12 +187,14 @@
+ /* Generic atomic op with 8- or 4-byte variant.
+ The _mask, _addend, and _expr arguments are ignored on tilegx. */
+ #define __arch_atomic_update(mem, value, op, _mask, _addend, _expr) \
+- ({ \
++ __extension__ ({ \
+ ((__typeof(*(mem))) \
+ ((sizeof(*(mem)) == 8) ? (__typeof(*(mem)-*(mem)))__insn_##op( \
+- (void *)(mem), (int64_t)(__typeof((value)-(value)))(value)) : \
++ (volatile void *)(mem), \
++ (long long)(__typeof((value)-(value)))(value)) : \
+ (sizeof(*(mem)) == 4) ? (int)__insn_##op##4( \
+- (void *)(mem), (int32_t)(__typeof((value)-(value)))(value)) : \
++ (volatile void *)(mem), \
++ (int)(__typeof((value)-(value)))(value)) : \
+ __arch_atomic_error_bad_argument_size())); \
+ })
+
+@@ -225,7 +224,7 @@
+ /* Generic atomic op with 8- or 4-byte variant.
+ The _op argument is ignored on tilepro. */
+ #define __arch_atomic_update(mem, value, _op, mask, addend, expr) \
+- ({ \
++ __extension__ ({ \
+ (__typeof(*(mem)))(__typeof(*(mem)-*(mem))) \
+ ((sizeof(*(mem)) == 8) ? \
+ __arch_atomic_update_cmpxchg((mem), (value), (expr)) : \
+@@ -264,13 +263,13 @@
+ __arch_atomic_update_cmpxchg(mem, mask, ~(__old & __value))
+
+ #define arch_atomic_bit_set(mem, bit) \
+- ({ \
++ __extension__ ({ \
+ __typeof(*(mem)) __mask = (__typeof(*(mem)))1 << (bit); \
+ __mask & arch_atomic_or((mem), __mask); \
+ })
+
+ #define arch_atomic_bit_clear(mem, bit) \
+- ({ \
++ __extension__ ({ \
+ __typeof(*(mem)) __mask = (__typeof(*(mem)))1 << (bit); \
+ __mask & arch_atomic_and((mem), ~__mask); \
+ })
--- a/src/libgcc/config.host
+++ b/src/libgcc/config.host
@@ -83,6 +83,9 @@
@@ -79348,6 +85172,15 @@ Binary files gcc-4.7.3/libcpp/po/zh_TW.gmo and gcc-linaro-4.7-2013.05/libcpp/po/
alpha*-*-linux*)
tmake_file="${tmake_file} alpha/t-alpha alpha/t-ieee t-crtfm alpha/t-linux"
extra_parts="$extra_parts crtfastmath.o"
+@@ -315,7 +328,7 @@
+ md_unwind_header=alpha/vms-unwind.h
+ ;;
+ arm-wrs-vxworks)
+- tmake_file="$tmake_file arm/t-arm arm/t-vxworks t-fdpbit"
++ tmake_file="$tmake_file arm/t-arm arm/t-vxworks t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
+ extra_parts="$extra_parts crti.o crtn.o"
+ ;;
+ arm*-*-freebsd*)
--- a/src/libgcc/longlong.h
+++ b/src/libgcc/longlong.h
@@ -203,7 +203,8 @@
@@ -79532,7 +85365,23 @@ Binary files gcc-4.7.3/libcpp/po/zh_TW.gmo and gcc-linaro-4.7-2013.05/libcpp/po/
#define FP_CLS_NORMAL 0
--- a/src/libgfortran/ChangeLog
+++ b/src/libgfortran/ChangeLog
-@@ -1,3 +1,38 @@
+@@ -1,3 +1,54 @@
++2013-07-03 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-06-20 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/fpu-387.h (_FPU_MASK_ALL): New.
++ (_FPU_EX_ALL): Ditto.
++ (set_fpu): Use fstcw to store x87 FPU control word. Use fnclex to
++ clear stalled exception flags. Correctly clear stalled SSE
++ exception flags. Simplify code.
++
++ Backport from mainline
++ 2013-06-19 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/fpu-387.h: Use __asm__ and __volatile__ consistently.
++
+2013-04-28 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ Backport from mainline:
@@ -79571,6 +85420,82 @@ Binary files gcc-4.7.3/libcpp/po/zh_TW.gmo and gcc-linaro-4.7-2013.05/libcpp/po/
2013-04-11 Release Manager
* GCC 4.7.3 released.
+--- a/src/libgfortran/config/fpu-387.h
++++ b/src/libgfortran/config/fpu-387.h
+@@ -73,7 +73,7 @@
+
+ /* We need a single SSE instruction here so the handler can safely skip
+ over it. */
+- __asm__ volatile ("movaps %xmm0,%xmm0");
++ __asm__ __volatile__ ("movaps\t%xmm0,%xmm0");
+
+ sigaction (SIGILL, &oact, NULL);
+
+@@ -95,42 +95,42 @@
+ #define _FPU_MASK_OM 0x08
+ #define _FPU_MASK_UM 0x10
+ #define _FPU_MASK_PM 0x20
++#define _FPU_MASK_ALL 0x3f
++
++#define _FPU_EX_ALL 0x3f
+
+ void set_fpu (void)
+ {
++ int excepts = 0;
+ unsigned short cw;
+
+- asm volatile ("fnstcw %0" : "=m" (cw));
++ __asm__ __volatile__ ("fstcw\t%0" : "=m" (cw));
+
+- cw |= (_FPU_MASK_IM | _FPU_MASK_DM | _FPU_MASK_ZM | _FPU_MASK_OM
+- | _FPU_MASK_UM | _FPU_MASK_PM);
++ if (options.fpe & GFC_FPE_INVALID) excepts |= _FPU_MASK_IM;
++ if (options.fpe & GFC_FPE_DENORMAL) excepts |= _FPU_MASK_DM;
++ if (options.fpe & GFC_FPE_ZERO) excepts |= _FPU_MASK_ZM;
++ if (options.fpe & GFC_FPE_OVERFLOW) excepts |= _FPU_MASK_OM;
++ if (options.fpe & GFC_FPE_UNDERFLOW) excepts |= _FPU_MASK_UM;
++ if (options.fpe & GFC_FPE_INEXACT) excepts |= _FPU_MASK_PM;
+
+- if (options.fpe & GFC_FPE_INVALID) cw &= ~_FPU_MASK_IM;
+- if (options.fpe & GFC_FPE_DENORMAL) cw &= ~_FPU_MASK_DM;
+- if (options.fpe & GFC_FPE_ZERO) cw &= ~_FPU_MASK_ZM;
+- if (options.fpe & GFC_FPE_OVERFLOW) cw &= ~_FPU_MASK_OM;
+- if (options.fpe & GFC_FPE_UNDERFLOW) cw &= ~_FPU_MASK_UM;
+- if (options.fpe & GFC_FPE_INEXACT) cw &= ~_FPU_MASK_PM;
++ cw |= _FPU_MASK_ALL;
++ cw &= ~excepts;
+
+- asm volatile ("fldcw %0" : : "m" (cw));
++ __asm__ __volatile__ ("fnclex\n\tfldcw\t%0" : : "m" (cw));
+
+ if (has_sse())
+ {
+ unsigned int cw_sse;
+
+- asm volatile ("%vstmxcsr %0" : "=m" (cw_sse));
++ __asm__ __volatile__ ("%vstmxcsr\t%0" : "=m" (cw_sse));
++
++ /* The SSE exception masks are shifted by 7 bits. */
++ cw_sse |= _FPU_MASK_ALL << 7;
++ cw_sse &= ~(excepts << 7);
+
+- cw_sse &= 0xffff0000;
+- cw_sse |= (_FPU_MASK_IM | _FPU_MASK_DM | _FPU_MASK_ZM | _FPU_MASK_OM
+- | _FPU_MASK_UM | _FPU_MASK_PM ) << 7;
+-
+- if (options.fpe & GFC_FPE_INVALID) cw_sse &= ~(_FPU_MASK_IM << 7);
+- if (options.fpe & GFC_FPE_DENORMAL) cw_sse &= ~(_FPU_MASK_DM << 7);
+- if (options.fpe & GFC_FPE_ZERO) cw_sse &= ~(_FPU_MASK_ZM << 7);
+- if (options.fpe & GFC_FPE_OVERFLOW) cw_sse &= ~(_FPU_MASK_OM << 7);
+- if (options.fpe & GFC_FPE_UNDERFLOW) cw_sse &= ~(_FPU_MASK_UM << 7);
+- if (options.fpe & GFC_FPE_INEXACT) cw_sse &= ~(_FPU_MASK_PM << 7);
++ /* Clear stalled exception flags. */
++ cw_sse &= ~_FPU_EX_ALL;
+
+- asm volatile ("%vldmxcsr %0" : : "m" (cw_sse));
++ __asm__ __volatile__ ("%vldmxcsr\t%0" : : "m" (cw_sse));
+ }
+ }
--- a/src/libgfortran/io/list_read.c
+++ b/src/libgfortran/io/list_read.c
@@ -2028,8 +2028,8 @@
@@ -79828,23 +85753,150 @@ Binary files gcc-4.7.3/libcpp/po/zh_TW.gmo and gcc-linaro-4.7-2013.05/libcpp/po/
alpha*-*-linux*)
config_path="linux/alpha linux posix"
;;
---- a/src/libstdc++-v3/acinclude.m4
-+++ b/src/libstdc++-v3/acinclude.m4
-@@ -1132,6 +1132,11 @@
- dnl --disable-libstdcxx-time
- dnl disables the checks completely
- dnl
-+dnl N.B. Darwin provides nanosleep but doesn't support the whole POSIX
-+dnl Timers option, so doesn't define _POSIX_TIMERS. Because the test
-+dnl below fails Darwin unconditionally defines _GLIBCXX_USE_NANOSLEEP in
-+dnl os_defines.h and also defines _GLIBCXX_USE_SCHED_YIELD.
-+dnl
- AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME], [
+--- a/src/libiberty/ChangeLog
++++ b/src/libiberty/ChangeLog
+@@ -1,3 +1,11 @@
++2013-11-15 Joseph Myers <joseph@codesourcery.com>
++
++ Backport from mainline:
++ 2012-06-29 Andreas Schwab <schwab@linux-m68k.org>
++
++ * copying-lib.texi (Library Copying): Don't use @heading inside
++ @enumerate.
++
+ 2013-04-11 Release Manager
- AC_MSG_CHECKING([for clock_gettime, nanosleep and sched_yield])
+ * GCC 4.7.3 released.
+--- a/src/libiberty/copying-lib.texi
++++ b/src/libiberty/copying-lib.texi
+@@ -476,12 +476,7 @@
+ of all derivatives of our free software and of promoting the sharing
+ and reuse of software generally.
+
+-@iftex
+-@heading NO WARRANTY
+-@end iftex
+-@ifinfo
+ @center NO WARRANTY
+-@end ifinfo
+
+ @item
+ BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+--- a/src/libjava/classpath/ChangeLog.gcj
++++ b/src/libjava/classpath/ChangeLog.gcj
+@@ -1,3 +1,9 @@
++2013-11-29 Matthias Klose <doko@ubuntu.com>
++
++ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c,
++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c:
++ Fix freetype includes.
++
+ 2013-02-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR bootstrap/56258
+--- a/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c
++++ b/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c
+@@ -42,8 +42,9 @@
+ #include <pango/pango.h>
+ #include <pango/pangoft2.h>
+ #include <pango/pangofc-font.h>
+-#include <freetype/ftglyph.h>
+-#include <freetype/ftoutln.h>
++#include <ft2build.h>
++#include FT_GLYPH_H
++#include FT_OUTLINE_H
+ #include "jcl.h"
+ #include "gdkfont.h"
+ #include "gnu_java_awt_peer_gtk_FreetypeGlyphVector.h"
+--- a/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
++++ b/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
+@@ -39,10 +39,11 @@
+ #include <pango/pango.h>
+ #include <pango/pangoft2.h>
+ #include <pango/pangofc-font.h>
+-#include <freetype/ftglyph.h>
+-#include <freetype/ftoutln.h>
+-#include <freetype/fttypes.h>
+-#include <freetype/tttables.h>
++#include <ft2build.h>
++#include FT_GLYPH_H
++#include FT_OUTLINE_H
++#include FT_TYPES_H
++#include FT_TRUETYPE_TABLES_H
+ #include "gdkfont.h"
+ #include "gtkpeer.h"
+ #include "gnu_java_awt_peer_gtk_GdkFontPeer.h"
--- a/src/libstdc++-v3/ChangeLog
+++ b/src/libstdc++-v3/ChangeLog
-@@ -1,3 +1,20 @@
+@@ -1,3 +1,88 @@
++2013-11-05 Jonathan Wakely <jwakely.gcc@gmail.com>
++
++ * doc/xml/manual/status_cxx2011.xml: Document aligned_union as
++ missing.
++ * doc/xml/manual/spine.xml: Update copyright years.
++ * doc/html/*: Regenerate.
++
++2013-10-30 Chris Studholme <cvs@cs.utoronto.ca>
++
++ PR libstdc++/58912
++ * include/bits/shared_ptr_base.h (_Sp_counted_ptr_inplace): Remove
++ unnecessary initialization of storage buffer.
++
++2013-10-20 Chris Jefferson <chris@bubblescope.net>
++ Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR libstdc++/58800
++ * include/bits/stl_algo.h (__unguarded_partition_pivot): Change
++ __last - 2 to __last - 1.
++ * testsuite/25_algorithms/nth_element/58800.cc: New
++
++2013-09-30 Chris Jefferson <chris@bubblescope.net>
++
++ PR libstdc++/58437
++ * include/bits/stl_algo.h (__move_median_first): Rename to
++ __move_median_to_first, change to take an addition argument.
++ (__unguarded_partition_pivot): Adjust.
++ * testsuite/performance/25_algorithms/sort.cc: New.
++ * testsuite/performance/25_algorithms/sort_heap.cc: Likewise.
++ * testsuite/performance/25_algorithms/stable_sort.cc: Likewise.
++
++2013-09-26 Jonathan Wakely <jwakely.gcc@gmail.com>
++
++ Backport from mainline
++
++ 2013-01-19 Jonathan Wakely <jwakely.gcc@gmail.com>
++
++ PR libstdc++/55861
++ * include/std/future (_State_base::_S_check(const shared_ptr<T>&)):
++ Fix return type.
++
++2013-09-03 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR libstdc++/58302
++ * include/bits/random.tcc (negative_binomial_distribution<>::
++ operator()(_UniformRandomNumberGenerator&, const param_type&):
++ Fix typo in template argument.
++ * testsuite/26_numerics/random/negative_binomial_distribution/
++ operators/58302.cc: New.
++
++2013-08-17 Uros Bizjak <ubizjak@gmail.com>
++
++ * src/c++98/compatibility.cc (_ZTIe): Use
++ reinterpret_cast<const cast *> to avoid -Wcast-qual warnings.
++ (_ZTIPe): Ditto.
++ (ZTIPKe): Ditto.
++
++2013-05-15 Jonathan Wakely <jwakely.gcc@gmail.com>
++
++ * include/bits/basic_string.h (getline): Fix doxygen comments.
++
++2013-05-14 Evgeniy Stepanov <eugenis@google.com>
++
++ * src/c++11/system_error.cc (generic_category_instance): Add
++ initializer.
++ (system_category_instance): Likewise.
++ * src/c++11/future.cc (__fec): Likewise.
++
+2013-04-15 Jack Howarth <howarth@bromo.med.uc.edu>
+
+ Backport from mainline
@@ -79872,6 +85924,20 @@ Binary files gcc-4.7.3/libcpp/po/zh_TW.gmo and gcc-linaro-4.7-2013.05/libcpp/po/
+
+ * config/cpu/aarch64/cxxabi_tweaks.h: New file.
+ * configure.host: Enable aarch64.
+--- a/src/libstdc++-v3/acinclude.m4
++++ b/src/libstdc++-v3/acinclude.m4
+@@ -1132,6 +1132,11 @@
+ dnl --disable-libstdcxx-time
+ dnl disables the checks completely
+ dnl
++dnl N.B. Darwin provides nanosleep but doesn't support the whole POSIX
++dnl Timers option, so doesn't define _POSIX_TIMERS. Because the test
++dnl below fails Darwin unconditionally defines _GLIBCXX_USE_NANOSLEEP in
++dnl os_defines.h and also defines _GLIBCXX_USE_SCHED_YIELD.
++dnl
+ AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME], [
+
+ AC_MSG_CHECKING([for clock_gettime, nanosleep and sched_yield])
--- a/src/libstdc++-v3/config/cpu/aarch64/cxxabi_tweaks.h
+++ b/src/libstdc++-v3/config/cpu/aarch64/cxxabi_tweaks.h
@@ -0,0 +1,60 @@
@@ -79959,6 +86025,8498 @@ Binary files gcc-4.7.3/libcpp/po/zh_TW.gmo and gcc-linaro-4.7-2013.05/libcpp/po/
alpha*)
try_cpu=alpha
;;
+--- a/src/libstdc++-v3/doc/html/api.html
++++ b/src/libstdc++-v3/doc/html/api.html
+@@ -1,13 +1,12 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="The GNU C++ Library API Reference"><div class="titlepage"><div><div><h2 class="title"><a id="api"></a>The GNU C++ Library API Reference</h2></div><div><p class="copyright">Copyright ©
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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 ©
+ 2008
+ ,
+ 2010
+
+ <a class="link" href="http://www.fsf.org/" target="_top">FSF
+ </a>
+- </p></div><div><div class="legalnotice" title="Legal Notice"><a id="idp3637504"></a><p>
++ </p></div><div><div class="legalnotice"><a id="idm269994087488"></a><p>
+ <a class="link" href="manual/license.html" title="License">License
+ </a>
+ </p></div></div></div><hr /></div><p>
+@@ -20,7 +19,7 @@
+ particular include file, looking at inheritance diagrams, etc.
+ </p><p>
+ The API documentation, rendered into HTML, can be viewed online:
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/index.html" target="_top">for the 3.4 release
+ </a>
+ </p></li><li class="listitem"><p>
+@@ -56,4 +55,4 @@
+ </p><p>
+ In addition, a rendered set of man pages are available in the same
+ location specified above. Start with C++Intro(3).
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/bk02.html
++++ b/src/libstdc++-v3/doc/html/bk02.html
+@@ -1,3 +1,2 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/bk03.html
++++ b/src/libstdc++-v3/doc/html/bk03.html
+@@ -1,3 +1,2 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/faq.html
++++ b/src/libstdc++-v3/doc/html/faq.html
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Frequently Asked Questions"><div class="titlepage"><div><div><h1 class="title"><a id="faq"></a>Frequently Asked Questions</h1></div><div><p class="copyright">Copyright ©
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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 ©
+ 2008, 2010
+
+ <a class="link" href="http://www.fsf.org" target="_top">FSF</a>
+- </p></div></div><hr /></div><div class="qandaset" title="Frequently Asked Questions"><a id="idp2990960"></a><dl><dt></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
++ </p></div></div><hr /></div><div class="qandaset"><a id="idm269998601376"></a><dl><dt></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
+ What is libstdc++?
+ </a></dt><dt>1.2. <a href="faq.html#faq.why">
+ Why should I use libstdc++?
+@@ -91,7 +90,7 @@
+ What's an ABI and why is it so messy?
+ </a></dt><dt>7.8. <a href="faq.html#faq.size_equals_capacity">
+ How do I make std::vector&lt;T&gt;::capacity() == std::vector&lt;T&gt;::size?
+- </a></dt></dl></dd></dl><table border="0" width="100%" summary="Q and A Set"><col align="left" width="1%" /><col /><tbody><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>1.1. <a href="faq.html#faq.what">
++ </a></dt></dl></dd></dl><table border="0" style="width: 100%;"><colgroup><col align="left" width="1%" /><col /></colgroup><tbody><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>1.1. <a href="faq.html#faq.what">
+ What is libstdc++?
+ </a></dt><dt>1.2. <a href="faq.html#faq.why">
+ Why should I use libstdc++?
+@@ -105,7 +104,7 @@
+ What happened to the older libg++? I need that!
+ </a></dt><dt>1.7. <a href="faq.html#faq.more_questions">
+ What if I have more questions?
+- </a></dt></dl></td></tr><tr class="question" title="1.1."><td align="left" valign="top"><a id="faq.what"></a><a id="faq.what.q"></a><p><strong>1.1.</strong></p></td><td align="left" valign="top"><p>
++ </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what"></a><a id="faq.what.q"></a><p><strong>1.1.</strong></p></td><td align="left" valign="top"><p>
+ What is libstdc++?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="faq.what.a"></a></td><td align="left" valign="top"><p>
+ The GNU Standard C++ Library v3 is an ongoing project to
+@@ -115,7 +114,7 @@
+ bleeding-edge code, the up-to-date source is available over
+ anonymous SVN, and can even be browsed over
+ the <a class="link" href="http://gcc.gnu.org/svn.html" target="_top">web</a>.
+- </p></td></tr><tr class="question" title="1.2."><td align="left" valign="top"><a id="faq.why"></a><a id="q-why"></a><p><strong>1.2.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.why"></a><a id="q-why"></a><p><strong>1.2.</strong></p></td><td align="left" valign="top"><p>
+ Why should I use libstdc++?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-why"></a></td><td align="left" valign="top"><p>
+ The completion of the ISO C++ standardization gave the C++
+@@ -141,7 +140,7 @@
+ <code class="classname">vector&lt;&gt;</code>, iostreams, and algorithms.)
+ Programmers will no longer need to <span class="quote">“<span class="quote">roll their own</span>”</span>
+ nor be worried about platform-specific incompatibilities.
+- </p></td></tr><tr class="question" title="1.3."><td align="left" valign="top"><a id="faq.who"></a><a id="q-who"></a><p><strong>1.3.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.who"></a><a id="q-who"></a><p><strong>1.3.</strong></p></td><td align="left" valign="top"><p>
+ Who's in charge of it?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-who"></a></td><td align="left" valign="top"><p>
+ The libstdc++ project is contributed to by several developers
+@@ -155,13 +154,13 @@
+ archives, is open to everyone. You can read instructions for
+ doing so on the <a class="link" href="http://gcc.gnu.org/libstdc++/" target="_top">homepage</a>.
+ If you have questions, ideas, code, or are just curious, sign up!
+- </p></td></tr><tr class="question" title="1.4."><td align="left" valign="top"><a id="faq.when"></a><a id="q-when"></a><p><strong>1.4.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.when"></a><a id="q-when"></a><p><strong>1.4.</strong></p></td><td align="left" valign="top"><p>
+ When is libstdc++ going to be finished?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-when"></a></td><td align="left" valign="top"><p>
+ Nathan Myers gave the best of all possible answers, responding to
+ a Usenet article asking this question: <span class="emphasis"><em>Sooner, if you
+ help.</em></span>
+- </p></td></tr><tr class="question" title="1.5."><td align="left" valign="top"><a id="faq.how"></a><a id="q-how"></a><p><strong>1.5.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how"></a><a id="q-how"></a><p><strong>1.5.</strong></p></td><td align="left" valign="top"><p>
+ How do I contribute to the effort?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how"></a></td><td align="left" valign="top"><p>
+ Here is <a class="link" href="manual/appendix_contributing.html" title="Appendix A.  Contributing">a page devoted to
+@@ -172,7 +171,7 @@
+ anybody who is willing to help write documentation, for example,
+ or has found a bug in code that we all thought was working and is
+ willing to provide details, is more than welcome!
+- </p></td></tr><tr class="question" title="1.6."><td align="left" valign="top"><a id="faq.whereis_old"></a><a id="q-whereis_old"></a><p><strong>1.6.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.whereis_old"></a><a id="q-whereis_old"></a><p><strong>1.6.</strong></p></td><td align="left" valign="top"><p>
+ What happened to the older libg++? I need that!
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-whereis_old"></a></td><td align="left" valign="top"><p>
+ The most recent libg++ README states that libg++ is no longer
+@@ -180,7 +179,7 @@
+ projects, and is only being kicked along to support older code.
+ </p><p>
+ More information in the <a class="link" href="manual/backwards.html" title="Backwards Compatibility">backwards compatibility documentation</a>
+- </p></td></tr><tr class="question" title="1.7."><td align="left" valign="top"><a id="faq.more_questions"></a><a id="q-more_questions"></a><p><strong>1.7.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.more_questions"></a><a id="q-more_questions"></a><p><strong>1.7.</strong></p></td><td align="left" valign="top"><p>
+ What if I have more questions?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-more_questions"></a></td><td align="left" valign="top"><p>
+ If you have read the README file, and your question remains
+@@ -201,17 +200,17 @@
+ How is that different from the GNU {Lesser,Library} GPL?
+ </a></dt><dt>2.4. <a href="faq.html#faq.license.what_restrictions">
+ I see. So, what restrictions are there on programs that use the library?
+- </a></dt></dl></td></tr><tr class="question" title="2.1."><td align="left" valign="top"><a id="faq.license.what"></a><a id="q-license.what"></a><p><strong>2.1.</strong></p></td><td align="left" valign="top"><p>
++ </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.what"></a><a id="q-license.what"></a><p><strong>2.1.</strong></p></td><td align="left" valign="top"><p>
+ What are the license terms for libstdc++?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what"></a></td><td align="left" valign="top"><p>
+ See <a class="link" href="manual/license.html" title="License">our license description</a>
+ for these and related questions.
+- </p></td></tr><tr class="question" title="2.2."><td align="left" valign="top"><a id="faq.license.any_program"></a><a id="q-license.any_program"></a><p><strong>2.2.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.any_program"></a><a id="q-license.any_program"></a><p><strong>2.2.</strong></p></td><td align="left" valign="top"><p>
+ So any program which uses libstdc++ falls under the GPL?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.any_program"></a></td><td align="left" valign="top"><p>
+ No. The special exception permits use of the library in
+ proprietary applications.
+- </p></td></tr><tr class="question" title="2.3."><td align="left" valign="top"><a id="faq.license.lgpl"></a><a id="q-license.lgpl"></a><p><strong>2.3.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.lgpl"></a><a id="q-license.lgpl"></a><p><strong>2.3.</strong></p></td><td align="left" valign="top"><p>
+ How is that different from the GNU {Lesser,Library} GPL?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.lgpl"></a></td><td align="left" valign="top"><p>
+ The LGPL requires that users be able to replace the LGPL code with a
+@@ -221,7 +220,7 @@
+ are expanded inside the code that uses the library. So to allow people
+ to replace the library code, someone using the library would have to
+ distribute their own source, rendering the LGPL equivalent to the GPL.
+- </p></td></tr><tr class="question" title="2.4."><td align="left" valign="top"><a id="faq.license.what_restrictions"></a><a id="q-license.what_restrictions"></a><p><strong>2.4.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.what_restrictions"></a><a id="q-license.what_restrictions"></a><p><strong>2.4.</strong></p></td><td align="left" valign="top"><p>
+ I see. So, what restrictions are there on programs that use the library?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what_restrictions"></a></td><td align="left" valign="top"><p>
+ None. We encourage such programs to be released as open source,
+@@ -234,7 +233,7 @@
+ What's libsupc++?
+ </a></dt><dt>3.6. <a href="faq.html#faq.size">
+ This library is HUGE!
+- </a></dt></dl></td></tr><tr class="question" title="3.1."><td align="left" valign="top"><a id="faq.how_to_install"></a><a id="q-how_to_install"></a><p><strong>3.1.</strong></p></td><td align="left" valign="top"><p>How do I install libstdc++?
++ </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how_to_install"></a><a id="q-how_to_install"></a><p><strong>3.1.</strong></p></td><td align="left" valign="top"><p>How do I install libstdc++?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_install"></a></td><td align="left" valign="top"><p>
+ Often libstdc++ comes pre-installed as an integral part of many
+ existing GNU/Linux and Unix systems, as well as many embedded
+@@ -247,7 +246,7 @@
+ documentation</a> for detailed
+ instructions. You may wish to browse those files ahead
+ of time to get a feel for what's required.
+- </p></td></tr><tr class="question" title="3.2."><td align="left" valign="top"><a id="faq.how_to_get_sources"></a><a id="q-how_to_get_sources"></a><p><strong>3.2.</strong></p></td><td align="left" valign="top"><p>How does one get current libstdc++ sources?
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how_to_get_sources"></a><a id="q-how_to_get_sources"></a><p><strong>3.2.</strong></p></td><td align="left" valign="top"><p>How does one get current libstdc++ sources?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_get_sources"></a></td><td align="left" valign="top"><p>
+ Libstdc++ sources for all official releases can be obtained as
+ part of the GCC sources, available from various sites and
+@@ -272,7 +271,7 @@
+ For more information
+ see <a class="link" href="http://gcc.gnu.org/svn.html" target="_top"><acronym class="acronym">SVN</acronym>
+ details</a>.
+- </p></td></tr><tr class="question" title="3.3."><td align="left" valign="top"><a id="faq.how_to_test"></a><a id="q-how_to_test"></a><p><strong>3.3.</strong></p></td><td align="left" valign="top"><p>How do I know if it works?
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how_to_test"></a><a id="q-how_to_test"></a><p><strong>3.3.</strong></p></td><td align="left" valign="top"><p>How do I know if it works?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_test"></a></td><td align="left" valign="top"><p>
+ Libstdc++ comes with its own validation testsuite, which includes
+ conformance testing, regression testing, ABI testing, and
+@@ -283,7 +282,7 @@
+ If you find bugs in the testsuite programs themselves, or if you
+ think of a new test program that should be added to the suite,
+ <span class="emphasis"><em>please</em></span> write up your idea and send it to the list!
+- </p></td></tr><tr class="question" title="3.4."><td align="left" valign="top"><a id="faq.how_to_set_paths"></a><a id="q-how_to_set_paths"></a><p><strong>3.4.</strong></p></td><td align="left" valign="top"><p>How do I insure that the dynamically linked library will be found?
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how_to_set_paths"></a><a id="q-how_to_set_paths"></a><p><strong>3.4.</strong></p></td><td align="left" valign="top"><p>How do I insure that the dynamically linked library will be found?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_set_paths"></a></td><td align="left" valign="top"><p>
+ Depending on your platform and library version, the error message might
+ be similar to one of the following:
+@@ -318,7 +317,7 @@
+ </p><p>
+ Using LD_LIBRARY_PATH is not always the best solution, <a class="link" href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic" title="Finding Dynamic or Shared Libraries">Finding Dynamic or Shared
+ Libraries</a> in the manual gives some alternatives.
+- </p></td></tr><tr class="question" title="3.5."><td align="left" valign="top"><a id="faq.what_is_libsupcxx"></a><a id="q-what_is_libsupcxx"></a><p><strong>3.5.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what_is_libsupcxx"></a><a id="q-what_is_libsupcxx"></a><p><strong>3.5.</strong></p></td><td align="left" valign="top"><p>
+ What's libsupc++?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_libsupcxx"></a></td><td align="left" valign="top"><p>
+ If the only functions from <code class="filename">libstdc++.a</code>
+@@ -335,7 +334,7 @@
+ using anything from the rest of the library, such as IOStreams
+ or vectors, then you'll still need pieces from
+ <code class="filename">libstdc++.a</code>.
+- </p></td></tr><tr class="question" title="3.6."><td align="left" valign="top"><a id="faq.size"></a><a id="q-size"></a><p><strong>3.6.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.size"></a><a id="q-size"></a><p><strong>3.6.</strong></p></td><td align="left" valign="top"><p>
+ This library is HUGE!
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-size"></a></td><td align="left" valign="top"><p>
+ Usually the size of libraries on disk isn't noticeable. When a
+@@ -382,7 +381,7 @@
+ Recent GNU/Linux glibc required?
+ </a></dt><dt>4.8. <a href="faq.html#faq.freebsd_wchar">
+ Can't use wchar_t/wstring on FreeBSD
+- </a></dt></dl></td></tr><tr class="question" title="4.1."><td align="left" valign="top"><a id="faq.other_compilers"></a><a id="q-other_compilers"></a><p><strong>4.1.</strong></p></td><td align="left" valign="top"><p>
++ </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.other_compilers"></a><a id="q-other_compilers"></a><p><strong>4.1.</strong></p></td><td align="left" valign="top"><p>
+ Can libstdc++ be used with non-GNU compilers?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-other_compilers"></a></td><td align="left" valign="top"><p>
+ Perhaps.
+@@ -402,7 +401,7 @@
+ been known to work with versions of the EDG C++ compiler, and
+ vendor-specific proprietary C++ compilers such as the Intel ICC
+ C++ compiler.
+- </p></td></tr><tr class="question" title="4.2."><td align="left" valign="top"><a id="faq.solaris_long_long"></a><a id="q-solaris_long_long"></a><p><strong>4.2.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.solaris_long_long"></a><a id="q-solaris_long_long"></a><p><strong>4.2.</strong></p></td><td align="left" valign="top"><p>
+ No 'long long' type on Solaris?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-solaris_long_long"></a></td><td align="left" valign="top"><p>
+ By default we try to support the C99 <span class="type">long long</span> type.
+@@ -414,7 +413,7 @@
+ commonly reported platform affected was Solaris.
+ </p><p>
+ This has been fixed for libstdc++ releases greater than 3.0.3.
+- </p></td></tr><tr class="question" title="4.3."><td align="left" valign="top"><a id="faq.predefined"></a><a id="q-predefined"></a><p><strong>4.3.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.predefined"></a><a id="q-predefined"></a><p><strong>4.3.</strong></p></td><td align="left" valign="top"><p>
+ <code class="constant">_XOPEN_SOURCE</code> and <code class="constant">_GNU_SOURCE</code> are always defined?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-predefined"></a></td><td align="left" valign="top"><p>On Solaris, g++ (but not gcc) always defines the preprocessor
+ macro <code class="constant">_XOPEN_SOURCE</code>. On GNU/Linux, the same happens
+@@ -443,13 +442,13 @@
+ <a class="link" href="http://gcc.gnu.org/cgi-bin/htsearch?method=and&amp;format=builtin-long&amp;sort=score&amp;words=_XOPEN_SOURCE+Solaris" target="_top">quite a bit</a>.
+ </p><p>This method is something of a wart. We'd like to find a cleaner
+ solution, but nobody yet has contributed the time.
+- </p></td></tr><tr class="question" title="4.4."><td align="left" valign="top"><a id="faq.darwin_ctype"></a><a id="q-darwin_ctype"></a><p><strong>4.4.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.darwin_ctype"></a><a id="q-darwin_ctype"></a><p><strong>4.4.</strong></p></td><td align="left" valign="top"><p>
+ Mac OS X <code class="filename">ctype.h</code> is broken! How can I fix it?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-darwin_ctype"></a></td><td align="left" valign="top"><p>This is a long-standing bug in the OS X support. Fortunately,
+ the patch is quite simple, and well-known.
+ <a class="link" href="http://gcc.gnu.org/ml/gcc/2002-03/msg00817.html" target="_top"> Here's a
+ link to the solution</a>.
+- </p></td></tr><tr class="question" title="4.5."><td align="left" valign="top"><a id="faq.threads_i386"></a><a id="q-threads_i386"></a><p><strong>4.5.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.threads_i386"></a><a id="q-threads_i386"></a><p><strong>4.5.</strong></p></td><td align="left" valign="top"><p>
+ Threading is broken on i386?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-threads_i386"></a></td><td align="left" valign="top"><p>
+ </p><p>Support for atomic integer operations is/was broken on i386
+@@ -459,7 +458,7 @@
+ on an i686, then you would encounter no problems. Only when
+ actually running the code on a i386 will the problem appear.
+ </p><p>This is fixed in 3.2.2.
+- </p></td></tr><tr class="question" title="4.6."><td align="left" valign="top"><a id="faq.atomic_mips"></a><a id="q-atomic_mips"></a><p><strong>4.6.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.atomic_mips"></a><a id="q-atomic_mips"></a><p><strong>4.6.</strong></p></td><td align="left" valign="top"><p>
+ MIPS atomic operations
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-atomic_mips"></a></td><td align="left" valign="top"><p>
+ The atomic locking routines for MIPS targets requires MIPS II
+@@ -469,7 +468,7 @@
+ </p><p>
+ The mips*-*-linux* port continues to use the MIPS II routines, and more
+ work in this area is expected.
+- </p></td></tr><tr class="question" title="4.7."><td align="left" valign="top"><a id="faq.linux_glibc"></a><a id="q-linux_glibc"></a><p><strong>4.7.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.linux_glibc"></a><a id="q-linux_glibc"></a><p><strong>4.7.</strong></p></td><td align="left" valign="top"><p>
+ Recent GNU/Linux glibc required?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-linux_glibc"></a></td><td align="left" valign="top"><p>When running on GNU/Linux, libstdc++ 3.2.1 (shared library version
+ 5.0.1) and later uses localization and formatting code from the system
+@@ -480,7 +479,7 @@
+ </p><p>The guideline is simple: the more recent the C++ library, the
+ more recent the C library. (This is also documented in the main
+ GCC installation instructions.)
+- </p></td></tr><tr class="question" title="4.8."><td align="left" valign="top"><a id="faq.freebsd_wchar"></a><a id="q-freebsd_wchar"></a><p><strong>4.8.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.freebsd_wchar"></a><a id="q-freebsd_wchar"></a><p><strong>4.8.</strong></p></td><td align="left" valign="top"><p>
+ Can't use wchar_t/wstring on FreeBSD
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-freebsd_wchar"></a></td><td align="left" valign="top"><p>
+ Older versions of FreeBSD's C library do not have sufficient
+@@ -499,7 +498,7 @@
+ Bugs in the ISO C++ language or library specification
+ </a></dt><dt>5.3. <a href="faq.html#faq.compiler_bugs">
+ Bugs in the compiler (gcc/g++) and not libstdc++
+- </a></dt></dl></td></tr><tr class="question" title="5.1."><td align="left" valign="top"><a id="faq.what_works"></a><a id="q-what_works"></a><p><strong>5.1.</strong></p></td><td align="left" valign="top"><p>
++ </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what_works"></a><a id="q-what_works"></a><p><strong>5.1.</strong></p></td><td align="left" valign="top"><p>
+ What works already?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_works"></a></td><td align="left" valign="top"><p>
+ Short answer: Pretty much everything <span class="emphasis"><em>works</em></span>
+@@ -513,7 +512,7 @@
+ <a class="link" href="manual/status.html#status.iso.1998" title="C++ 1998/2003">C++98</a>,
+ <a class="link" href="manual/status.html#status.iso.tr1" title="C++ TR1">TR1</a>, and
+ <a class="link" href="manual/status.html#status.iso.2011" title="C++ 2011">C++11</a>.
+- </p></td></tr><tr class="question" title="5.2."><td align="left" valign="top"><a id="faq.standard_bugs"></a><a id="q-standard_bugs"></a><p><strong>5.2.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.standard_bugs"></a><a id="q-standard_bugs"></a><p><strong>5.2.</strong></p></td><td align="left" valign="top"><p>
+ Bugs in the ISO C++ language or library specification
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-standard_bugs"></a></td><td align="left" valign="top"><p>
+ Unfortunately, there are some.
+@@ -528,7 +527,7 @@
+ If you think you've discovered a new bug that is not listed,
+ please post a message describing your problem to the author of
+ the library issues list or the Usenet group comp.lang.c++.moderated.
+- </p></td></tr><tr class="question" title="5.3."><td align="left" valign="top"><a id="faq.compiler_bugs"></a><a id="q-compiler_bugs"></a><p><strong>5.3.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.compiler_bugs"></a><a id="q-compiler_bugs"></a><p><strong>5.3.</strong></p></td><td align="left" valign="top"><p>
+ Bugs in the compiler (gcc/g++) and not libstdc++
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-compiler_bugs"></a></td><td align="left" valign="top"><p>
+ On occasion, the compiler is wrong. Please be advised that this
+@@ -563,7 +562,7 @@
+ list::size() is O(n)!
+ </a></dt><dt>6.9. <a href="faq.html#faq.easy_to_fix">
+ Aw, that's easy to fix!
+- </a></dt></dl></td></tr><tr class="question" title="6.1."><td align="left" valign="top"><a id="faq.stream_reopening_fails"></a><a id="q-stream_reopening_fails"></a><p><strong>6.1.</strong></p></td><td align="left" valign="top"><p>
++ </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.stream_reopening_fails"></a><a id="q-stream_reopening_fails"></a><p><strong>6.1.</strong></p></td><td align="left" valign="top"><p>
+ Reopening a stream fails
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-stream_reopening_fails"></a></td><td align="left" valign="top"><p>
+ One of the most-reported non-bug reports. Executing a sequence like:
+@@ -590,7 +589,7 @@
+ <span class="emphasis"><em>Update:</em></span> for GCC 4.0 we implemented the resolution
+ of <a class="link" href="manual/bugs.html" title="Bugs">DR #409</a> and open()
+ now calls <code class="function">clear()</code> on success!
+- </p></td></tr><tr class="question" title="6.2."><td align="left" valign="top"><a id="faq.wefcxx_verbose"></a><a id="q-wefcxx_verbose"></a><p><strong>6.2.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.wefcxx_verbose"></a><a id="q-wefcxx_verbose"></a><p><strong>6.2.</strong></p></td><td align="left" valign="top"><p>
+ -Weffc++ complains too much
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-wefcxx_verbose"></a></td><td align="left" valign="top"><p>
+ Many warnings are emitted when <code class="literal">-Weffc++</code> is used. Making
+@@ -602,7 +601,7 @@
+ We do, however, try to have libstdc++ sources as clean as possible. If
+ you see some simple changes that pacify <code class="literal">-Weffc++</code>
+ without other drawbacks, send us a patch.
+- </p></td></tr><tr class="question" title="6.3."><td align="left" valign="top"><a id="faq.ambiguous_overloads"></a><a id="q-ambiguous_overloads"></a><p><strong>6.3.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.ambiguous_overloads"></a><a id="q-ambiguous_overloads"></a><p><strong>6.3.</strong></p></td><td align="left" valign="top"><p>
+ Ambiguous overloads after including an old-style header
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-ambiguous_overloads"></a></td><td align="left" valign="top"><p>
+ Another problem is the <code class="literal">rel_ops</code> namespace and the template
+@@ -614,7 +613,7 @@
+ <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2001-01/msg00247.html" target="_top">sums
+ things up here</a>. The collisions with vector/string iterator
+ types have been fixed for 3.1.
+- </p></td></tr><tr class="question" title="6.4."><td align="left" valign="top"><a id="faq.v2_headers"></a><a id="q-v2_headers"></a><p><strong>6.4.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.v2_headers"></a><a id="q-v2_headers"></a><p><strong>6.4.</strong></p></td><td align="left" valign="top"><p>
+ The g++-3 headers are <span class="emphasis"><em>not ours</em></span>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-v2_headers"></a></td><td align="left" valign="top"><p>
+ If you are using headers in
+@@ -630,7 +629,7 @@
+ 'v'?). Starting with version 3.2 the headers are installed in
+ <code class="filename">${prefix}/include/c++/${version}</code> as this prevents
+ headers from previous versions being found by mistake.
+- </p></td></tr><tr class="question" title="6.5."><td align="left" valign="top"><a id="faq.boost_concept_checks"></a><a id="q-boost_concept_checks"></a><p><strong>6.5.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.boost_concept_checks"></a><a id="q-boost_concept_checks"></a><p><strong>6.5.</strong></p></td><td align="left" valign="top"><p>
+ Errors about <span class="emphasis"><em>*Concept</em></span> and
+ <span class="emphasis"><em>constraints</em></span> in the STL
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-boost_concept_checks"></a></td><td align="left" valign="top"><p>
+@@ -647,7 +646,7 @@
+ checks, is available in the
+ <a class="link" href="manual/bk01pt02ch05s02.html" title="Concept Checking">Diagnostics</a>.
+ chapter of the manual.
+- </p></td></tr><tr class="question" title="6.6."><td align="left" valign="top"><a id="faq.dlopen_crash"></a><a id="q-dlopen_crash"></a><p><strong>6.6.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.dlopen_crash"></a><a id="q-dlopen_crash"></a><p><strong>6.6.</strong></p></td><td align="left" valign="top"><p>
+ Program crashes when using library code in a
+ dynamically-loaded library
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-dlopen_crash"></a></td><td align="left" valign="top"><p>
+@@ -666,7 +665,7 @@
+ <br />
+     // link the executable<br />
+     g++ -fPIC -rdynamic -o foo ... -L. -lfoo -ldl<br />
+-    </p></div></td></tr><tr class="question" title="6.7."><td align="left" valign="top"><a id="faq.memory_leaks"></a><a id="q-memory_leaks"></a><p><strong>6.7.</strong></p></td><td align="left" valign="top"><p>
++    </p></div></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.memory_leaks"></a><a id="q-memory_leaks"></a><p><strong>6.7.</strong></p></td><td align="left" valign="top"><p>
+ <span class="quote">“<span class="quote">Memory leaks</span>”</span> in containers
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-memory_leaks"></a></td><td align="left" valign="top"><p>
+ A few people have reported that the standard containers appear
+@@ -679,13 +678,13 @@
+ want to test the library for memory leaks please read
+ <a class="link" href="manual/debug.html#debug.memory" title="Memory Leak Hunting">Tips for memory leak hunting</a>
+ first.
+- </p></td></tr><tr class="question" title="6.8."><td align="left" valign="top"><a id="faq.list_size_on"></a><a id="q-list_size_on"></a><p><strong>6.8.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.list_size_on"></a><a id="q-list_size_on"></a><p><strong>6.8.</strong></p></td><td align="left" valign="top"><p>
+ list::size() is O(n)!
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-list_size_on"></a></td><td align="left" valign="top"><p>
+ See
+ the <a class="link" href="manual/containers.html" title="Chapter 9.  Containers">Containers</a>
+ chapter.
+- </p></td></tr><tr class="question" title="6.9."><td align="left" valign="top"><a id="faq.easy_to_fix"></a><a id="q-easy_to_fix"></a><p><strong>6.9.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.easy_to_fix"></a><a id="q-easy_to_fix"></a><p><strong>6.9.</strong></p></td><td align="left" valign="top"><p>
+ Aw, that's easy to fix!
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-easy_to_fix"></a></td><td align="left" valign="top"><p>
+ If you have found a bug in the library and you think you have
+@@ -718,7 +717,7 @@
+ What's an ABI and why is it so messy?
+ </a></dt><dt>7.8. <a href="faq.html#faq.size_equals_capacity">
+ How do I make std::vector&lt;T&gt;::capacity() == std::vector&lt;T&gt;::size?
+- </a></dt></dl></td></tr><tr class="question" title="7.1."><td align="left" valign="top"><a id="faq.iterator_as_pod"></a><a id="faq.iterator_as_pod_q"></a><p><strong>7.1.</strong></p></td><td align="left" valign="top"><p>
++ </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.iterator_as_pod"></a><a id="faq.iterator_as_pod_q"></a><p><strong>7.1.</strong></p></td><td align="left" valign="top"><p>
+ string::iterator is not char*; vector&lt;T&gt;::iterator is not T*
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="faq.iterator_as_pod_a"></a></td><td align="left" valign="top"><p>
+ If you have code that depends on container&lt;T&gt; iterators
+@@ -737,7 +736,7 @@
+ certain expressions to <code class="varname">&amp;*i</code>. Future revisions
+ of the Standard are expected to bless this usage for
+ vector&lt;&gt; (but not for basic_string&lt;&gt;).
+- </p></td></tr><tr class="question" title="7.2."><td align="left" valign="top"><a id="faq.what_is_next"></a><a id="q-what_is_next"></a><p><strong>7.2.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what_is_next"></a><a id="q-what_is_next"></a><p><strong>7.2.</strong></p></td><td align="left" valign="top"><p>
+ What's next after libstdc++?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_next"></a></td><td align="left" valign="top"><p>
+ Hopefully, not much. The goal of libstdc++ is to produce a
+@@ -750,7 +749,7 @@
+ this effort is described in
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf" target="_top">
+ The C++ Library Technical Report 1</a>.
+- </p></td></tr><tr class="question" title="7.3."><td align="left" valign="top"><a id="faq.sgi_stl"></a><a id="q-sgi_stl"></a><p><strong>7.3.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.sgi_stl"></a><a id="q-sgi_stl"></a><p><strong>7.3.</strong></p></td><td align="left" valign="top"><p>
+ What about the STL from SGI?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-sgi_stl"></a></td><td align="left" valign="top"><p>
+ The <a class="link" href="http://www.sgi.com/tech/stl/" target="_top">STL from SGI</a>,
+@@ -773,11 +772,11 @@
+ </p><p>
+ The FAQ for SGI's STL (one jump off of their main page) is
+ still recommended reading.
+- </p></td></tr><tr class="question" title="7.4."><td align="left" valign="top"><a id="faq.extensions_and_backwards_compat"></a><a id="q-extensions_and_backwards_compat"></a><p><strong>7.4.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.extensions_and_backwards_compat"></a><a id="q-extensions_and_backwards_compat"></a><p><strong>7.4.</strong></p></td><td align="left" valign="top"><p>
+ Extensions and Backward Compatibility
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-extensions_and_backwards_compat"></a></td><td align="left" valign="top"><p>
+ See the <a class="link" href="manual/backwards.html" title="Backwards Compatibility">link</a> on backwards compatibility and <a class="link" href="manual/api.html" title="API Evolution and Deprecation History">link</a> on evolution.
+- </p></td></tr><tr class="question" title="7.5."><td align="left" valign="top"><a id="faq.tr1_support"></a><a id="q-tr1_support"></a><p><strong>7.5.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.tr1_support"></a><a id="q-tr1_support"></a><p><strong>7.5.</strong></p></td><td align="left" valign="top"><p>
+ Does libstdc++ support TR1?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-tr1_support"></a></td><td align="left" valign="top"><p>
+ Yes.
+@@ -789,7 +788,7 @@
+ </p><p>
+ The implementation status of TR1 in libstdc++ can be tracked <a class="link" href="manual/status.html#status.iso.tr1" title="C++ TR1">on the TR1 status
+ page</a>.
+- </p></td></tr><tr class="question" title="7.6."><td align="left" valign="top"><a id="faq.get_iso_cxx"></a><a id="q-get_iso_cxx"></a><p><strong>7.6.</strong></p></td><td align="left" valign="top"><p>How do I get a copy of the ISO C++ Standard?
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.get_iso_cxx"></a><a id="q-get_iso_cxx"></a><p><strong>7.6.</strong></p></td><td align="left" valign="top"><p>How do I get a copy of the ISO C++ Standard?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-get_iso_cxx"></a></td><td align="left" valign="top"><p>
+ Copies of the full ISO 14882 standard are available on line via
+ the ISO mirror site for committee members. Non-members, or those
+@@ -808,7 +807,7 @@
+ </p><p>
+ The 2003 version of the standard (the 1998 version plus TC1) is
+ available in print, ISBN 0-470-84674-7.
+- </p></td></tr><tr class="question" title="7.7."><td align="left" valign="top"><a id="faq.what_is_abi"></a><a id="q-what_is_abi"></a><p><strong>7.7.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what_is_abi"></a><a id="q-what_is_abi"></a><p><strong>7.7.</strong></p></td><td align="left" valign="top"><p>
+ What's an ABI and why is it so messy?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_abi"></a></td><td align="left" valign="top"><p>
+ <acronym class="acronym">ABI</acronym> stands for <span class="quote">“<span class="quote">Application Binary
+@@ -856,7 +855,7 @@
+ so they may later be changed. Deciding which, and implementing
+ the decisions, must happen before you can reasonably document a
+ candidate C++ ABI that encompasses the standard library.
+- </p></td></tr><tr class="question" title="7.8."><td align="left" valign="top"><a id="faq.size_equals_capacity"></a><a id="q-size_equals_capacity"></a><p><strong>7.8.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.size_equals_capacity"></a><a id="q-size_equals_capacity"></a><p><strong>7.8.</strong></p></td><td align="left" valign="top"><p>
+ How do I make std::vector&lt;T&gt;::capacity() == std::vector&lt;T&gt;::size?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-size_equals_capacity"></a></td><td align="left" valign="top"><p>
+ The standard idiom for deallocating a <code class="classname">vector&lt;T&gt;</code>'s
+@@ -869,4 +868,4 @@
+ </p><p>
+ See <a class="link" href="manual/strings.html#strings.string.shrink" title="Shrink to Fit">Shrink-to-fit
+ strings</a> for a similar solution for strings.
+- </p></td></tr></tbody></table></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk03.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
++ </p></td></tr></tbody></table></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk03.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/index.html
++++ b/src/libstdc++-v3/doc/html/index.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="description" content="Short Contents Copyright 2008, 2009, 2011 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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="The GNU C++ Library" 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" title="Short Contents"><a id="contents"></a><p class="title"><strong>Short Contents</strong></p><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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 2008, 2009, 2011 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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ Copyright 2008, 2009, 2011
+ <a class="link" href="http://www.fsf.org/" target="_top">FSF
+ </a>
+@@ -14,14 +13,14 @@
+ This is the top level of the libstdc++ documentation set. The
+ documentation is divided into the following three sections.
+ </p><p>
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <a class="link" href="manual/index.html" title="The GNU C++ Library Manual">Manual</a>
+ </p></li><li class="listitem"><p>
+ <a class="link" href="faq.html" title="Frequently Asked Questions">Frequently Asked Questions</a>
+ </p></li><li class="listitem"><p>
+ <a class="link" href="api.html" title="The GNU C++ Library API Reference">API and Source Documentation</a>
+ </p></li></ul></div><p>
+- </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.
++ </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.
+ Introduction
+
+ </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/bk01pt02.html">II.
+@@ -35,13 +34,13 @@
+ </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/bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/utilities.html">6.
+ Utilities
+
+-</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#idp13894640">Interface Design</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp13898192">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp13911488">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#idp15484560">Class Hierarchy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15507072">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15514368">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15528992">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#idp15545344">Examples</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15548928">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.
++</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#idm269988298944">Interface Design</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269988295392">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269988282096">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#idm269986714912">Class Hierarchy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269986692400">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269986685104">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269986670480">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#idm269986654128">Examples</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269986650544">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.
+ Strings
+
+ </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.
+ Localization
+
+-</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#idp15752864">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.
++</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#idm269986448912">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.
+ Containers
+
+ </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/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.
+@@ -163,4 +162,4 @@
+
+ </a></span></dt><dt><span class="appendix"><a href="manual/appendix_gpl.html">D.
+ <acronym class="acronym">GNU</acronym> General Public License version 3
+- </a></span></dt><dt><span class="appendix"><a href="manual/appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></dd><dt><span class="book"><a href="bk02.html"></a></span></dt><dd><dl><dt><span class="article"><a href="api.html">The GNU C++ Library API Reference</a></span></dt></dl></dd><dt><span class="book"><a href="bk03.html"></a></span></dt><dd><dl><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="manual/index.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> The GNU C++ Library Manual</td></tr></table></div></body></html>
++ </a></span></dt><dt><span class="appendix"><a href="manual/appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></dd><dt><span class="book"><a href="bk02.html"></a></span></dt><dd><dl><dt><span class="article"><a href="api.html">The GNU C++ Library API Reference</a></span></dt></dl></dd><dt><span class="book"><a href="bk03.html"></a></span></dt><dd><dl><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="manual/index.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> The GNU C++ Library Manual</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/abi.html
++++ b/src/libstdc++-v3/doc/html/manual/abi.html
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; ABI&#10; , &#10; version&#10; , &#10; dynamic&#10; , &#10; shared&#10; , &#10; compatibility&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; ABI&#10; , &#10; version&#10; , &#10; dynamic&#10; , &#10; shared&#10; , &#10; compatibility&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Porting and Maintenance
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="section" title="ABI Policy and Guidelines"><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>
+-</p><div class="section" title="The C++ Interface"><div class="titlepage"><div><div><h3 class="title"><a id="abi.cxx_interface"></a>The C++ Interface</h3></div></div></div><p>
++</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>
++</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="abi.cxx_interface"></a>The C++ Interface</h3></div></div></div><p>
+ C++ applications often depend on specific language support
+ routines, say for throwing exceptions, or catching exceptions, and
+ perhaps also depend on features in the C++ Standard Library.
+@@ -58,10 +57,10 @@
+ To use a specific version of the C++ ABI, one must use a
+ corresponding GNU C++ toolchain (i.e., g++ and libstdc++) that
+ implements the C++ ABI in question.
+-</p></div><div class="section" title="Versioning"><div class="titlepage"><div><div><h3 class="title"><a id="abi.versioning"></a>Versioning</h3></div></div></div><p> The C++ interface has evolved throughout the history of the GNU
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="abi.versioning"></a>Versioning</h3></div></div></div><p> The C++ interface has evolved throughout the history of the GNU
+ C++ toolchain. With each release, various details have been changed so
+ as to give distinct versions to the C++ interface.
+-</p><div class="section" title="Goals"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.goals"></a>Goals</h4></div></div></div><p>Extending existing, stable ABIs. Versioning gives subsequent
++</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.goals"></a>Goals</h4></div></div></div><p>Extending existing, stable ABIs. Versioning gives subsequent
+ releases of library binaries the ability to add new symbols and add
+ functionality, all the while retaining compatibility with the previous
+ releases in the series. Thus, program binaries linked with the initial
+@@ -75,7 +74,7 @@
+ in the initial release of the library binary, and remain link
+ compatible.
+ </p><p>Allows multiple, incompatible ABIs to coexist at the same time.
+-</p></div><div class="section" title="History"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.history"></a>History</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.history"></a>History</h4></div></div></div><p>
+ How can this complexity be managed? What does C++ versioning mean?
+ Because library and compiler changes often make binaries compiled
+ with one version of the GNU tools incompatible with binaries
+@@ -87,9 +86,9 @@
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Release versioning on the libgcc_s.so binary. </p><p>This is implemented via file names and the ELF
+ <code class="constant">DT_SONAME</code> mechanism (at least on ELF
+ systems). It is versioned as follows:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.x: libgcc_s.so.1</p></li><li class="listitem"><p>GCC 4.x: libgcc_s.so.1</p></li></ul></div><p>For m68k-linux the versions differ as follows: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.4, GCC 4.x: libgcc_s.so.1
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.x: libgcc_s.so.1</p></li><li class="listitem"><p>GCC 4.x: libgcc_s.so.1</p></li></ul></div><p>For m68k-linux the versions differ as follows: </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.4, GCC 4.x: libgcc_s.so.1
+ when configuring <code class="code">--with-sjlj-exceptions</code>, or
+- libgcc_s.so.2 </p></li></ul></div><p>For hppa-linux the versions differ as follows: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.4, GCC 4.[0-1]: either libgcc_s.so.1
++ libgcc_s.so.2 </p></li></ul></div><p>For hppa-linux the versions differ as follows: </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.4, GCC 4.[0-1]: either libgcc_s.so.1
+ when configuring <code class="code">--with-sjlj-exceptions</code>, or
+ libgcc_s.so.2 </p></li><li class="listitem"><p>GCC 4.[2-7]: either libgcc_s.so.3 when configuring
+ <code class="code">--with-sjlj-exceptions</code>) or libgcc_s.so.4
+@@ -97,7 +96,7 @@
+ definitions, where the version definition is the maximum for a
+ particular release. Labels are cumulative. If a particular release
+ is not listed, it has the same version labels as the preceding
+- release.</p><p>This corresponds to the mapfile: gcc/libgcc-std.ver</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0.0: GCC_3.0</p></li><li class="listitem"><p>GCC 3.3.0: GCC_3.3</p></li><li class="listitem"><p>GCC 3.3.1: GCC_3.3.1</p></li><li class="listitem"><p>GCC 3.3.2: GCC_3.3.2</p></li><li class="listitem"><p>GCC 3.3.4: GCC_3.3.4</p></li><li class="listitem"><p>GCC 3.4.0: GCC_3.4</p></li><li class="listitem"><p>GCC 3.4.2: GCC_3.4.2</p></li><li class="listitem"><p>GCC 3.4.4: GCC_3.4.4</p></li><li class="listitem"><p>GCC 4.0.0: GCC_4.0.0</p></li><li class="listitem"><p>GCC 4.1.0: GCC_4.1.0</p></li><li class="listitem"><p>GCC 4.2.0: GCC_4.2.0</p></li><li class="listitem"><p>GCC 4.3.0: GCC_4.3.0</p></li><li class="listitem"><p>GCC 4.4.0: GCC_4.4.0</p></li><li class="listitem"><p>GCC 4.5.0: GCC_4.5.0</p></li><li class="listitem"><p>GCC 4.6.0: GCC_4.6.0</p></li><li class="listitem"><p>GCC 4.7.0: GCC_4.7.0</p></li></ul></div></li><li class="listitem"><p>
++ release.</p><p>This corresponds to the mapfile: gcc/libgcc-std.ver</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: GCC_3.0</p></li><li class="listitem"><p>GCC 3.3.0: GCC_3.3</p></li><li class="listitem"><p>GCC 3.3.1: GCC_3.3.1</p></li><li class="listitem"><p>GCC 3.3.2: GCC_3.3.2</p></li><li class="listitem"><p>GCC 3.3.4: GCC_3.3.4</p></li><li class="listitem"><p>GCC 3.4.0: GCC_3.4</p></li><li class="listitem"><p>GCC 3.4.2: GCC_3.4.2</p></li><li class="listitem"><p>GCC 3.4.4: GCC_3.4.4</p></li><li class="listitem"><p>GCC 4.0.0: GCC_4.0.0</p></li><li class="listitem"><p>GCC 4.1.0: GCC_4.1.0</p></li><li class="listitem"><p>GCC 4.2.0: GCC_4.2.0</p></li><li class="listitem"><p>GCC 4.3.0: GCC_4.3.0</p></li><li class="listitem"><p>GCC 4.4.0: GCC_4.4.0</p></li><li class="listitem"><p>GCC 4.5.0: GCC_4.5.0</p></li><li class="listitem"><p>GCC 4.6.0: GCC_4.6.0</p></li><li class="listitem"><p>GCC 4.7.0: GCC_4.7.0</p></li></ul></div></li><li class="listitem"><p>
+ Release versioning on the libstdc++.so binary, implemented in
+ the same way as the libgcc_s.so binary above. Listed is the
+ filename: <code class="constant">DT_SONAME</code> can be deduced from
+@@ -112,7 +111,7 @@
+ has the same filename and <code class="constant">DT_SONAME</code> as the
+ preceding release.
+ </p><p>It is versioned as follows:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0.0: libstdc++.so.3.0.0</p></li><li class="listitem"><p>GCC 3.0.1: libstdc++.so.3.0.1</p></li><li class="listitem"><p>GCC 3.0.2: libstdc++.so.3.0.2</p></li><li class="listitem"><p>GCC 3.0.3: libstdc++.so.3.0.2 (See Note 1)</p></li><li class="listitem"><p>GCC 3.0.4: libstdc++.so.3.0.4</p></li><li class="listitem"><p>GCC 3.1.0: libstdc++.so.4.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>GCC 3.1.1: libstdc++.so.4.0.1</p></li><li class="listitem"><p>GCC 3.2.0: libstdc++.so.5.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>GCC 3.2.1: libstdc++.so.5.0.1</p></li><li class="listitem"><p>GCC 3.2.2: libstdc++.so.5.0.2</p></li><li class="listitem"><p>GCC 3.2.3: libstdc++.so.5.0.3 (See Note 2)</p></li><li class="listitem"><p>GCC 3.3.0: libstdc++.so.5.0.4</p></li><li class="listitem"><p>GCC 3.3.1: libstdc++.so.5.0.5</p></li><li class="listitem"><p>GCC 3.4.0: libstdc++.so.6.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>GCC 3.4.1: libstdc++.so.6.0.1</p></li><li class="listitem"><p>GCC 3.4.2: libstdc++.so.6.0.2</p></li><li class="listitem"><p>GCC 3.4.3: libstdc++.so.6.0.3</p></li><li class="listitem"><p>GCC 4.0.0: libstdc++.so.6.0.4</p></li><li class="listitem"><p>GCC 4.0.1: libstdc++.so.6.0.5</p></li><li class="listitem"><p>GCC 4.0.2: libstdc++.so.6.0.6</p></li><li class="listitem"><p>GCC 4.0.3: libstdc++.so.6.0.7</p></li><li class="listitem"><p>GCC 4.1.0: libstdc++.so.6.0.7</p></li><li class="listitem"><p>GCC 4.1.1: libstdc++.so.6.0.8</p></li><li class="listitem"><p>GCC 4.2.0: libstdc++.so.6.0.9</p></li><li class="listitem"><p>GCC 4.2.1: libstdc++.so.6.0.9 (See Note 3)</p></li><li class="listitem"><p>GCC 4.2.2: libstdc++.so.6.0.9</p></li><li class="listitem"><p>GCC 4.3.0: libstdc++.so.6.0.10</p></li><li class="listitem"><p>GCC 4.4.0: libstdc++.so.6.0.11</p></li><li class="listitem"><p>GCC 4.4.1: libstdc++.so.6.0.12</p></li><li class="listitem"><p>GCC 4.4.2: libstdc++.so.6.0.13</p></li><li class="listitem"><p>GCC 4.5.0: libstdc++.so.6.0.14</p></li><li class="listitem"><p>GCC 4.6.0: libstdc++.so.6.0.15</p></li><li class="listitem"><p>GCC 4.6.1: libstdc++.so.6.0.16</p></li></ul></div><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: libstdc++.so.3.0.0</p></li><li class="listitem"><p>GCC 3.0.1: libstdc++.so.3.0.1</p></li><li class="listitem"><p>GCC 3.0.2: libstdc++.so.3.0.2</p></li><li class="listitem"><p>GCC 3.0.3: libstdc++.so.3.0.2 (See Note 1)</p></li><li class="listitem"><p>GCC 3.0.4: libstdc++.so.3.0.4</p></li><li class="listitem"><p>GCC 3.1.0: libstdc++.so.4.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>GCC 3.1.1: libstdc++.so.4.0.1</p></li><li class="listitem"><p>GCC 3.2.0: libstdc++.so.5.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>GCC 3.2.1: libstdc++.so.5.0.1</p></li><li class="listitem"><p>GCC 3.2.2: libstdc++.so.5.0.2</p></li><li class="listitem"><p>GCC 3.2.3: libstdc++.so.5.0.3 (See Note 2)</p></li><li class="listitem"><p>GCC 3.3.0: libstdc++.so.5.0.4</p></li><li class="listitem"><p>GCC 3.3.1: libstdc++.so.5.0.5</p></li><li class="listitem"><p>GCC 3.4.0: libstdc++.so.6.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>GCC 3.4.1: libstdc++.so.6.0.1</p></li><li class="listitem"><p>GCC 3.4.2: libstdc++.so.6.0.2</p></li><li class="listitem"><p>GCC 3.4.3: libstdc++.so.6.0.3</p></li><li class="listitem"><p>GCC 4.0.0: libstdc++.so.6.0.4</p></li><li class="listitem"><p>GCC 4.0.1: libstdc++.so.6.0.5</p></li><li class="listitem"><p>GCC 4.0.2: libstdc++.so.6.0.6</p></li><li class="listitem"><p>GCC 4.0.3: libstdc++.so.6.0.7</p></li><li class="listitem"><p>GCC 4.1.0: libstdc++.so.6.0.7</p></li><li class="listitem"><p>GCC 4.1.1: libstdc++.so.6.0.8</p></li><li class="listitem"><p>GCC 4.2.0: libstdc++.so.6.0.9</p></li><li class="listitem"><p>GCC 4.2.1: libstdc++.so.6.0.9 (See Note 3)</p></li><li class="listitem"><p>GCC 4.2.2: libstdc++.so.6.0.9</p></li><li class="listitem"><p>GCC 4.3.0: libstdc++.so.6.0.10</p></li><li class="listitem"><p>GCC 4.4.0: libstdc++.so.6.0.11</p></li><li class="listitem"><p>GCC 4.4.1: libstdc++.so.6.0.12</p></li><li class="listitem"><p>GCC 4.4.2: libstdc++.so.6.0.13</p></li><li class="listitem"><p>GCC 4.5.0: libstdc++.so.6.0.14</p></li><li class="listitem"><p>GCC 4.6.0: libstdc++.so.6.0.15</p></li><li class="listitem"><p>GCC 4.6.1: libstdc++.so.6.0.16</p></li><li class="listitem"><p>GCC 4.7.0: libstdc++.so.6.0.17</p></li></ul></div><p>
+ Note 1: Error should be libstdc++.so.3.0.3.
+ </p><p>
+ Note 2: Not strictly required.
+@@ -130,7 +129,7 @@
+ GLIBCPP_3.2 for symbols that were introduced in the GCC 3.2.0
+ release.) If a particular release is not listed, it has the same
+ version labels as the preceding release.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0.0: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.1: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.2: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.3: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.4: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.1.0: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>GCC 3.1.1: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>GCC 3.2.0: GLIBCPP_3.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.1: GLIBCPP_3.2.1, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.2: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.3: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.3.0: GLIBCPP_3.2.2, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.1: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.2: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.3: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.4.0: GLIBCXX_3.4, CXXABI_1.3</p></li><li class="listitem"><p>GCC 3.4.1: GLIBCXX_3.4.1, CXXABI_1.3</p></li><li class="listitem"><p>GCC 3.4.2: GLIBCXX_3.4.2</p></li><li class="listitem"><p>GCC 3.4.3: GLIBCXX_3.4.3</p></li><li class="listitem"><p>GCC 4.0.0: GLIBCXX_3.4.4, CXXABI_1.3.1</p></li><li class="listitem"><p>GCC 4.0.1: GLIBCXX_3.4.5</p></li><li class="listitem"><p>GCC 4.0.2: GLIBCXX_3.4.6</p></li><li class="listitem"><p>GCC 4.0.3: GLIBCXX_3.4.7</p></li><li class="listitem"><p>GCC 4.1.1: GLIBCXX_3.4.8</p></li><li class="listitem"><p>GCC 4.2.0: GLIBCXX_3.4.9</p></li><li class="listitem"><p>GCC 4.3.0: GLIBCXX_3.4.10, CXXABI_1.3.2</p></li><li class="listitem"><p>GCC 4.4.0: GLIBCXX_3.4.11, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.4.1: GLIBCXX_3.4.12, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.4.2: GLIBCXX_3.4.13, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.5.0: GLIBCXX_3.4.14, CXXABI_1.3.4</p></li><li class="listitem"><p>GCC 4.6.0: GLIBCXX_3.4.15, CXXABI_1.3.5</p></li><li class="listitem"><p>GCC 4.6.1: GLIBCXX_3.4.16, CXXABI_1.3.5</p></li></ul></div></li><li class="listitem"><p>Incremental bumping of a compiler pre-defined macro,
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.1: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.2: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.3: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.4: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.1.0: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>GCC 3.1.1: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>GCC 3.2.0: GLIBCPP_3.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.1: GLIBCPP_3.2.1, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.2: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.3: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.3.0: GLIBCPP_3.2.2, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.1: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.2: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.3: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.4.0: GLIBCXX_3.4, CXXABI_1.3</p></li><li class="listitem"><p>GCC 3.4.1: GLIBCXX_3.4.1, CXXABI_1.3</p></li><li class="listitem"><p>GCC 3.4.2: GLIBCXX_3.4.2</p></li><li class="listitem"><p>GCC 3.4.3: GLIBCXX_3.4.3</p></li><li class="listitem"><p>GCC 4.0.0: GLIBCXX_3.4.4, CXXABI_1.3.1</p></li><li class="listitem"><p>GCC 4.0.1: GLIBCXX_3.4.5</p></li><li class="listitem"><p>GCC 4.0.2: GLIBCXX_3.4.6</p></li><li class="listitem"><p>GCC 4.0.3: GLIBCXX_3.4.7</p></li><li class="listitem"><p>GCC 4.1.1: GLIBCXX_3.4.8</p></li><li class="listitem"><p>GCC 4.2.0: GLIBCXX_3.4.9</p></li><li class="listitem"><p>GCC 4.3.0: GLIBCXX_3.4.10, CXXABI_1.3.2</p></li><li class="listitem"><p>GCC 4.4.0: GLIBCXX_3.4.11, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.4.1: GLIBCXX_3.4.12, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.4.2: GLIBCXX_3.4.13, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.5.0: GLIBCXX_3.4.14, CXXABI_1.3.4</p></li><li class="listitem"><p>GCC 4.6.0: GLIBCXX_3.4.15, CXXABI_1.3.5</p></li><li class="listitem"><p>GCC 4.6.1: GLIBCXX_3.4.16, CXXABI_1.3.5</p></li><li class="listitem"><p>GCC 4.7.0: GLIBCXX_3.4.17, CXXABI_1.3.6</p></li></ul></div></li><li class="listitem"><p>Incremental bumping of a compiler pre-defined macro,
+ __GXX_ABI_VERSION. This macro is defined as the version of the
+ compiler v3 ABI, with g++ 3.0 being version 100. This macro will
+ be automatically defined whenever g++ is used (the curious can
+@@ -142,11 +141,11 @@
+ '-fabi-version' command line option.
+ </p><p>
+ It is versioned as follows, where 'n' is given by '-fabi-version=n':
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0: 100</p></li><li class="listitem"><p>GCC 3.1: 100 (Error, should be 101)</p></li><li class="listitem"><p>GCC 3.2: 102</p></li><li class="listitem"><p>GCC 3.3: 102</p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: 102 (when n=1)</p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: 1000 + n (when n&gt;1) </p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: 999999 (when n=0)</p></li></ul></div><p></p></li><li class="listitem"><p>Changes to the default compiler option for
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0: 100</p></li><li class="listitem"><p>GCC 3.1: 100 (Error, should be 101)</p></li><li class="listitem"><p>GCC 3.2: 102</p></li><li class="listitem"><p>GCC 3.3: 102</p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: 102 (when n=1)</p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: 1000 + n (when n&gt;1) </p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: 999999 (when n=0)</p></li></ul></div><p></p></li><li class="listitem"><p>Changes to the default compiler option for
+ <code class="code">-fabi-version</code>.
+ </p><p>
+ It is versioned as follows:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0: (Error, not versioned) </p></li><li class="listitem"><p>GCC 3.1: (Error, not versioned) </p></li><li class="listitem"><p>GCC 3.2: <code class="code">-fabi-version=1</code></p></li><li class="listitem"><p>GCC 3.3: <code class="code">-fabi-version=1</code></p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: <code class="code">-fabi-version=2</code> <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li></ul></div><p></p></li><li class="listitem"><p>Incremental bumping of a library pre-defined macro. For releases
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0: (Error, not versioned) </p></li><li class="listitem"><p>GCC 3.1: (Error, not versioned) </p></li><li class="listitem"><p>GCC 3.2: <code class="code">-fabi-version=1</code></p></li><li class="listitem"><p>GCC 3.3: <code class="code">-fabi-version=1</code></p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: <code class="code">-fabi-version=2</code> <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li></ul></div><p></p></li><li class="listitem"><p>Incremental bumping of a library pre-defined macro. For releases
+ before 3.4.0, the macro is __GLIBCPP__. For later releases, it's
+ __GLIBCXX__. (The libstdc++ project generously changed from CPP to
+ CXX throughout its source to allow the "C" pre-processor the CPP
+@@ -159,7 +158,7 @@
+ the same value as gcc/DATESTAMP.)
+ </p><p>
+ It is versioned as follows:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0.0: 20010615</p></li><li class="listitem"><p>GCC 3.0.1: 20010819</p></li><li class="listitem"><p>GCC 3.0.2: 20011023</p></li><li class="listitem"><p>GCC 3.0.3: 20011220</p></li><li class="listitem"><p>GCC 3.0.4: 20020220</p></li><li class="listitem"><p>GCC 3.1.0: 20020514</p></li><li class="listitem"><p>GCC 3.1.1: 20020725</p></li><li class="listitem"><p>GCC 3.2.0: 20020814</p></li><li class="listitem"><p>GCC 3.2.1: 20021119</p></li><li class="listitem"><p>GCC 3.2.2: 20030205</p></li><li class="listitem"><p>GCC 3.2.3: 20030422</p></li><li class="listitem"><p>GCC 3.3.0: 20030513</p></li><li class="listitem"><p>GCC 3.3.1: 20030804</p></li><li class="listitem"><p>GCC 3.3.2: 20031016</p></li><li class="listitem"><p>GCC 3.3.3: 20040214</p></li><li class="listitem"><p>GCC 3.4.0: 20040419</p></li><li class="listitem"><p>GCC 3.4.1: 20040701</p></li><li class="listitem"><p>GCC 3.4.2: 20040906</p></li><li class="listitem"><p>GCC 3.4.3: 20041105</p></li><li class="listitem"><p>GCC 3.4.4: 20050519</p></li><li class="listitem"><p>GCC 3.4.5: 20051201</p></li><li class="listitem"><p>GCC 3.4.6: 20060306</p></li><li class="listitem"><p>GCC 4.0.0: 20050421</p></li><li class="listitem"><p>GCC 4.0.1: 20050707</p></li><li class="listitem"><p>GCC 4.0.2: 20050921</p></li><li class="listitem"><p>GCC 4.0.3: 20060309</p></li><li class="listitem"><p>GCC 4.1.0: 20060228</p></li><li class="listitem"><p>GCC 4.1.1: 20060524</p></li><li class="listitem"><p>GCC 4.1.2: 20070214</p></li><li class="listitem"><p>GCC 4.2.0: 20070514</p></li><li class="listitem"><p>GCC 4.2.1: 20070719</p></li><li class="listitem"><p>GCC 4.2.2: 20071007</p></li><li class="listitem"><p>GCC 4.2.3: 20080201</p></li><li class="listitem"><p>GCC 4.2.4: 20080519</p></li><li class="listitem"><p>GCC 4.3.0: 20080306</p></li><li class="listitem"><p>GCC 4.3.1: 20080606</p></li><li class="listitem"><p>GCC 4.3.2: 20080827</p></li><li class="listitem"><p>GCC 4.3.3: 20090124</p></li><li class="listitem"><p>GCC 4.3.4: 20090804</p></li><li class="listitem"><p>GCC 4.3.5: 20100522</p></li><li class="listitem"><p>GCC 4.3.6: 20110627</p></li><li class="listitem"><p>GCC 4.4.0: 20090421</p></li><li class="listitem"><p>GCC 4.4.1: 20090722</p></li><li class="listitem"><p>GCC 4.4.2: 20091015</p></li><li class="listitem"><p>GCC 4.4.3: 20100121</p></li><li class="listitem"><p>GCC 4.4.4: 20100429</p></li><li class="listitem"><p>GCC 4.4.5: 20101001</p></li><li class="listitem"><p>GCC 4.4.6: 20110416</p></li><li class="listitem"><p>GCC 4.5.0: 20100414</p></li><li class="listitem"><p>GCC 4.5.1: 20100731</p></li><li class="listitem"><p>GCC 4.5.2: 20101216</p></li><li class="listitem"><p>GCC 4.5.3: 20110428</p></li><li class="listitem"><p>GCC 4.6.0: 20110325</p></li><li class="listitem"><p>GCC 4.6.1: 20110627</p></li><li class="listitem"><p>GCC 4.6.2: 20111026</p></li></ul></div><p></p></li><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: 20010615</p></li><li class="listitem"><p>GCC 3.0.1: 20010819</p></li><li class="listitem"><p>GCC 3.0.2: 20011023</p></li><li class="listitem"><p>GCC 3.0.3: 20011220</p></li><li class="listitem"><p>GCC 3.0.4: 20020220</p></li><li class="listitem"><p>GCC 3.1.0: 20020514</p></li><li class="listitem"><p>GCC 3.1.1: 20020725</p></li><li class="listitem"><p>GCC 3.2.0: 20020814</p></li><li class="listitem"><p>GCC 3.2.1: 20021119</p></li><li class="listitem"><p>GCC 3.2.2: 20030205</p></li><li class="listitem"><p>GCC 3.2.3: 20030422</p></li><li class="listitem"><p>GCC 3.3.0: 20030513</p></li><li class="listitem"><p>GCC 3.3.1: 20030804</p></li><li class="listitem"><p>GCC 3.3.2: 20031016</p></li><li class="listitem"><p>GCC 3.3.3: 20040214</p></li><li class="listitem"><p>GCC 3.4.0: 20040419</p></li><li class="listitem"><p>GCC 3.4.1: 20040701</p></li><li class="listitem"><p>GCC 3.4.2: 20040906</p></li><li class="listitem"><p>GCC 3.4.3: 20041105</p></li><li class="listitem"><p>GCC 3.4.4: 20050519</p></li><li class="listitem"><p>GCC 3.4.5: 20051201</p></li><li class="listitem"><p>GCC 3.4.6: 20060306</p></li><li class="listitem"><p>GCC 4.0.0: 20050421</p></li><li class="listitem"><p>GCC 4.0.1: 20050707</p></li><li class="listitem"><p>GCC 4.0.2: 20050921</p></li><li class="listitem"><p>GCC 4.0.3: 20060309</p></li><li class="listitem"><p>GCC 4.1.0: 20060228</p></li><li class="listitem"><p>GCC 4.1.1: 20060524</p></li><li class="listitem"><p>GCC 4.1.2: 20070214</p></li><li class="listitem"><p>GCC 4.2.0: 20070514</p></li><li class="listitem"><p>GCC 4.2.1: 20070719</p></li><li class="listitem"><p>GCC 4.2.2: 20071007</p></li><li class="listitem"><p>GCC 4.2.3: 20080201</p></li><li class="listitem"><p>GCC 4.2.4: 20080519</p></li><li class="listitem"><p>GCC 4.3.0: 20080306</p></li><li class="listitem"><p>GCC 4.3.1: 20080606</p></li><li class="listitem"><p>GCC 4.3.2: 20080827</p></li><li class="listitem"><p>GCC 4.3.3: 20090124</p></li><li class="listitem"><p>GCC 4.3.4: 20090804</p></li><li class="listitem"><p>GCC 4.3.5: 20100522</p></li><li class="listitem"><p>GCC 4.3.6: 20110627</p></li><li class="listitem"><p>GCC 4.4.0: 20090421</p></li><li class="listitem"><p>GCC 4.4.1: 20090722</p></li><li class="listitem"><p>GCC 4.4.2: 20091015</p></li><li class="listitem"><p>GCC 4.4.3: 20100121</p></li><li class="listitem"><p>GCC 4.4.4: 20100429</p></li><li class="listitem"><p>GCC 4.4.5: 20101001</p></li><li class="listitem"><p>GCC 4.4.6: 20110416</p></li><li class="listitem"><p>GCC 4.4.7: 20120313</p></li><li class="listitem"><p>GCC 4.5.0: 20100414</p></li><li class="listitem"><p>GCC 4.5.1: 20100731</p></li><li class="listitem"><p>GCC 4.5.2: 20101216</p></li><li class="listitem"><p>GCC 4.5.3: 20110428</p></li><li class="listitem"><p>GCC 4.5.4: 20120702</p></li><li class="listitem"><p>GCC 4.6.0: 20110325</p></li><li class="listitem"><p>GCC 4.6.1: 20110627</p></li><li class="listitem"><p>GCC 4.6.2: 20111026</p></li><li class="listitem"><p>GCC 4.6.3: 20120301</p></li><li class="listitem"><p>GCC 4.7.0: 20120322</p></li><li class="listitem"><p>GCC 4.7.1: 20120614</p></li><li class="listitem"><p>GCC 4.7.2: 20120920</p></li></ul></div><p></p></li><li class="listitem"><p>
+ Incremental bumping of a library pre-defined macro,
+ _GLIBCPP_VERSION. This macro is defined as the released version of
+ the library, as a string literal. This is only implemented in
+@@ -172,7 +171,7 @@
+ of config.h.
+ </p><p>
+ It is versioned as follows:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0.0: "3.0.0"</p></li><li class="listitem"><p>GCC 3.0.1: "3.0.0" (Error, should be "3.0.1")</p></li><li class="listitem"><p>GCC 3.0.2: "3.0.0" (Error, should be "3.0.2")</p></li><li class="listitem"><p>GCC 3.0.3: "3.0.0" (Error, should be "3.0.3")</p></li><li class="listitem"><p>GCC 3.0.4: "3.0.0" (Error, should be "3.0.4")</p></li><li class="listitem"><p>GCC 3.1.0: "3.1.0"</p></li><li class="listitem"><p>GCC 3.1.1: "3.1.1"</p></li><li class="listitem"><p>GCC 3.2.0: "3.2"</p></li><li class="listitem"><p>GCC 3.2.1: "3.2.1"</p></li><li class="listitem"><p>GCC 3.2.2: "3.2.2"</p></li><li class="listitem"><p>GCC 3.2.3: "3.2.3"</p></li><li class="listitem"><p>GCC 3.3.0: "3.3"</p></li><li class="listitem"><p>GCC 3.3.1: "3.3.1"</p></li><li class="listitem"><p>GCC 3.3.2: "3.3.2"</p></li><li class="listitem"><p>GCC 3.3.3: "3.3.3"</p></li><li class="listitem"><p>GCC 3.4: "version-unused"</p></li><li class="listitem"><p>GCC 4.x: "version-unused"</p></li></ul></div><p></p></li><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: "3.0.0"</p></li><li class="listitem"><p>GCC 3.0.1: "3.0.0" (Error, should be "3.0.1")</p></li><li class="listitem"><p>GCC 3.0.2: "3.0.0" (Error, should be "3.0.2")</p></li><li class="listitem"><p>GCC 3.0.3: "3.0.0" (Error, should be "3.0.3")</p></li><li class="listitem"><p>GCC 3.0.4: "3.0.0" (Error, should be "3.0.4")</p></li><li class="listitem"><p>GCC 3.1.0: "3.1.0"</p></li><li class="listitem"><p>GCC 3.1.1: "3.1.1"</p></li><li class="listitem"><p>GCC 3.2.0: "3.2"</p></li><li class="listitem"><p>GCC 3.2.1: "3.2.1"</p></li><li class="listitem"><p>GCC 3.2.2: "3.2.2"</p></li><li class="listitem"><p>GCC 3.2.3: "3.2.3"</p></li><li class="listitem"><p>GCC 3.3.0: "3.3"</p></li><li class="listitem"><p>GCC 3.3.1: "3.3.1"</p></li><li class="listitem"><p>GCC 3.3.2: "3.3.2"</p></li><li class="listitem"><p>GCC 3.3.3: "3.3.3"</p></li><li class="listitem"><p>GCC 3.4: "version-unused"</p></li><li class="listitem"><p>GCC 4.x: "version-unused"</p></li></ul></div><p></p></li><li class="listitem"><p>
+ Matching each specific C++ compiler release to a specific set of
+ C++ include files. This is only implemented in GCC 3.1.1 releases
+ and higher.
+@@ -185,13 +184,13 @@
+ file's macro GLIBCXX_CONFIGURE (GLIBCPP_CONFIGURE before GCC 3.4.0).
+ </p><p>
+ C++ includes are versioned as follows:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0.0: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.1: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.2: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.3: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.4: include/g++-v3</p></li><li class="listitem"><p>GCC 3.1.0: include/g++-v3</p></li><li class="listitem"><p>GCC 3.1.1: include/c++/3.1.1</p></li><li class="listitem"><p>GCC 3.2.0: include/c++/3.2</p></li><li class="listitem"><p>GCC 3.2.1: include/c++/3.2.1</p></li><li class="listitem"><p>GCC 3.2.2: include/c++/3.2.2</p></li><li class="listitem"><p>GCC 3.2.3: include/c++/3.2.3</p></li><li class="listitem"><p>GCC 3.3.0: include/c++/3.3</p></li><li class="listitem"><p>GCC 3.3.1: include/c++/3.3.1</p></li><li class="listitem"><p>GCC 3.3.2: include/c++/3.3.2</p></li><li class="listitem"><p>GCC 3.3.3: include/c++/3.3.3</p></li><li class="listitem"><p>GCC 3.4.x: include/c++/3.4.x</p></li><li class="listitem"><p>GCC 4.x.y: include/c++/4.x.y</p></li></ul></div><p></p></li></ol></div><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.1: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.2: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.3: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.4: include/g++-v3</p></li><li class="listitem"><p>GCC 3.1.0: include/g++-v3</p></li><li class="listitem"><p>GCC 3.1.1: include/c++/3.1.1</p></li><li class="listitem"><p>GCC 3.2.0: include/c++/3.2</p></li><li class="listitem"><p>GCC 3.2.1: include/c++/3.2.1</p></li><li class="listitem"><p>GCC 3.2.2: include/c++/3.2.2</p></li><li class="listitem"><p>GCC 3.2.3: include/c++/3.2.3</p></li><li class="listitem"><p>GCC 3.3.0: include/c++/3.3</p></li><li class="listitem"><p>GCC 3.3.1: include/c++/3.3.1</p></li><li class="listitem"><p>GCC 3.3.2: include/c++/3.3.2</p></li><li class="listitem"><p>GCC 3.3.3: include/c++/3.3.3</p></li><li class="listitem"><p>GCC 3.4.x: include/c++/3.4.x</p></li><li class="listitem"><p>GCC 4.x.y: include/c++/4.x.y</p></li></ul></div><p></p></li></ol></div><p>
+ Taken together, these techniques can accurately specify interface
+ and implementation changes in the GNU C++ tools themselves. Used
+ properly, they allow both the GNU C++ tools implementation, and
+ programs using them, an evolving yet controlled development that
+ maintains backward compatibility.
+-</p></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.prereq"></a>Prerequisites</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.prereq"></a>Prerequisites</h4></div></div></div><p>
+ Minimum environment that supports a versioned ABI: A supported
+ dynamic linker, a GNU linker of sufficient vintage to understand
+ demangled C++ name globbing (ld) or the Sun linker, a shared
+@@ -206,7 +205,7 @@
+ Most modern GNU/Linux and BSD versions, particularly ones using
+ GCC 3.1 and later, will meet the
+ requirements above, as does Solaris 2.5 and up.
+- </p></div><div class="section" title="Configuring"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.config"></a>Configuring</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.config"></a>Configuring</h4></div></div></div><p>
+ It turns out that most of the configure options that change
+ default behavior will impact the mangled names of exported
+ symbols, and thus impact versioning and compatibility.
+@@ -224,7 +223,7 @@
+ attempts to make sure that all the requirement for symbol
+ versioning are in place. For more information, please consult
+ acinclude.m4.
+- </p></div><div class="section" title="Checking Active"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.active"></a>Checking Active</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.active"></a>Checking Active</h4></div></div></div><p>
+ When the GNU C++ library is being built with symbol versioning
+ on, you should see the following at configure time for
+ libstdc++:
+@@ -272,12 +271,12 @@
+ libc.so.1 (SUNWprivate_1.1, SYSVABI_1.3);
+ </pre><p>
+ <code class="code">ldd -v</code> works too, but is very verbose.
+-</p></div></div><div class="section" title="Allowed Changes"><div class="titlepage"><div><div><h3 class="title"><a id="abi.changes_allowed"></a>Allowed Changes</h3></div></div></div><p>
++</p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="abi.changes_allowed"></a>Allowed Changes</h3></div></div></div><p>
+ The following will cause the library minor version number to
+ increase, say from "libstdc++.so.3.0.4" to "libstdc++.so.3.0.5".
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Adding an exported global or static data member</p></li><li class="listitem"><p>Adding an exported function, static or non-virtual member function</p></li><li class="listitem"><p>Adding an exported symbol or symbols by additional instantiations</p></li></ol></div><p>
+ Other allowed changes are possible.
+-</p></div><div class="section" title="Prohibited Changes"><div class="titlepage"><div><div><h3 class="title"><a id="abi.changes_no"></a>Prohibited Changes</h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="abi.changes_no"></a>Prohibited Changes</h3></div></div></div><p>
+ The following non-exhaustive list will cause the library major version
+ number to increase, say from "libstdc++.so.3.0.4" to
+ "libstdc++.so.4.0.0".
+@@ -296,13 +295,13 @@
+ section on <a class="link" href="http://mentorembedded.github.com/cxx-abi/abi.html#calls" target="_top">Function
+ Calling Conventions and APIs</a>
+ of the C++ ABI documentation for further details.
+-</p></li></ol></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="abi.impl"></a>Implementation</h3></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
++</p></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="abi.impl"></a>Implementation</h3></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ Separation of interface and implementation
+ </p><p>
+ This is accomplished by two techniques that separate the API from
+ the ABI: forcing undefined references to link against a library
+ binary for definitions.
+- </p><div class="variablelist"><dl><dt><span class="term">Include files have declarations, source files have defines</span></dt><dd><p>
++ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Include files have declarations, source files have defines</span></dt><dd><p>
+ For non-templatized types, such as much of <code class="code">class
+ locale</code>, the appropriate standard C++ include, say
+ <code class="code">locale</code>, can contain full declarations, while
+@@ -336,7 +335,7 @@
+ performance by the underlying dynamic loading mechanism. In
+ addition, they have the possibility of changing without impacting
+ ABI compatibility.
+- </p><p>The following namespaces are transformed by the mapfile:</p><div class="variablelist"><dl><dt><span class="term"><code class="code">namespace std</code></span></dt><dd><p> Defaults to exporting all symbols in label
++ </p><p>The following namespaces are transformed by the mapfile:</p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">namespace std</code></span></dt><dd><p> Defaults to exporting all symbols in label
+ <code class="code">GLIBCXX</code> that do not begin with an underscore, i.e.,
+ <code class="code">__test_func</code> would not be exported by default. Select
+ exceptional symbols are allowed to be visible.</p></dd><dt><span class="term"><code class="code">namespace __gnu_cxx</code></span></dt><dd><p> Defaults to not exporting any symbols in label
+@@ -344,7 +343,7 @@
+ <code class="code">CXXABI</code>, select items are allowed to be visible.</p></dd></dl></div><p>
+ </p></li><li class="listitem"><p>Freezing the API</p><p>Disallowed changes, as above, are not made on a stable release
+ branch. Enforcement tends to be less strict with GNU extensions that
+-standard includes.</p></li></ol></div></div><div class="section" title="Testing"><div class="titlepage"><div><div><h3 class="title"><a id="abi.testing"></a>Testing</h3></div></div></div><div class="section" title="Single ABI Testing"><div class="titlepage"><div><div><h4 class="title"><a id="abi.testing.single"></a>Single ABI Testing</h4></div></div></div><p>
++standard includes.</p></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="abi.testing"></a>Testing</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="abi.testing.single"></a>Single ABI Testing</h4></div></div></div><p>
+ Testing for GNU C++ ABI changes is composed of two distinct
+ areas: testing the C++ compiler (g++) for compiler changes, and
+ testing the C++ library (libstdc++) for library changes.
+@@ -410,7 +409,7 @@
+ </p><p>
+ Perhaps there are other C++ ABI checkers. If so, please notify
+ us. We'd like to know about them!
+-</p></div><div class="section" title="Multiple ABI Testing"><div class="titlepage"><div><div><h4 class="title"><a id="abi.testing.multi"></a>Multiple ABI Testing</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="abi.testing.multi"></a>Multiple ABI Testing</h4></div></div></div><p>
+ A "C" application, dynamically linked to two shared libraries, liba,
+ libb. The dependent library liba is a C++ shared library compiled with
+ GCC 3.3, and uses io, exceptions, locale, etc. The dependent library
+@@ -473,7 +472,7 @@
+ This resulting binary, when executed, will be able to safely use
+ code from both liba, and the dependent libstdc++.so.6, and libb,
+ with the dependent libstdc++.so.5.
+-</p></div></div><div class="section" title="Outstanding Issues"><div class="titlepage"><div><div><h3 class="title"><a id="abi.issues"></a>Outstanding Issues</h3></div></div></div><p>
++</p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="abi.issues"></a>Outstanding Issues</h3></div></div></div><p>
+ Some features in the C++ language make versioning especially
+ difficult. In particular, compiler generated constructs such as
+ implicit instantiations for templates, typeinfo information, and
+@@ -486,51 +485,51 @@
+ <a class="link" href="http://gcc.gnu.org/PR24660" target="_top">24660: versioning weak symbols in libstdc++</a>
+ </p><p>
+ <a class="link" href="http://gcc.gnu.org/PR19664" target="_top">19664: libstdc++ headers should have pop/push of the visibility around the declarations</a>
+-</p></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="abi.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry" title="ABIcheck"><a id="biblio.abicheck"></a><p>[biblio.abicheck] <span class="title"><em>
++</p></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="abi.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="biblio.abicheck"></a><p>[biblio.abicheck] <span class="title"><em>
+ <a class="link" href="http://abicheck.sourceforge.net" target="_top">
+ ABIcheck
+ </a>
+- </em>. </span></p></div><div class="biblioentry" title="C++ ABI Summary"><a id="biblio.cxxabi"></a><p>[biblio.cxxabi] <span class="title"><em>
++ </em>. </span></p></div><div class="biblioentry"><a id="biblio.cxxabi"></a><p>[biblio.cxxabi] <span class="title"><em>
+ <a class="link" href="http://www.codesourcery.com/cxx-abi/" target="_top">
+ C++ ABI Summary
+ </a>
+- </em>. </span></p></div><div class="biblioentry" title="Intel Compilers for Linux Compatibility with the GNU Compilers"><a id="idp22905536"></a><p><span class="title"><em>
++ </em>. </span></p></div><div class="biblioentry"><a id="idm269979305856"></a><p><span class="title"><em>
+ <a class="link" href="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm" target="_top">
+ Intel Compilers for Linux Compatibility with the GNU Compilers
+ </a>
+- </em>. </span></p></div><div class="biblioentry" title="Linker and Libraries Guide (document 819-0690)"><a id="idp22907392"></a><p><span class="title"><em>
++ </em>. </span></p></div><div class="biblioentry"><a id="idm269979304000"></a><p><span class="title"><em>
+ <a class="link" href="http://download.oracle.com/docs/cd/E19963-01/html/819-0690/index.html" target="_top">
+ Linker and Libraries Guide (document 819-0690)
+ </a>
+- </em>. </span></p></div><div class="biblioentry" title="Sun Studio 11: C++ Migration Guide (document 819-3689)"><a id="idp22909232"></a><p><span class="title"><em>
++ </em>. </span></p></div><div class="biblioentry"><a id="idm269979302160"></a><p><span class="title"><em>
+ <a class="link" href="http://download.oracle.com/docs/cd/E19422-01/819-3689/index.html" target="_top">
+ Sun Studio 11: C++ Migration Guide (document 819-3689)
+ </a>
+- </em>. </span></p></div><div class="biblioentry" title="How to Write Shared Libraries"><a id="idp22911088"></a><p><span class="title"><em>
++ </em>. </span></p></div><div class="biblioentry"><a id="idm269979300304"></a><p><span class="title"><em>
+ <a class="link" href="http://www.akkadia.org/drepper/dsohowto.pdf" target="_top">
+ How to Write Shared Libraries
+ </a>
+- </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span></p></div><div class="biblioentry" title="C++ ABI for the ARM Architecture"><a id="idp22914528"></a><p><span class="title"><em>
++ </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span></p></div><div class="biblioentry"><a id="idm269979296864"></a><p><span class="title"><em>
+ <a class="link" href="http://www.arm.com/miscPDFs/8033.pdf" target="_top">
+ C++ ABI for the ARM Architecture
+ </a>
+- </em>. </span></p></div><div class="biblioentry" title="Dynamic Shared Objects: Survey and Issues"><a id="idp22916336"></a><p><span class="title"><em>
++ </em>. </span></p></div><div class="biblioentry"><a id="idm269979295056"></a><p><span class="title"><em>
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html" target="_top">
+ Dynamic Shared Objects: Survey and Issues
+ </a>
+ </em>. </span><span class="subtitle">
+ ISO C++ J16/06-0046
+- . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry" title="Versioning With Namespaces"><a id="idp22919632"></a><p><span class="title"><em>
++ . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idm269979291760"></a><p><span class="title"><em>
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html" target="_top">
+ Versioning With Namespaces
+ </a>
+ </em>. </span><span class="subtitle">
+ ISO C++ J16/06-0083
+- . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry" title="Binary Compatibility of Shared Libraries Implemented in C++ on GNU/Linux Systems"><a id="idp22922912"></a><p><span class="title"><em>
++ . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idm269979288480"></a><p><span class="title"><em>
+ <a class="link" href="http://syrcose.ispras.ru/2009/files/SYRCoSE2009-CfP.pdf" target="_top">
+ Binary Compatibility of Shared Libraries Implemented in C++
+ on GNU/Linux Systems
+ </a>
+ </em>. </span><span class="subtitle">
+ SYRCoSE 2009
+- . </span><span class="author"><span class="firstname">Pavel</span> <span class="surname">Shved</span>. </span><span class="author"><span class="firstname">Denis</span> <span class="surname">Silakov</span>. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Test </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> API Evolution and Deprecation History</td></tr></table></div></body></html>
++ . </span><span class="author"><span class="firstname">Pavel</span> <span class="surname">Shved</span>. </span><span class="author"><span class="firstname">Denis</span> <span class="surname">Silakov</span>. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Test </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> API Evolution and Deprecation History</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/algorithms.html
++++ b/src/libstdc++-v3/doc/html/manual/algorithms.html
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; , &#10; algorithm&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; , &#10; algorithm&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
+ Algorithms
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="iterators.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 11.  Algorithms"><div class="titlepage"><div><div><h2 class="title"><a id="std.algorithms"></a>Chapter 11. 
++ </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. 
+ Algorithms
+- <a id="idp16155696" class="indexterm"></a>
+-</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>
++ <a id="idm269986048464" class="indexterm"></a>
++</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>
+ The neatest accomplishment of the algorithms section is that all the
+ work is done via iterators, not containers directly. This means two
+ important things:
+@@ -42,7 +41,7 @@
+ to cause so much confusion. Once you
+ get <span class="emphasis"><em>range</em></span> into your head (it's not that hard,
+ honest!), then the algorithms are a cakewalk.
+-</p><div class="section" title="Mutating"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.algorithms.mutating"></a>Mutating</h2></div></div></div><div class="section" title="swap"><div class="titlepage"><div><div><h3 class="title"><a id="algorithms.mutating.swap"></a><code class="function">swap</code></h3></div></div></div><div class="section" title="Specializations"><div class="titlepage"><div><div><h4 class="title"><a id="algorithms.swap.specializations"></a>Specializations</h4></div></div></div><p>If you call <code class="code"> std::swap(x,y); </code> where x and y are standard
++</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.algorithms.mutating"></a>Mutating</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="algorithms.mutating.swap"></a><code class="function">swap</code></h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="algorithms.swap.specializations"></a>Specializations</h4></div></div></div><p>If you call <code class="code"> std::swap(x,y); </code> where x and y are standard
+ containers, then the call will automatically be replaced by a call to
+ <code class="code"> x.swap(y); </code> instead.
+ </p><p>This allows member functions of each container class to take over, and
+@@ -58,4 +57,4 @@
+  </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 12. 
+ Numerics
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/api.html
++++ b/src/libstdc++-v3/doc/html/manual/api.html
+@@ -1,11 +1,10 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="ISO C++, api, evolution, deprecation, history" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Porting and Maintenance
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr></table><hr /></div><div class="section" title="API Evolution and Deprecation History"><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>
++</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>
+ A list of user-visible changes, in chronological order
+-</p><div class="section" title="3.0"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_300"></a><code class="constant">3.0</code></h3></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_300"></a><code class="constant">3.0</code></h3></div></div></div><p>
+ Extensions moved to <code class="filename">include/ext</code>.
+ </p><p>
+ Include files from the SGI/HP sources that pre-date the ISO standard
+@@ -14,7 +13,7 @@
+ is added that notifies on inclusion (<code class="literal">-Wno-deprecated</code>
+ deactivates the warning.)
+ </p><p>Deprecated include <code class="filename">backward/strstream</code> added.</p><p>Removal of include <code class="filename">builtinbuf.h</code>, <code class="filename">indstream.h</code>, <code class="filename">parsestream.h</code>, <code class="filename">PlotFile.h</code>, <code class="filename">SFile.h</code>, <code class="filename">stdiostream.h</code>, and <code class="filename">stream.h</code>.
+-</p></div><div class="section" title="3.1"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_310"></a><code class="constant">3.1</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_310"></a><code class="constant">3.1</code></h3></div></div></div><p>
+ </p><p>
+ Extensions from SGI/HP moved from <code class="code">namespace std</code>
+ to <code class="code">namespace __gnu_cxx</code>. As part of this, the following
+@@ -26,15 +25,15 @@
+ Extensions to tree data structures added in <code class="filename">ext/rb_tree</code>.
+ </p><p>
+ Removal of <code class="filename">ext/tree</code>, moved to <code class="filename">backward/tree.h</code>.
+-</p></div><div class="section" title="3.2"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_320"></a><code class="constant">3.2</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_320"></a><code class="constant">3.2</code></h3></div></div></div><p>
+ </p><p>Symbol versioning introduced for shared library.</p><p>Removal of include <code class="filename">backward/strstream.h</code>.</p><p>Allocator changes. Change <code class="code">__malloc_alloc</code> to <code class="code">malloc_allocator</code> and <code class="code">__new_alloc</code> to <code class="code">new_allocator</code>. </p><p> For GCC releases from 2.95 through the 3.1 series, defining
+ <code class="literal">__USE_MALLOC</code> on the gcc command line would change the
+ default allocation strategy to instead use <code class="code"> malloc</code> and
+ <code class="function">free</code>. (This same functionality is now spelled <code class="literal">_GLIBCXX_FORCE_NEW</code>, see
+ <a class="link" href="using_macros.html" title="Macros">this page</a>
+ for details.
+- </p><p>Error handling in iostreams cleaned up, made consistent. </p></div><div class="section" title="3.3"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_330"></a><code class="constant">3.3</code></h3></div></div></div><p>
+- </p></div><div class="section" title="3.4"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_340"></a><code class="constant">3.4</code></h3></div></div></div><p>
++ </p><p>Error handling in iostreams cleaned up, made consistent. </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_330"></a><code class="constant">3.3</code></h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_340"></a><code class="constant">3.4</code></h3></div></div></div><p>
+ </p><p>
+ Large file support.
+ </p><p> Extensions for generic characters and <code class="code">char_traits</code> added in <code class="filename">ext/pod_char_traits.h</code>.
+@@ -75,11 +74,11 @@
+ <span class="type">__alloc</span> to select an underlying allocator that
+ satisfied memory allocation requests. The selection of this
+ underlying allocator was not user-configurable.
+- </p><div class="table"><a id="idp22990128"></a><p class="title"><strong>Table B.6. Extension Allocators</strong></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="classname">std::__new_alloc</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::malloc_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template&lt;int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template&lt;bool,int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left"><code class="classname">__gnu_cxx::bitmap_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p> Releases after gcc-3.4 have continued to add to the collection
++ </p><div class="table"><a id="idm269979221808"></a><p class="title"><strong>Table B.6. Extension Allocators</strong></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="classname">std::__new_alloc</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::malloc_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template&lt;int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template&lt;bool,int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left"><code class="classname">__gnu_cxx::bitmap_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p> Releases after gcc-3.4 have continued to add to the collection
+ of available allocators. All of these new allocators are
+ standard-style. The following table includes details, along with
+ the first released version of GCC that included the extension allocator.
+- </p><div class="table"><a id="idp23017760"></a><p class="title"><strong>Table B.7. Extension Allocators Continued</strong></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left">4.0.0</td></tr><tr><td align="left"><code class="classname">__gnu_cxx::throw_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left">4.2.0</td></tr></tbody></table></div></div><br class="table-break" /><p>
++ </p><div class="table"><a id="idm269979194176"></a><p class="title"><strong>Table B.7. Extension Allocators Continued</strong></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left">4.0.0</td></tr><tr><td align="left"><code class="classname">__gnu_cxx::throw_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left">4.2.0</td></tr></tbody></table></div></div><br class="table-break" /><p>
+ Debug mode first appears.
+ </p><p>
+ Precompiled header support <acronym class="acronym">PCH</acronym> support.
+@@ -89,7 +88,7 @@
+ Extension <code class="filename">ext/stdio_sync_filebuf.h</code> added.
+ </p><p>
+ Extension <code class="filename">ext/demangle.h</code> added.
+-</p></div><div class="section" title="4.0"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_400"></a><code class="constant">4.0</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_400"></a><code class="constant">4.0</code></h3></div></div></div><p>
+ </p><p>
+ TR1 features first appear.
+ </p><p>
+@@ -98,14 +97,14 @@
+ Extension <code class="code">codecvt</code> specializations moved to <code class="filename">ext/codecvt_specializations.h</code>.
+ </p><p>
+ Removal of <code class="filename">ext/demangle.h</code>.
+-</p></div><div class="section" title="4.1"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_410"></a><code class="constant">4.1</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_410"></a><code class="constant">4.1</code></h3></div></div></div><p>
+ </p><p>
+ Removal of <code class="filename">cassert</code> from all standard headers: now has to be explicitly included for <code class="code">std::assert</code> calls.
+ </p><p> Extensions for policy-based data structures first added. New includes,
+ types, namespace <code class="code">pb_assoc</code>.
+ </p><p> Extensions for typelists added in <code class="filename">ext/typelist.h</code>.
+ </p><p> Extension for policy-based <code class="code">basic_string</code> first added: <code class="code">__gnu_cxx::__versa_string</code> in <code class="filename">ext/vstring.h</code>.
+-</p></div><div class="section" title="4.2"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_420"></a><code class="constant">4.2</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_420"></a><code class="constant">4.2</code></h3></div></div></div><p>
+ </p><p> Default visibility attributes applied to <code class="code">namespace std</code>. Support for <code class="code">-fvisibility</code>.
+ </p><p>TR1 <code class="filename">random</code>, <code class="filename">complex</code>, and C compatibility headers added.</p><p> Extensions for concurrent programming consolidated
+ into <code class="filename">ext/concurrence.h</code> and <code class="filename">ext/atomicity.h</code>,
+@@ -120,13 +119,13 @@
+ std::__debug</code> and extensions in <code class="code">namespace
+ __gnu_cxx::__debug</code>.</p><p> Extensions added: <code class="filename">ext/typelist.h</code>
+ and <code class="filename">ext/throw_allocator.h</code>.
+-</p></div><div class="section" title="4.3"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_430"></a><code class="constant">4.3</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_430"></a><code class="constant">4.3</code></h3></div></div></div><p>
+ </p><p>
+ C++0X features first appear.
+ </p><p>TR1 <code class="filename">regex</code> and <code class="filename">cmath</code>'s mathematical special function added.
+ </p><p>
+ Backward include edit.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Removed</p><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>Removed</p><p>
+ <code class="filename">algobase.h</code> <code class="filename">algo.h</code> <code class="filename">alloc.h</code> <code class="filename">bvector.h</code> <code class="filename">complex.h</code>
+ <code class="filename">defalloc.h</code> <code class="filename">deque.h</code> <code class="filename">fstream.h</code> <code class="filename">function.h</code> <code class="filename">hash_map.h</code> <code class="filename">hash_set.h</code>
+ <code class="filename">hashtable.h</code> <code class="filename">heap.h</code> <code class="filename">iomanip.h</code> <code class="filename">iostream.h</code> <code class="filename">istream.h</code> <code class="filename">iterator.h</code>
+@@ -138,7 +137,7 @@
+ <code class="filename">auto_ptr.h</code> and <code class="filename">binders.h</code>
+ </p></li></ul></div><p>
+ Header dependency streamlining.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="filename">algorithm</code> no longer includes <code class="filename">climits</code>, <code class="filename">cstring</code>, or <code class="filename">iosfwd</code> </p></li><li class="listitem"><p><code class="filename">bitset</code> no longer includes <code class="filename">istream</code> or <code class="filename">ostream</code>, adds <code class="filename">iosfwd</code> </p></li><li class="listitem"><p><code class="filename">functional</code> no longer includes <code class="filename">cstddef</code></p></li><li class="listitem"><p><code class="filename">iomanip</code> no longer includes <code class="filename">istream</code>, <code class="filename">istream</code>, or <code class="filename">functional</code>, adds <code class="filename">ioswd</code> </p></li><li class="listitem"><p><code class="filename">numeric</code> no longer includes <code class="filename">iterator</code></p></li><li class="listitem"><p><code class="filename">string</code> no longer includes <code class="filename">algorithm</code> or <code class="filename">memory</code></p></li><li class="listitem"><p><code class="filename">valarray</code> no longer includes <code class="filename">numeric</code> or <code class="filename">cstdlib</code></p></li><li class="listitem"><p><code class="filename">tr1/hashtable</code> no longer includes <code class="filename">memory</code> or <code class="filename">functional</code></p></li><li class="listitem"><p><code class="filename">tr1/memory</code> no longer includes <code class="filename">algorithm</code></p></li><li class="listitem"><p><code class="filename">tr1/random</code> no longer includes <code class="filename">algorithm</code> or <code class="filename">fstream</code></p></li></ul></div><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="filename">algorithm</code> no longer includes <code class="filename">climits</code>, <code class="filename">cstring</code>, or <code class="filename">iosfwd</code> </p></li><li class="listitem"><p><code class="filename">bitset</code> no longer includes <code class="filename">istream</code> or <code class="filename">ostream</code>, adds <code class="filename">iosfwd</code> </p></li><li class="listitem"><p><code class="filename">functional</code> no longer includes <code class="filename">cstddef</code></p></li><li class="listitem"><p><code class="filename">iomanip</code> no longer includes <code class="filename">istream</code>, <code class="filename">istream</code>, or <code class="filename">functional</code>, adds <code class="filename">ioswd</code> </p></li><li class="listitem"><p><code class="filename">numeric</code> no longer includes <code class="filename">iterator</code></p></li><li class="listitem"><p><code class="filename">string</code> no longer includes <code class="filename">algorithm</code> or <code class="filename">memory</code></p></li><li class="listitem"><p><code class="filename">valarray</code> no longer includes <code class="filename">numeric</code> or <code class="filename">cstdlib</code></p></li><li class="listitem"><p><code class="filename">tr1/hashtable</code> no longer includes <code class="filename">memory</code> or <code class="filename">functional</code></p></li><li class="listitem"><p><code class="filename">tr1/memory</code> no longer includes <code class="filename">algorithm</code></p></li><li class="listitem"><p><code class="filename">tr1/random</code> no longer includes <code class="filename">algorithm</code> or <code class="filename">fstream</code></p></li></ul></div><p>
+ Debug mode for <code class="filename">unordered_map</code> and <code class="filename">unordered_set</code>.
+ </p><p>
+ Parallel mode first appears.
+@@ -152,10 +151,10 @@
+ PCH binary files no longer installed. Instead, the source files are installed.
+ </p><p>
+ Namespace pb_ds moved to __gnu_pb_ds.
+-</p></div><div class="section" title="4.4"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_440"></a><code class="constant">4.4</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_440"></a><code class="constant">4.4</code></h3></div></div></div><p>
+ </p><p>
+ C++0X features.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Added.
+ </p><p>
+ <code class="filename">atomic</code>,
+@@ -207,10 +206,10 @@
+ for non-standard pointer types has been added
+ to <code class="classname">vector</code>
+ and <code class="classname">forward_list</code>.
+-</p></div><div class="section" title="4.5"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_450"></a><code class="constant">4.5</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_450"></a><code class="constant">4.5</code></h3></div></div></div><p>
+ </p><p>
+ C++0X features.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Added.
+ </p><p>
+ <code class="filename">functional</code>,
+@@ -237,4 +236,4 @@
+ in <code class="filename">typeinfo</code>, <code class="literal">__GXX_MERGED_TYPEINFO_NAMES</code>
+ now defaults to zero.
+ </p><p> Extensions modified: <code class="filename">ext/throw_allocator.h</code>.
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">ABI Policy and Guidelines </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Backwards Compatibility</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">ABI Policy and Guidelines </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Backwards Compatibility</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/appendix_contributing.html
++++ b/src/libstdc++-v3/doc/html/manual/appendix_contributing.html
+@@ -1,19 +1,18 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.html" title="Part IV.  Appendices" /><link rel="prev" href="bk01pt04.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.html" title="Part IV.  Appendices" /><link rel="prev" href="bk01pt04.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. 
+ Contributing
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt04.html">Prev</a> </td><th width="60%" align="center">Part IV. 
+ Appendices
+-</th><td width="20%" align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix A.  Contributing"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.contrib"></a>
++</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>
+ Contributing
+- <a id="idp21837344" class="indexterm"></a>
+-</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>
++ <a id="idm269980375424" class="indexterm"></a>
++</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>
+ The GNU C++ Library follows an open development model. Active
+ contributors are assigned maintainer-ship responsibility, and given
+ write access to the source repository. First time contributors
+ should follow this procedure:
+-</p><div class="section" title="Contributor Checklist"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.list"></a>Contributor Checklist</h2></div></div></div><div class="section" title="Reading"><div class="titlepage"><div><div><h3 class="title"><a id="list.reading"></a>Reading</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.list"></a>Contributor Checklist</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="list.reading"></a>Reading</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Get and read the relevant sections of the C++ language
+ specification. Copies of the full ISO 14882 standard are
+ available on line via the ISO mirror site for committee
+@@ -37,7 +36,7 @@
+ for this group is quite useful.
+ </p></li><li class="listitem"><p>
+ Peruse
+- the <a class="link" href="http://www.gnu.org/prep/standards" target="_top">GNU
++ the <a class="link" href="http://www.gnu.org/prep/standards/" target="_top">GNU
+ Coding Standards</a>, and chuckle when you hit the part
+ about <span class="quote">“<span class="quote">Using Languages Other Than C</span>”</span>.
+ </p></li><li class="listitem"><p>
+@@ -48,7 +47,7 @@
+ And last but certainly not least, read the
+ library-specific information found in
+ <a class="link" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance">Porting and Maintenance</a>.
+- </p></li></ul></div></div><div class="section" title="Assignment"><div class="titlepage"><div><div><h3 class="title"><a id="list.copyright"></a>Assignment</h3></div></div></div><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="list.copyright"></a>Assignment</h3></div></div></div><p>
+ Small changes can be accepted without a copyright assignment form on
+ file. New code and additions to the library need completed copyright
+ assignment form on file at the FSF. Note: your employer may be required
+@@ -75,14 +74,14 @@
+ requesting an assignment form from
+ <code class="email">&lt;<a class="email" href="mailto:mailto:assign@gnu.org">mailto:assign@gnu.org</a>&gt;</code>, please cc the libstdc++
+ maintainer above so that progress can be monitored.
+- </p></div><div class="section" title="Getting Sources"><div class="titlepage"><div><div><h3 class="title"><a id="list.getting"></a>Getting Sources</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="list.getting"></a>Getting Sources</h3></div></div></div><p>
+ <a class="link" href="http://gcc.gnu.org/svnwrite.html" target="_top">Getting write access
+ (look for "Write after approval")</a>
+- </p></div><div class="section" title="Submitting Patches"><div class="titlepage"><div><div><h3 class="title"><a id="list.patches"></a>Submitting Patches</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="list.patches"></a>Submitting Patches</h3></div></div></div><p>
+ Every patch must have several pieces of information before it can be
+ properly evaluated. Ideally (and to ensure the fastest possible
+ response from the maintainers) it would have all of these pieces:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ A description of the bug and how your patch fixes this
+ bug. For new features a description of the feature and your
+ implementation.
+@@ -113,4 +112,4 @@
+ libstdc++ mailing list.
+ </p></li></ul></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part IV. 
+ Appendices
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Directory Layout and Source Conventions</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Directory Layout and Source Conventions</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/appendix_free.html
++++ b/src/libstdc++-v3/doc/html/manual/appendix_free.html
+@@ -1,13 +1,12 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.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. 
+ Free Software Needs Free Documentation
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><th width="60%" align="center">Part IV. 
+ Appendices
+-</th><td width="20%" align="right"> <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix C.  Free Software Needs Free Documentation"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.free"></a>
++</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>
+ Free Software Needs Free Documentation
+- <a id="idp23386832" class="indexterm"></a>
++ <a id="idm269978826336" class="indexterm"></a>
+ </h1></div></div></div><p>
+ The biggest deficiency in free operating systems is not in the
+ software--it is the lack of good free manuals that we can include in
+@@ -123,4 +122,4 @@
+ permitted worldwide, without royalty, in any medium, provided this
+ notice is preserved.</p><p>Report any problems or suggestions to <code class="email">&lt;<a class="email" href="mailto:webmaster@fsf.org">webmaster@fsf.org</a>&gt;</code>.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_gpl.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"> Appendix D. 
+ <acronym class="acronym">GNU</acronym> General Public License version 3
+- </td></tr></table></div></body></html>
++ </td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/appendix_gfdl.html
++++ b/src/libstdc++-v3/doc/html/manual/appendix_gfdl.html
+@@ -1,8 +1,7 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.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. 
+ Appendices
+-</th><td width="20%" align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix E. GNU Free Documentation License"><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>
++</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>
+ Copyright © 2000, 2001, 2002, 2007, 2008
+ <a class="link" href="http://www.fsf.org/" target="_top">Free Software Foundation, Inc.</a>
+ </p><p>
+@@ -446,4 +445,4 @@
+ use in free software.
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix D. 
+ <acronym class="acronym">GNU</acronym> General Public License version 3
+-  </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
++  </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/appendix_gpl.html
++++ b/src/libstdc++-v3/doc/html/manual/appendix_gpl.html
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.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. 
+ <acronym class="acronym">GNU</acronym> General Public License version 3
+ </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. 
+ Appendices
+-</th><td width="20%" align="right"> <a accesskey="n" href="appendix_gfdl.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix D.  GNU General Public License version 3"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.gpl-3.0"></a>
++</th><td width="20%" align="right"> <a accesskey="n" href="appendix_gfdl.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.gpl-3.0"></a>
+ <acronym class="acronym">GNU</acronym> General Public License version 3
+ </h1></div></div></div><p>
+ Version 3, 29 June 2007
+@@ -78,7 +77,7 @@
+ </p><p>
+ The precise terms and conditions for copying, distribution and modification
+ follow.
+- </p><h2><a id="idp23427568"></a>
++ </p><h2><a id="idm269978786144"></a>
+ TERMS AND CONDITIONS
+ </h2><h2><a id="gpl-3-definitions"></a>
+ 0. Definitions.
+@@ -619,7 +618,7 @@
+ waiver of all civil liability in connection with the Program, unless a
+ warranty or assumption of liability accompanies a copy of the Program in
+ return for a fee.
+- </p><h2><a id="idp23526496"></a>
++ </p><h2><a id="idm269978687344"></a>
+ END OF TERMS AND CONDITIONS
+ </h2><h2><a id="HowToApply"></a>
+ How to Apply These Terms to Your New Programs
+@@ -680,4 +679,4 @@
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_free.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_gfdl.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix C. 
+ Free Software Needs Free Documentation
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix E. GNU Free Documentation License</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix E. GNU Free Documentation License</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/appendix_porting.html
++++ b/src/libstdc++-v3/doc/html/manual/appendix_porting.html
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.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. 
+ Porting and Maintenance
+
+ </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. 
+ Appendices
+-</th><td width="20%" align="right"> <a accesskey="n" href="documentation_hacking.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix B.  Porting and Maintenance"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.porting"></a>
++</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>
+ Porting and Maintenance
+- <a id="idp21971520" class="indexterm"></a>
+-</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">
++ <a id="idm269980241728" class="indexterm"></a>
++</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">
+ Qualifying Exception Safety Guarantees
+
+ </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">
+@@ -30,7 +29,7 @@
+ Support for C++11 dialect.
+ </a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.iterator_type">
+ <code class="code">Container::iterator_type</code> is not necessarily <code class="code">Container::value_type*</code>
+-</a></span></dt></dl></dd></dl></dd></dl></div><div class="section" title="Configure and Build Hacking"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.build_hacking"></a>Configure and Build Hacking</h2></div></div></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.prereq"></a>Prerequisites</h3></div></div></div><p>
++</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="appendix.porting.build_hacking"></a>Configure and Build Hacking</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.prereq"></a>Prerequisites</h3></div></div></div><p>
+ As noted <a class="link" href="http://gcc.gnu.org/install/prerequisites.html" target="_top">previously</a>,
+ certain other tools are necessary for hacking on files that
+ control configure (<code class="code">configure.ac</code>,
+@@ -41,7 +40,7 @@
+ in GCC try to stay in sync with each other in terms of versions of
+ the auto-tools used, so please try to play nicely with the
+ neighbors.
+- </p></div><div class="section" title="Overview"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.overview"></a>Overview</h3></div></div></div><div class="section" title="General Process"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.overview.basic"></a>General Process</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.overview"></a>Overview</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.overview.basic"></a>General Process</h4></div></div></div><p>
+ The configure process begins the act of building libstdc++, and is
+ started via:
+ </p><pre class="screen">
+@@ -62,11 +61,11 @@
+ 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
+ <span class="command"><strong>automake</strong></span>) from the file
+ <code class="filename">Makefile.am</code>.
+-</p></div><div class="section" title="What Comes from Where"><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="idp21998848"></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>
++</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="idm269980214944"></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>
+ Regenerate all generated files by using the command
+ <code class="code">autoreconf</code> at the top level of the libstdc++ source
+ directory.
+- </p></div></div><div class="section" title="Configure"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.configure"></a>Configure</h3></div></div></div><div class="section" title="Storing Information in non-AC files (like configure.host)"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.scripts"></a>Storing Information in non-AC files (like configure.host)</h4></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.configure"></a>Configure</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.scripts"></a>Storing Information in non-AC files (like configure.host)</h4></div></div></div><p>
+ Until that glorious day when we can use AC_TRY_LINK with a
+ cross-compiler, we have to hardcode the results of what the tests
+ would have shown if they could be run. So we have an inflexible
+@@ -88,7 +87,7 @@
+ for instance, but then we would need arguments to aclocal/autoconf
+ to properly find them all when generating configure. I would
+ discourage that.
+-</p></div><div class="section" title="Coding and Commenting Conventions"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.conventions"></a>Coding and Commenting Conventions</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.conventions"></a>Coding and Commenting Conventions</h4></div></div></div><p>
+ Most comments should use {octothorpes, shibboleths, hash marks,
+ pound signs, whatever} rather than "dnl". Nearly all comments in
+ configure.ac should. Comments inside macros written in ancilliary
+@@ -105,7 +104,7 @@
+ Do not use any <code class="code">$target*</code> variables, such as
+ <code class="code">$target_alias</code>. The single exception is in
+ configure.ac, for automake+dejagnu's sake.
+- </p></div><div class="section" title="The acinclude.m4 layout"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.acinclude"></a>The acinclude.m4 layout</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.acinclude"></a>The acinclude.m4 layout</h4></div></div></div><p>
+ The nice thing about acinclude.m4/aclocal.m4 is that macros aren't
+ actually performed/called/expanded/whatever here, just loaded. So
+ we can arrange the contents however we like. As of this writing,
+@@ -176,7 +175,7 @@
+ </pre><p>
+ Things which we don't seem to use directly, but just has to be
+ present otherwise stuff magically goes wonky.
+-</p></div><div class="section" title="GLIBCXX_ENABLE, the --enable maker"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.enable"></a><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.enable"></a><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</h4></div></div></div><p>
+ All the <code class="literal">GLIBCXX_ENABLE_FOO</code> macros use a common
+ helper, <code class="literal">GLIBCXX_ENABLE</code>. (You don't have to use
+ it, but it's easy.) The helper does two things for us:
+@@ -205,7 +204,7 @@
+ GLIBCXX_ENABLE (FEATURE, DEFAULT, HELP-ARG, HELP-STRING)
+ GLIBCXX_ENABLE (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c)
+ GLIBCXX_ENABLE (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER)
+-</pre><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</pre><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ FEATURE is the string that follows --enable. The results of the
+ test (such as it is) will be in the variable $enable_FEATURE,
+ where FEATURE has been squashed. Example:
+@@ -264,7 +263,7 @@
+ argument checking at all is done in this signature. See
+ GLIBCXX_ENABLE_CXX_FLAGS for an example of handling, and an error
+ message.
+-</p></div></div><div class="section" title="Make"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.make"></a>Make</h3></div></div></div><p>
++</p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.make"></a>Make</h3></div></div></div><p>
+ The build process has to make all of object files needed for
+ static or shared libraries, but first it has to generate some
+ include files. The general order is as follows:
+@@ -307,4 +306,4 @@
+ any required compatibility objects, and creates the final shared
+ and static libraries: <code class="filename">libstdc++.so</code> and
+ <code class="filename">libstdc++.a</code>.
+- </p></li></ol></div></li></ol></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_design_notes.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="documentation_hacking.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design Notes </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Writing and Generating Documentation</td></tr></table></div></body></html>
++ </p></li></ol></div></li></ol></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_design_notes.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="documentation_hacking.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design Notes </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Writing and Generating Documentation</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/associative.html
++++ b/src/libstdc++-v3/doc/html/manual/associative.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="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">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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="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">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. 
+ Containers
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="containers_and_c.html">Next</a></td></tr></table><hr /></div><div class="section" title="Associative"><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" title="Insertion Hints"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.insert_hints"></a>Insertion Hints</h3></div></div></div><p>
++</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.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>
+ Section [23.1.2], Table 69, of the C++ standard lists this
+ function for all of the associative containers (map, set, etc):
+ </p><pre class="programlisting">
+@@ -39,7 +38,7 @@
+ paragraph. *grin*
+ </p><p>
+ If the <code class="code">hint</code> parameter ('p' above) is equivalent to:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <code class="code">begin()</code>, then the item being inserted should
+ have a key less than all the other keys in the container.
+ The item will be inserted at the beginning of the container,
+@@ -84,7 +83,7 @@
+ the new item would in fact belong there. If the hint does not
+ point to the correct place, then no further local searching is
+ done; the search begins from scratch in logarithmic time.
+- </p></div><div class="section" title="bitset"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.bitset"></a>bitset</h3></div></div></div><div class="section" title="Size Variable"><div class="titlepage"><div><div><h4 class="title"><a id="associative.bitset.size_variable"></a>Size Variable</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.bitset"></a>bitset</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="associative.bitset.size_variable"></a>Size Variable</h4></div></div></div><p>
+ No, you cannot write code of the form
+ </p><pre class="programlisting">
+ #include &lt;bitset&gt;
+@@ -102,7 +101,7 @@
+ There are a couple of ways to handle this kind of thing. Please
+ consider all of them before passing judgement. They include, in
+ no chaptericular order:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>A very large N in <code class="code">bitset&lt;N&gt;</code>.</p></li><li class="listitem"><p>A container&lt;bool&gt;.</p></li><li class="listitem"><p>Extremely weird solutions.</p></li></ul></div><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>A very large N in <code class="code">bitset&lt;N&gt;</code>.</p></li><li class="listitem"><p>A container&lt;bool&gt;.</p></li><li class="listitem"><p>Extremely weird solutions.</p></li></ul></div><p>
+ <span class="emphasis"><em>A very large N in
+ <code class="code">bitset&lt;N&gt;</code>.  </em></span> It has been
+ pointed out a few times in newsgroups that N bits only takes up
+@@ -169,7 +168,7 @@
+ </p><p>
+ Also note that the implementation of bitset used in libstdc++ has
+ <a class="link" href="ext_containers.html#manual.ext.containers.sgi" title="Backwards Compatibility">some extensions</a>.
+- </p></div><div class="section" title="Type String"><div class="titlepage"><div><div><h4 class="title"><a id="associative.bitset.type_string"></a>Type String</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="associative.bitset.type_string"></a>Type String</h4></div></div></div><p>
+ </p><p>
+ Bitmasks do not take char* nor const char* arguments in their
+ constructors. This is something of an accident, but you can read
+@@ -189,4 +188,4 @@
+ </pre></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="containers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="containers_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 9. 
+ Containers
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/atomics.html
++++ b/src/libstdc++-v3/doc/html/manual/atomics.html
+@@ -1,16 +1,15 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; , &#10; atomic&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; , &#10; atomic&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
+ Atomics
+
+ </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. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 14.  Atomics"><div class="titlepage"><div><div><h2 class="title"><a id="std.atomics"></a>Chapter 14. 
++ </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. 
+ Atomics
+- <a id="idp16354144" class="indexterm"></a>
+-</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>
++ <a id="idm269985851840" class="indexterm"></a>
++</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>
+ Facilities for atomic operations.
+-</p><div class="section" title="API Reference"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.atomics.api"></a>API Reference</h2></div></div></div><p>
++</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>
+ All items are declared in the standard header
+ file <code class="filename">atomic</code>.
+ </p><p>
+@@ -28,4 +27,4 @@
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 15. 
+ Concurrency
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/backwards.html
++++ b/src/libstdc++-v3/doc/html/manual/backwards.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; backwards&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; backwards&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Porting and Maintenance
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="appendix_free.html">Next</a></td></tr></table><hr /></div><div class="section" title="Backwards Compatibility"><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" title="First"><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
++</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
+ separate GNU project, although reliably paired with GCC. Rumors imply
+ that it had a working relationship with at least two kinds of
+ dinosaur.
+@@ -17,8 +16,8 @@
+ really useful things that are used by a lot of people, the Standards
+ Committee couldn't include everything, and so a lot of those
+ <span class="quote">“<span class="quote">obvious</span>”</span> classes didn't get included.
+-</p><p>Known Issues include many of the limitations of its immediate ancestor.</p><p>Portability notes and known implementation limitations are as follows.</p><div class="section" title="No ios_base"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.first.ios_base"></a>No <code class="code">ios_base</code></h4></div></div></div><p> At least some older implementations don't have <code class="code">std::ios_base</code>, so you should use <code class="code">std::ios::badbit</code>, <code class="code">std::ios::failbit</code> and <code class="code">std::ios::eofbit</code> and <code class="code">std::ios::goodbit</code>.
+-</p></div><div class="section" title="No cout in &lt;ostream.h&gt;, no cin in &lt;istream.h&gt;"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.first.cout_cin"></a>No <code class="code">cout</code> in <code class="filename">&lt;ostream.h&gt;</code>, no <code class="code">cin</code> in <code class="filename">&lt;istream.h&gt;</code></h4></div></div></div><p>
++</p><p>Known Issues include many of the limitations of its immediate ancestor.</p><p>Portability notes and known implementation limitations are as follows.</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.first.ios_base"></a>No <code class="code">ios_base</code></h4></div></div></div><p> At least some older implementations don't have <code class="code">std::ios_base</code>, so you should use <code class="code">std::ios::badbit</code>, <code class="code">std::ios::failbit</code> and <code class="code">std::ios::eofbit</code> and <code class="code">std::ios::goodbit</code>.
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.first.cout_cin"></a>No <code class="code">cout</code> in <code class="filename">&lt;ostream.h&gt;</code>, no <code class="code">cin</code> in <code class="filename">&lt;istream.h&gt;</code></h4></div></div></div><p>
+ In earlier versions of the standard,
+ <code class="filename">&lt;fstream.h&gt;</code>,
+ <code class="filename">&lt;ostream.h&gt;</code>
+@@ -32,7 +31,7 @@
+ the <a class="link" href="http://gcc.gnu.org/extensions.html" target="_top">GCC extensions
+ page</a> describes where to find the last libg++ source. The code is
+ considered replaced and rewritten.
+-</p></div></div><div class="section" title="Second"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.second"></a>Second</h3></div></div></div><p>
++</p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.second"></a>Second</h3></div></div></div><p>
+ The second generation GNU C++ library was called libstdc++, or
+ libstdc++-v2. It spans the time between libg++ and pre-ISO C++
+ standardization and is usually associated with the following GCC
+@@ -44,7 +43,7 @@
+ archived. The code is considered replaced and rewritten.
+ </p><p>
+ Portability notes and known implementation limitations are as follows.
+-</p><div class="section" title="Namespace std:: not supported"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.std"></a>Namespace <code class="code">std::</code> not supported</h4></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.std"></a>Namespace <code class="code">std::</code> not supported</h4></div></div></div><p>
+ Some care is required to support C++ compiler and or library
+ implementation that do not have the standard library in
+ <code class="code">namespace std</code>.
+@@ -108,10 +107,10 @@
+ AC_DEFINE(HAVE_NAMESPACE_STD,,[Define if g++ supports namespace std. ])
+ fi
+ ])
+-</pre></div><div class="section" title="Illegal iterator usage"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.iterators"></a>Illegal iterator usage</h4></div></div></div><p>
++</pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.iterators"></a>Illegal iterator usage</h4></div></div></div><p>
+ The following illustrate implementation-allowed illegal iterator
+ use, and then correct use.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ you cannot do <code class="code">ostream::operator&lt;&lt;(iterator)</code>
+ to print the address of the iterator =&gt; use
+ <code class="code">operator&lt;&lt; &amp;*iterator</code> instead
+@@ -121,7 +120,7 @@
+ </p></li><li class="listitem"><p>
+ <code class="code">if (iterator)</code> won't work any more =&gt; use
+ <code class="code">if (iterator != iterator_type())</code>
+- </p></li></ul></div></div><div class="section" title="isspace from &lt;cctype&gt; is a macro"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.isspace"></a><code class="code">isspace</code> from <code class="filename">&lt;cctype&gt;</code> is a macro
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.isspace"></a><code class="code">isspace</code> from <code class="filename">&lt;cctype&gt;</code> is a macro
+ </h4></div></div></div><p>
+ Glibc 2.0.x and 2.1.x define <code class="filename">&lt;ctype.h&gt;</code> functionality as macros
+ (isspace, isalpha etc.).
+@@ -155,7 +154,7 @@
+ (<code class="filename">&lt;ctype.h&gt;</code>) and the
+ definitions in namespace <code class="code">std::</code>
+ (<code class="code">&lt;cctype&gt;</code>).
+-</p></div><div class="section" title="No vector::at, deque::at, string::at"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.at"></a>No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.at"></a>No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></h4></div></div></div><p>
+ One solution is to add an autoconf-test for this:
+ </p><pre class="programlisting">
+ AC_MSG_CHECKING(for container::at)
+@@ -181,7 +180,7 @@
+ </pre><p>
+ If you are using other (non-GNU) compilers it might be a good idea
+ to check for <code class="code">string::at</code> separately.
+-</p></div><div class="section" title="No std::char_traits&lt;char&gt;::eof"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.eof"></a>No <code class="code">std::char_traits&lt;char&gt;::eof</code></h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.eof"></a>No <code class="code">std::char_traits&lt;char&gt;::eof</code></h4></div></div></div><p>
+ Use some kind of autoconf test, plus this:
+ </p><pre class="programlisting">
+ #ifdef HAVE_CHAR_TRAITS
+@@ -189,7 +188,7 @@
+ #else
+ #define CPP_EOF EOF
+ #endif
+-</pre></div><div class="section" title="No string::clear"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.stringclear"></a>No <code class="code">string::clear</code></h4></div></div></div><p>
++</pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.stringclear"></a>No <code class="code">string::clear</code></h4></div></div></div><p>
+ There are two functions for deleting the contents of a string:
+ <code class="code">clear</code> and <code class="code">erase</code> (the latter returns the
+ string).
+@@ -207,18 +206,18 @@
+ Unfortunately, <code class="code">clear</code> is not implemented in this
+ version, so you should use <code class="code">erase</code> (which is probably
+ faster than <code class="code">operator=(charT*)</code>).
+-</p></div><div class="section" title="Removal of ostream::form and istream::scan extensions"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.ostreamform_istreamscan"></a>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.ostreamform_istreamscan"></a>
+ Removal of <code class="code">ostream::form</code> and <code class="code">istream::scan</code>
+ extensions
+ </h4></div></div></div><p>
+ These are no longer supported. Please use stringstreams instead.
+-</p></div><div class="section" title="No basic_stringbuf, basic_stringstream"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.stringstreams"></a>No <code class="code">basic_stringbuf</code>, <code class="code">basic_stringstream</code></h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.stringstreams"></a>No <code class="code">basic_stringbuf</code>, <code class="code">basic_stringstream</code></h4></div></div></div><p>
+ Although the ISO standard <code class="code">i/ostringstream</code>-classes are
+ provided, (<code class="filename">&lt;sstream&gt;</code>), for
+ compatibility with older implementations the pre-ISO
+ <code class="code">i/ostrstream</code> (<code class="filename">&lt;strstream&gt;</code>) interface is also provided,
+ with these caveats:
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <code class="code">strstream</code> is considered to be deprecated
+ </p></li><li class="listitem"><p>
+ <code class="code">strstream</code> is limited to <code class="code">char</code>
+@@ -300,14 +299,14 @@
+ Another example of using stringstreams is in <a class="link" href="strings.html#strings.string.shrink" title="Shrink to Fit">this howto</a>.
+ </p><p> There is additional information in the libstdc++-v2 info files, in
+ particular <span class="quote">“<span class="quote">info iostream</span>”</span>.
+-</p></div><div class="section" title="Little or no wide character support"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.wchar"></a>Little or no wide character support</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.wchar"></a>Little or no wide character support</h4></div></div></div><p>
+ Classes <code class="classname">wstring</code> and
+ <code class="classname">char_traits&lt;wchar_t&gt;</code> are
+ not supported.
+- </p></div><div class="section" title="No templatized iostreams"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.iostream_templates"></a>No templatized iostreams</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.iostream_templates"></a>No templatized iostreams</h4></div></div></div><p>
+ Classes <code class="classname">wfilebuf</code> and
+ <code class="classname">wstringstream</code> are not supported.
+- </p></div><div class="section" title="Thread safety issues"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.thread_safety"></a>Thread safety issues</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.thread_safety"></a>Thread safety issues</h4></div></div></div><p>
+ Earlier GCC releases had a somewhat different approach to
+ threading configuration and proper compilation. Before GCC 3.0,
+ configuration of the threading model was dictated by compiler
+@@ -343,7 +342,7 @@
+ first relevant message in the thread; from there you can use
+ "Thread Next" to move down the thread. This farm is in
+ latest-to-oldest order.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Our threading expert Loren gives a breakdown of <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2001-10/msg00024.html" target="_top">the
+ six situations involving threads</a> for the 3.0
+ release series.
+@@ -358,14 +357,14 @@
+ few people with access to the backup tapes have been too swamped
+ with work to restore them. Many of the points have been
+ superseded anyhow.)
+- </p></div></div><div class="section" title="Third"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.third"></a>Third</h3></div></div></div><p> The third generation GNU C++ library is called libstdc++, or
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.third"></a>Third</h3></div></div></div><p> The third generation GNU C++ library is called libstdc++, or
+ libstdc++-v3.
+ </p><p>The subset commonly known as the Standard Template Library
+ (chapters 23 through 25, mostly) is adapted from the final release
+ of the SGI STL (version 3.3), with extensive changes.
+ </p><p>A more formal description of the V3 goals can be found in the
+ official <a class="link" href="source_design_notes.html" title="Design Notes">design document</a>.
+- </p><p>Portability notes and known implementation limitations are as follows.</p><div class="section" title="Pre-ISO headers moved to backwards or removed"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.headers"></a>Pre-ISO headers moved to backwards or removed</h4></div></div></div><p> The pre-ISO C++ headers
++ </p><p>Portability notes and known implementation limitations are as follows.</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.headers"></a>Pre-ISO headers moved to backwards or removed</h4></div></div></div><p> The pre-ISO C++ headers
+ (<code class="filename">&lt;iostream.h&gt;</code>,
+ <code class="filename">&lt;defalloc.h&gt;</code> etc.) are
+ available, unlike previous libstdc++ versions, but inclusion
+@@ -438,7 +437,7 @@
+ directive <code class="code">using namespace std;</code> can be put at the global
+ scope. This should be enough to get this code compiling, assuming the
+ other usage is correct.
+-</p></div><div class="section" title="Extension headers hash_map, hash_set moved to ext or backwards"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.hash"></a>Extension headers hash_map, hash_set moved to ext or backwards</h4></div></div></div><p>At this time most of the features of the SGI STL extension have been
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.hash"></a>Extension headers hash_map, hash_set moved to ext or backwards</h4></div></div></div><p>At this time most of the features of the SGI STL extension have been
+ replaced by standardized libraries.
+ In particular, the <code class="classname">unordered_map</code> and
+ <code class="classname">unordered_set</code> containers of TR1 and C++ 2011
+@@ -512,7 +511,7 @@
+ AC_DEFINE(HAVE_EXT_HASH_SET,,[Define if ext/hash_set is present. ])
+ fi
+ ])
+-</pre></div><div class="section" title="No ios::nocreate/ios::noreplace."><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.nocreate_noreplace"></a>No <code class="code">ios::nocreate/ios::noreplace</code>.
++</pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.nocreate_noreplace"></a>No <code class="code">ios::nocreate/ios::noreplace</code>.
+ </h4></div></div></div><p> The existence of <code class="code">ios::nocreate</code> being used for
+ input-streams has been confirmed, most probably because the author
+ thought it would be more correct to specify nocreate explicitly. So
+@@ -523,7 +522,7 @@
+ decide whether you want to create/replace or not. To my knowledge,
+ even older implementations support <code class="code">app</code>, <code class="code">ate</code>
+ and <code class="code">trunc</code> (except for <code class="code">app</code> ?).
+-</p></div><div class="section" title="No stream::attach(int fd)"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.streamattach"></a>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.streamattach"></a>
+ No <code class="code">stream::attach(int fd)</code>
+ </h4></div></div></div><p>
+ Phil Edwards writes: It was considered and rejected for the ISO
+@@ -546,7 +545,7 @@
+ For another example of this, refer to
+ <a class="link" href="http://www.josuttis.com/cppcode/fdstream.html" target="_top">fdstream example</a>
+ by Nicolai Josuttis.
+-</p></div><div class="section" title="Support for C++98 dialect."><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.support_cxx98"></a>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.support_cxx98"></a>
+ Support for C++98 dialect.
+ </h4></div></div></div><p>Check for complete library coverage of the C++1998/2003 standard.
+ </p><pre class="programlisting">
+@@ -614,7 +613,7 @@
+ AC_DEFINE(STDCXX_98_HEADERS,,[Define if ISO C++ 1998 header files are present. ])
+ fi
+ ])
+-</pre></div><div class="section" title="Support for C++TR1 dialect."><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.support_tr1"></a>
++</pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.support_tr1"></a>
+ Support for C++TR1 dialect.
+ </h4></div></div></div><p>Check for library coverage of the TR1 standard.
+ </p><pre class="programlisting">
+@@ -691,7 +690,7 @@
+ AC_DEFINE(HAVE_TR1_UNORDERED_SET,,[Define if tr1/unordered_set is present. ])
+ fi
+ ])
+-</pre></div><div class="section" title="Support for C++11 dialect."><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.support_cxx11"></a>
++</pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.support_cxx11"></a>
+ Support for C++11 dialect.
+ </h4></div></div></div><p>Check for baseline language coverage in the compiler for the C++11 standard.
+ </p><pre class="programlisting">
+@@ -935,25 +934,25 @@
+ but the autoconf checks above could be extended to test for incomplete
+ C++11 support with <code class="option">-std=c++0x</code> and
+ <code class="option">-std=gnu++0x</code>.
+-</p></div><div class="section" title="Container::iterator_type is not necessarily Container::value_type*"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.iterator_type"></a>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.iterator_type"></a>
+ <code class="code">Container::iterator_type</code> is not necessarily <code class="code">Container::value_type*</code>
+ </h4></div></div></div><p>
+ This is a change in behavior from older versions. Now, most
+ <span class="type">iterator_type</span> typedefs in container classes are POD
+ objects, not <span class="type">value_type</span> pointers.
+-</p></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry" title="Migrating to GCC 4.1"><a id="idp23375200"></a><p><span class="title"><em>
++</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="idm269978837424"></a><p><span class="title"><em>
+ <a class="link" href="http://www.kegel.com/gcc/gcc4.html" target="_top">
+ Migrating to GCC 4.1
+ </a>
+- </em>. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span></p></div><div class="biblioentry" title="Building the Whole Debian Archive with GCC 4.1: A Summary"><a id="idp23377984"></a><p><span class="title"><em>
++ </em>. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span></p></div><div class="biblioentry"><a id="idm269978834640"></a><p><span class="title"><em>
+ <a class="link" href="http://lists.debian.org/debian-gcc/2006/03/msg00405.html" target="_top">
+ Building the Whole Debian Archive with GCC 4.1: A Summary
+ </a>
+- </em>. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span></p></div><div class="biblioentry" title="Migration guide for GCC-3.2"><a id="idp23380832"></a><p><span class="title"><em>
++ </em>. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span></p></div><div class="biblioentry"><a id="idm269978831792"></a><p><span class="title"><em>
+ <a class="link" href="http://annwm.lbl.gov/~leggett/Atlas/gcc-3.2.html" target="_top">
+ Migration guide for GCC-3.2
+ </a>
+ </em>. </span></p></div></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"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_free.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">API Evolution and Deprecation History </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix C. 
+ Free Software Needs Free Documentation
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bitmap_allocator.html
++++ b/src/libstdc++-v3/doc/html/manual/bitmap_allocator.html
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s05.html" title="Multiple Thread Example" /><link rel="next" href="bk01pt03ch21s02.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="bk01pt03ch20s05.html">Prev</a> </td><th width="60%" align="center">Part III. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s05.html" title="Multiple Thread Example" /><link rel="next" href="bk01pt03ch21s02.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="bk01pt03ch20s05.html">Prev</a> </td><th width="60%" align="center">Part III. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch21s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 21. The bitmap_allocator"><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="bk01pt03ch21s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></div><p>
+-</p><div class="section" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.bitmap.design"></a>Design</h2></div></div></div><p>
++</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch21s02.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="bk01pt03ch21s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></div><p>
++</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>
+ As this name suggests, this allocator uses a bit-map to keep track
+ of the used and unused memory locations for its book-keeping
+ purposes.
+@@ -30,4 +29,4 @@
+ Mutex Protection around every allocation/deallocation. The state
+ of the macro is picked up automatically from the gthr abstraction
+ layer.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch21s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Multiple Thread Example </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch21s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Multiple Thread Example </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt02.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt02.html
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Standard Contents
+- </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" title="Part II.  Standard Contents"><div class="titlepage"><div><div><h1 class="title"><a id="manual.std"></a>Part II. 
++ </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. 
+ Standard Contents
+- </h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="chapter"><a href="support.html">4.
++ </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.
+ Support
+
+ </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.
+@@ -13,13 +12,13 @@
+ </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="bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6.
+ Utilities
+
+-</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#idp13894640">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13898192">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13911488">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#idp15484560">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15507072">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15514368">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15528992">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#idp15545344">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15548928">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.
++</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#idm269988298944">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm269988295392">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269988282096">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#idm269986714912">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269986692400">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269986685104">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269986670480">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#idm269986654128">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269986650544">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.
+ Strings
+
+ </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.
+ Localization
+
+-</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#idp15752864">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.
++</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#idm269986448912">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.
+ Containers
+
+ </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="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.
+@@ -43,4 +42,4 @@
+ </a></span></dt><dd><dl><dt><span class="section"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></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="debug.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="support.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Debugging Support </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 4. 
+ Support
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt02ch05s02.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt02ch05s02.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Diagnostics
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr></table><hr /></div><div class="section" title="Concept Checking"><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>
++</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>
+ In 1999, SGI added <span class="quote">“<span class="quote">concept checkers</span>”</span> to their
+ implementation of the STL: code which checked the template
+ parameters of instantiated pieces of the STL, in order to insure
+@@ -47,4 +46,4 @@
+  </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 6. 
+ Utilities
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch17s02.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch17s02.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s03.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="bk01pt03ch17s03.html">Next</a></td></tr></table><hr /></div><div class="section" title="Semantics"><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s03.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="bk01pt03ch17s03.html">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>
+ </p><p>A program that uses the C++ standard library correctly
+ will maintain the same semantics under debug mode as it had with
+ the normal (release) library. All functional and exception-handling
+@@ -36,7 +35,7 @@
+ (N.B. In GCC 3.4.x and 4.0.0, due to a bug,
+ <code class="code">-D_GLIBXX_DEBUG_PEDANTIC</code> was also needed. The problem has
+ been fixed in GCC 4.0.1 and later versions.) </p><p>The following library components provide extra debugging
+- capabilities in debug mode:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">std::basic_string</code> (no safe iterators and see note below)</p></li><li class="listitem"><p><code class="code">std::bitset</code></p></li><li class="listitem"><p><code class="code">std::deque</code></p></li><li class="listitem"><p><code class="code">std::list</code></p></li><li class="listitem"><p><code class="code">std::map</code></p></li><li class="listitem"><p><code class="code">std::multimap</code></p></li><li class="listitem"><p><code class="code">std::multiset</code></p></li><li class="listitem"><p><code class="code">std::set</code></p></li><li class="listitem"><p><code class="code">std::vector</code></p></li><li class="listitem"><p><code class="code">std::unordered_map</code></p></li><li class="listitem"><p><code class="code">std::unordered_multimap</code></p></li><li class="listitem"><p><code class="code">std::unordered_set</code></p></li><li class="listitem"><p><code class="code">std::unordered_multiset</code></p></li></ul></div><p>N.B. although there are precondition checks for some string operations,
++ capabilities in debug mode:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="code">std::basic_string</code> (no safe iterators and see note below)</p></li><li class="listitem"><p><code class="code">std::bitset</code></p></li><li class="listitem"><p><code class="code">std::deque</code></p></li><li class="listitem"><p><code class="code">std::list</code></p></li><li class="listitem"><p><code class="code">std::map</code></p></li><li class="listitem"><p><code class="code">std::multimap</code></p></li><li class="listitem"><p><code class="code">std::multiset</code></p></li><li class="listitem"><p><code class="code">std::set</code></p></li><li class="listitem"><p><code class="code">std::vector</code></p></li><li class="listitem"><p><code class="code">std::unordered_map</code></p></li><li class="listitem"><p><code class="code">std::unordered_multimap</code></p></li><li class="listitem"><p><code class="code">std::unordered_set</code></p></li><li class="listitem"><p><code class="code">std::unordered_multiset</code></p></li></ul></div><p>N.B. although there are precondition checks for some string operations,
+ e.g. <code class="code">operator[]</code>,
+ they will not always be run when using the <code class="code">char</code> and
+ <code class="code">wchar_t</code> specialisations (<code class="code">std::string</code> and
+@@ -52,4 +51,4 @@
+ guaranteed to work. For full debug-mode support you can use the
+ <code class="code">__gnu_debug::basic_string</code> debugging container directly,
+ which always works correctly.
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug_mode.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="bk01pt03ch17s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 17. Debug Mode </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug_mode.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="bk01pt03ch17s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 17. Debug Mode </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch17s03.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch17s03.html
+@@ -1,7 +1,6 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s02.html" title="Semantics" /><link rel="next" href="bk01pt03ch17s04.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="bk01pt03ch17s02.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch17s04.html">Next</a></td></tr></table><hr /></div><div class="section" title="Using"><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>
+- </p><div class="section" title="Using the Debug Mode"><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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s02.html" title="Semantics" /><link rel="next" href="bk01pt03ch17s04.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="bk01pt03ch17s02.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch17s04.html">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>
++ </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
+ compiler flag <code class="code">-D_GLIBCXX_DEBUG</code>. Note that this flag
+ changes the sizes and behavior of standard class templates such
+ as <code class="code">std::vector</code>, and therefore you can only link code
+@@ -10,7 +9,7 @@
+ units.</p><p>By default, error messages are formatted to fit on lines of about
+ 78 characters. The environment variable
+ <code class="code">GLIBCXX_DEBUG_MESSAGE_LENGTH</code> can be used to request a
+- different length.</p></div><div class="section" title="Using a Specific Debug Container"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.specific"></a>Using a Specific Debug Container</h3></div></div></div><p>When it is not feasible to recompile your entire application, or
++ different length.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.specific"></a>Using a Specific Debug Container</h3></div></div></div><p>When it is not feasible to recompile your entire application, or
+ only specific containers need checking, debugging containers are
+ available as GNU extensions. These debugging containers are
+ functionally equivalent to the standard drop-in containers used in
+@@ -19,6 +18,6 @@
+ mode or with debug mode. The
+ following table provides the names and headers of the debugging
+ containers:
+-</p><div class="table"><a id="idp16454656"></a><p class="title"><strong>Table 17.1. Debugging Containers</strong></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename">&lt;debug/bitset&gt;</code></td></tr><tr><td align="left"><code class="classname">std::deque</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="classname">__gnu_debug::deque</code></td><td align="left"><code class="filename">&lt;debug/deque&gt;</code></td></tr><tr><td align="left"><code class="classname">std::list</code></td><td align="left"><code class="filename">list</code></td><td align="left"><code class="classname">__gnu_debug::list</code></td><td align="left"><code class="filename">&lt;debug/list&gt;</code></td></tr><tr><td align="left"><code class="classname">std::map</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::map</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multimap</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::multimap</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multiset</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::multiset</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::set</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::set</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::wstring</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::wstring</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::basic_string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::basic_string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::vector</code></td><td align="left"><code class="filename">vector</code></td><td align="left"><code class="classname">__gnu_debug::vector</code></td><td align="left"><code class="filename">&lt;debug/vector&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /><p>In addition, when compiling in C++11 mode, these additional
++</p><div class="table"><a id="idm269985752944"></a><p class="title"><strong>Table 17.1. Debugging Containers</strong></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename">&lt;debug/bitset&gt;</code></td></tr><tr><td align="left"><code class="classname">std::deque</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="classname">__gnu_debug::deque</code></td><td align="left"><code class="filename">&lt;debug/deque&gt;</code></td></tr><tr><td align="left"><code class="classname">std::list</code></td><td align="left"><code class="filename">list</code></td><td align="left"><code class="classname">__gnu_debug::list</code></td><td align="left"><code class="filename">&lt;debug/list&gt;</code></td></tr><tr><td align="left"><code class="classname">std::map</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::map</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multimap</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::multimap</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multiset</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::multiset</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::set</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::set</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::wstring</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::wstring</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::basic_string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::basic_string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::vector</code></td><td align="left"><code class="filename">vector</code></td><td align="left"><code class="classname">__gnu_debug::vector</code></td><td align="left"><code class="filename">&lt;debug/vector&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /><p>In addition, when compiling in C++11 mode, these additional
+ containers have additional debug capability.
+-</p><div class="table"><a id="idp16499552"></a><p class="title"><strong>Table 17.2. Debugging Containers C++11</strong></p><div class="table-contents"><table summary="Debugging Containers C++11" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_set</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s02.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="bk01pt03ch17s04.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>
++</p><div class="table"><a id="idm269985708048"></a><p class="title"><strong>Table 17.2. Debugging Containers C++11</strong></p><div class="table-contents"><table summary="Debugging Containers C++11" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_set</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s02.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="bk01pt03ch17s04.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>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch17s04.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch17s04.html
+@@ -1,11 +1,10 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s03.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="bk01pt03ch17s03.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" title="Design"><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>
+- </p><div class="section" title="Goals"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.goals"></a>Goals</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s03.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="bk01pt03ch17s03.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>
++ </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>
+ </p><p> The libstdc++ debug mode replaces unsafe (but efficient) standard
+ containers and iterators with semantically equivalent safe standard
+ containers and iterators to aid in debugging user programs. The
+- following goals directed the design of the libstdc++ debug mode:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Correctness</em></span>: the libstdc++ debug mode must not change
++ following goals directed the design of the libstdc++ debug mode:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Correctness</em></span>: the libstdc++ debug mode must not change
+ the semantics of the standard library for all cases specified in
+ the ANSI/ISO C++ standard. The essence of this constraint is that
+ any valid C++ program should behave in the same manner regardless
+@@ -89,10 +88,10 @@
+ (performance regression) or allocating extra memory associated
+ with each iterator with <code class="code">new</code> (changes the program
+ semantics).</p></li></ol></div><p>
+- </p></li></ul></div></div><div class="section" title="Methods"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.methods"></a>Methods</h3></div></div></div><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.methods"></a>Methods</h3></div></div></div><p>
+ </p><p>This section provides an overall view of the design of the
+ libstdc++ debug mode and details the relationship between design
+- decisions and the stated design goals.</p><div class="section" title="The Wrapper Model"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.wrappers"></a>The Wrapper Model</h4></div></div></div><p>The libstdc++ debug mode uses a wrapper model where the
++ decisions and the stated design goals.</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.wrappers"></a>The Wrapper Model</h4></div></div></div><p>The libstdc++ debug mode uses a wrapper model where the
+ debugging versions of library components (e.g., iterators and
+ containers) form a layer on top of the release versions of the
+ library components. The debugging components first verify that the
+@@ -109,19 +108,19 @@
+ their associated containers, which are necessary to detect certain
+ types of standard library usage errors such as dereferencing
+ past-the-end iterators or inserting into a container using an
+- iterator from a different container.</p><div class="section" title="Safe Iterators"><div class="titlepage"><div><div><h5 class="title"><a id="debug_mode.design.methods.safe_iter"></a>Safe Iterators</h5></div></div></div><p>Iterator wrappers provide a debugging layer over any iterator that
++ iterator from a different container.</p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="debug_mode.design.methods.safe_iter"></a>Safe Iterators</h5></div></div></div><p>Iterator wrappers provide a debugging layer over any iterator that
+ is attached to a particular container, and will manage the
+ information detailing the iterator's state (singular,
+ dereferenceable, etc.) and tracking the container to which the
+ iterator is attached. Because iterators have a well-defined, common
+ interface the iterator wrapper is implemented with the iterator
+ adaptor class template <code class="code">__gnu_debug::_Safe_iterator</code>,
+- which takes two template parameters:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">Iterator</code>: The underlying iterator type, which must
++ which takes two template parameters:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="code">Iterator</code>: The underlying iterator type, which must
+ be either the <code class="code">iterator</code> or <code class="code">const_iterator</code>
+ typedef from the sequence type this iterator can reference.</p></li><li class="listitem"><p><code class="code">Sequence</code>: The type of sequence that this iterator
+ references. This sequence must be a safe sequence (discussed below)
+ whose <code class="code">iterator</code> or <code class="code">const_iterator</code> typedef
+- is the type of the safe iterator.</p></li></ul></div></div><div class="section" title="Safe Sequences (Containers)"><div class="titlepage"><div><div><h5 class="title"><a id="debug_mode.design.methods.safe_seq"></a>Safe Sequences (Containers)</h5></div></div></div><p>Container wrappers provide a debugging layer over a particular
++ is the type of the safe iterator.</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="debug_mode.design.methods.safe_seq"></a>Safe Sequences (Containers)</h5></div></div></div><p>Container wrappers provide a debugging layer over a particular
+ container type. Because containers vary greatly in the member
+ functions they support and the semantics of those member functions
+ (especially in the area of iterator invalidation), container
+@@ -157,7 +156,7 @@
+
+ // duplicate std::list interface with debugging semantics
+ };
+-</pre></div></div><div class="section" title="Precondition Checking"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.precond"></a>Precondition Checking</h4></div></div></div><p>The debug mode operates primarily by checking the preconditions of
++</pre></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.precond"></a>Precondition Checking</h4></div></div></div><p>The debug mode operates primarily by checking the preconditions of
+ all standard library operations that it supports. Preconditions that
+ are always checked (regardless of whether or not we are in debug
+ mode) are checked via the <code class="code">__check_xxx</code> macros defined
+@@ -184,7 +183,7 @@
+ cousin <code class="code">_GLIBCXX_DEBUG_PEDASSERT</code>, or the assertion
+ check macro that supports more advance formulation of error
+ messages, <code class="code">_GLIBCXX_DEBUG_VERIFY</code>. These macros are
+- documented more thoroughly in the debug mode source code.</p></div><div class="section" title="Release- and debug-mode coexistence"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.coexistence"></a>Release- and debug-mode coexistence</h4></div></div></div><p>The libstdc++ debug mode is the first debug mode we know of that
++ documented more thoroughly in the debug mode source code.</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.coexistence"></a>Release- and debug-mode coexistence</h4></div></div></div><p>The libstdc++ debug mode is the first debug mode we know of that
+ is able to provide the "Per-use recompilation" (4) guarantee, that
+ allows release-compiled and debug-compiled code to be linked and
+ executed together without causing unpredictable behavior. This
+@@ -200,7 +199,7 @@
+ recompilation but have had to give up some checking of the
+ <code class="code">std::basic_string</code> class template (namely, safe
+ iterators).
+-</p><div class="section" title="Compile-time coexistence of release- and debug-mode components"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.compile"></a>Compile-time coexistence of release- and debug-mode components</h5></div></div></div><p>Both the release-mode components and the debug-mode
++</p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.compile"></a>Compile-time coexistence of release- and debug-mode components</h5></div></div></div><p>Both the release-mode components and the debug-mode
+ components need to exist within a single translation unit so that
+ the debug versions can wrap the release versions. However, only one
+ of these components should be user-visible at any particular
+@@ -254,7 +253,7 @@
+ // namespace __debug __attribute__ ((strong));
+ inline namespace __debug { }
+ }
+-</pre></div><div class="section" title="Link- and run-time coexistence of release- and debug-mode components"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.link"></a>Link- and run-time coexistence of release- and
++</pre></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.link"></a>Link- and run-time coexistence of release- and
+ debug-mode components</h5></div></div></div><p>Because each component has a distinct and separate release and
+ debug implementation, there is no issue with link-time
+ coexistence: the separate namespaces result in different mangled
+@@ -316,10 +315,10 @@
+ changes. The effect on users is expected to be minimal, as there are
+ simple alternatives (e.g., <code class="code">__gnu_debug::basic_string</code>),
+ and the usability benefit we gain from the ability to mix debug- and
+- release-compiled translation units is enormous.</p></div><div class="section" title="Alternatives for Coexistence"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.alt"></a>Alternatives for Coexistence</h5></div></div></div><p>The coexistence scheme above was chosen over many alternatives,
++ release-compiled translation units is enormous.</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.alt"></a>Alternatives for Coexistence</h5></div></div></div><p>The coexistence scheme above was chosen over many alternatives,
+ including language-only solutions and solutions that also required
+ extensions to the C++ front end. The following is a partial list of
+- solutions, with justifications for our rejection of each.</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Completely separate debug/release libraries</em></span>: This is by
++ solutions, with justifications for our rejection of each.</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Completely separate debug/release libraries</em></span>: This is by
+ far the simplest implementation option, where we do not allow any
+ coexistence of debug- and release-compiled translation units in a
+ program. This solution has an extreme negative affect on usability,
+@@ -388,11 +387,11 @@
+ that breaks user specialization), and additional testcases will be
+ added as we are able to identify other typical problem cases. These
+ test cases will serve as a benchmark by which we can compare debug
+- mode implementations.</p></div></div></div><div class="section" title="Other Implementations"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.other"></a>Other Implementations</h3></div></div></div><p>
++ mode implementations.</p></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.other"></a>Other Implementations</h3></div></div></div><p>
+ </p><p> There are several existing implementations of debug modes for C++
+ standard library implementations, although none of them directly
+ supports debugging for programs using libstdc++. The existing
+- implementations include:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><a class="link" href="http://www.mathcs.sjsu.edu/faculty/horstman/safestl.html" target="_top">SafeSTL</a>:
++ 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>:
+ SafeSTL was the original debugging version of the Standard Template
+ Library (STL), implemented by Cay S. Horstmann on top of the
+ Hewlett-Packard STL. Though it inspired much work in this area, it
+@@ -409,4 +408,4 @@
+ a full debug-mode implementation (including debugging for
+ CodeWarrior extensions) and is easy to use, although it meets only
+ the "Full recompilation" (1) recompilation
+- guarantee.</p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s03.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="parallel_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 18. Parallel Mode</td></tr></table></div></body></html>
++ guarantee.</p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s03.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="parallel_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 18. Parallel Mode</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch18s02.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch18s02.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s03.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="bk01pt03ch18s03.html">Next</a></td></tr></table><hr /></div><div class="section" title="Semantics"><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,
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s03.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="bk01pt03ch18s03.html">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,
+ i.e. user-defined functors must not throw exceptions.
+ Also, the order of execution is not guaranteed for some functions, of course.
+ Therefore, user-defined functors should not have any concurrent side effects.
+@@ -8,4 +7,4 @@
+ OpenMP parallel regions in concurrent threads,
+ it is not possible to call parallel STL algorithm in
+ concurrent threads, either.
+-It might work with other compilers, though.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode.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="bk01pt03ch18s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 18. Parallel Mode </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
++It might work with other compilers, though.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode.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="bk01pt03ch18s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 18. Parallel Mode </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch18s03.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch18s03.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s02.html" title="Semantics" /><link rel="next" href="bk01pt03ch18s04.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="bk01pt03ch18s02.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s04.html">Next</a></td></tr></table><hr /></div><div class="section" title="Using"><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" title="Prerequisite Compiler Flags"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.prereq_flags"></a>Prerequisite Compiler Flags</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s02.html" title="Semantics" /><link rel="next" href="bk01pt03ch18s04.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="bk01pt03ch18s02.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s04.html">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>
+ Any use of parallel functionality requires additional compiler
+ and runtime support, in particular support for OpenMP. Adding this support is
+ not difficult: just compile your application with the compiler
+@@ -17,7 +16,7 @@
+ as <code class="literal">-march=i686</code>,
+ <code class="literal">-march=native</code> or <code class="literal">-mcpu=v9</code>. See
+ the GCC manual for more information.
+-</p></div><div class="section" title="Using Parallel Mode"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.parallel_mode"></a>Using Parallel Mode</h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.parallel_mode"></a>Using Parallel Mode</h3></div></div></div><p>
+ To use the libstdc++ parallel mode, compile your application with
+ the prerequisite flags as detailed above, and in addition
+ add <code class="constant">-D_GLIBCXX_PARALLEL</code>. This will convert all
+@@ -34,7 +33,7 @@
+ if no instantiation of a container is passed between the two
+ translation units. Parallel mode functionality has distinct linkage,
+ and cannot be confused with normal mode symbols.
+-</p></div><div class="section" title="Using Specific Parallel Components"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.specific"></a>Using Specific Parallel Components</h3></div></div></div><p>When it is not feasible to recompile your entire application, or
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.specific"></a>Using Specific Parallel Components</h3></div></div></div><p>When it is not feasible to recompile your entire application, or
+ only specific algorithms need to be parallel-aware, individual
+ parallel algorithms can be made available explicitly. These
+ parallel algorithms are functionally equivalent to the standard
+@@ -63,4 +62,4 @@
+ flags for atomic operations.)
+ </p><p> The following table provides the names and headers of all the
+ parallel algorithms that can be used in a similar manner:
+-</p><div class="table"><a id="idp16689952"></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="bk01pt03ch18s02.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="bk01pt03ch18s04.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>
++</p><div class="table"><a id="idm269985518144"></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="bk01pt03ch18s02.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="bk01pt03ch18s04.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>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch18s04.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch18s04.html
+@@ -1,7 +1,6 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s03.html" title="Using" /><link rel="next" href="bk01pt03ch18s05.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="bk01pt03ch18s03.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s05.html">Next</a></td></tr></table><hr /></div><div class="section" title="Design"><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>
+- </p><div class="section" title="Interface Basics"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.intro"></a>Interface Basics</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s03.html" title="Using" /><link rel="next" href="bk01pt03ch18s05.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="bk01pt03ch18s03.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s05.html">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>
++ </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>
+ All parallel algorithms are intended to have signatures that are
+ equivalent to the ISO C++ algorithms replaced. For instance, the
+ <code class="function">std::adjacent_find</code> function is declared as:
+@@ -36,13 +35,13 @@
+ compile-time or run-time conditions.
+ </p><p> The available signature options are specific for the different
+ algorithms/algorithm classes.</p><p> The general view of overloads for the parallel algorithms look like this:
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>ISO C++ signature</p></li><li class="listitem"><p>ISO C++ signature + sequential_tag argument</p></li><li class="listitem"><p>ISO C++ signature + algorithm-specific tag type
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>ISO C++ signature</p></li><li class="listitem"><p>ISO C++ signature + sequential_tag argument</p></li><li class="listitem"><p>ISO C++ signature + algorithm-specific tag type
+ (several signatures)</p></li></ul></div><p> Please note that the implementation may use additional functions
+ (designated with the <code class="code">_switch</code> suffix) to dispatch from the
+ ISO C++ signature to the correct parallel version. Also, some of the
+ algorithms do not have support for run-time conditions, so the last
+ overload is therefore missing.
+-</p></div><div class="section" title="Configuration and Tuning"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.tuning"></a>Configuration and Tuning</h3></div></div></div><div class="section" title="Setting up the OpenMP Environment"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.omp"></a>Setting up the OpenMP Environment</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.tuning"></a>Configuration and Tuning</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.omp"></a>Setting up the OpenMP Environment</h4></div></div></div><p>
+ Several aspects of the overall runtime environment can be manipulated
+ by standard OpenMP function calls.
+ </p><p>
+@@ -72,7 +71,7 @@
+ nested parallelism (<code class="function">omp_set_nested</code>), schedule kind
+ (<code class="function">omp_set_schedule</code>), and others. See the OpenMP
+ documentation for more information.
+-</p></div><div class="section" title="Compile Time Switches"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.compile"></a>Compile Time Switches</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.compile"></a>Compile Time Switches</h4></div></div></div><p>
+ To force an algorithm to execute sequentially, even though parallelism
+ is switched on in general via the macro <code class="constant">_GLIBCXX_PARALLEL</code>,
+ add <code class="classname">__gnu_parallel::sequential_tag()</code> to the end
+@@ -126,7 +125,7 @@
+ <code class="code">__gnu_parallel::balanced_quicksort_tag</code>.
+ Multiway mergesort comes with the two splitting strategies for multi-way
+ merging. The quicksort options cannot be used for <code class="code">stable_sort</code>.
+-</p></div><div class="section" title="Run Time Settings and Defaults"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.settings"></a>Run Time Settings and Defaults</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.settings"></a>Run Time Settings and Defaults</h4></div></div></div><p>
+ The default parallelization strategy, the choice of specific algorithm
+ strategy, the minimum threshold limits for individual parallel
+ algorithms, and aspects of the underlying hardware can be specified as
+@@ -194,7 +193,7 @@
+
+ return 0;
+ }
+-</pre></div></div><div class="section" title="Implementation Namespaces"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.impl"></a>Implementation Namespaces</h3></div></div></div><p> One namespace contain versions of code that are always
++</pre></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.impl"></a>Implementation Namespaces</h3></div></div></div><p> One namespace contain versions of code that are always
+ explicitly sequential:
+ <code class="code">__gnu_serial</code>.
+ </p><p> Two namespaces contain the parallel mode:
+@@ -210,4 +209,4 @@
+ </p><p> More information, and an organized index of types and functions
+ related to the parallel mode on a per-namespace basis, can be found in
+ the generated source documentation.
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s03.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="bk01pt03ch18s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Testing</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s03.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="bk01pt03ch18s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Testing</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch18s05.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch18s05.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s04.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="bk01pt03ch18s04.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" title="Testing"><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s04.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="bk01pt03ch18s04.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>
+ Both the normal conformance and regression tests and the
+ supplemental performance tests work.
+ </p><p>
+@@ -23,4 +22,4 @@
+ additional software dependencies than the usual bare-boned text
+ file, and can be generated by using the <code class="code">make
+ doc-performance</code> rule in the testsuite's Makefile.
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s04.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="profile_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 19. Profile Mode</td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s04.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="profile_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 19. Profile Mode</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s02.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s02.html
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s03.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="bk01pt03ch19s03.html">Next</a></td></tr></table><hr /></div><div class="section" title="Design"><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>
+-</p><div class="table"><a id="idp16944832"></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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s03.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="bk01pt03ch19s03.html">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>
++</p><div class="table"><a id="idm269985263760"></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
+ only included from <code class="code">impl/profiler.h</code>, which is the only
+ file included from the public headers.</td></tr></tbody></table></div></div><br class="table-break" /><p>
+-</p><div class="section" title="Wrapper Model"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.wrapper"></a>Wrapper Model</h3></div></div></div><p>
++</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>
+ In order to get our instrumented library version included instead of the
+ release one,
+ we use the same wrapper model as the debug mode.
+@@ -25,7 +24,7 @@
+ Currently, mixing the profile mode with debug and parallel extensions is
+ not allowed. Mixing them at compile time will result in preprocessor errors.
+ Mixing them at link time is undefined.
+- </p></div><div class="section" title="Instrumentation"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.instrumentation"></a>Instrumentation</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.instrumentation"></a>Instrumentation</h3></div></div></div><p>
+ Instead of instrumenting every public entry and exit point,
+ we chose to add instrumentation on demand, as needed
+ by individual diagnostics.
+@@ -44,7 +43,7 @@
+ </p><p>
+ All the instrumentation on/off compile time switches live in
+ <code class="code">include/profile/profiler.h</code>.
+- </p></div><div class="section" title="Run Time Behavior"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.rtlib"></a>Run Time Behavior</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.rtlib"></a>Run Time Behavior</h3></div></div></div><p>
+ For practical reasons, the instrumentation library processes the trace
+ partially
+ rather than dumping it to disk in raw form. Each event is processed when
+@@ -63,18 +62,18 @@
+ For details, see
+ <a class="link" href="http://dx.doi.org/10.1109/CGO.2009.36" target="_top">paper presented at
+ CGO 2009</a>.
+- </p></div><div class="section" title="Analysis and Diagnostics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.analysis"></a>Analysis and Diagnostics</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.analysis"></a>Analysis and Diagnostics</h3></div></div></div><p>
+ Final analysis takes place offline, and it is based entirely on the
+ generated trace and debugging info in the application binary.
+ See section Diagnostics for a list of analysis types that we plan to support.
+ </p><p>
+ The input to the analysis is a table indexed by profile type and call stack.
+ The data type for each entry depends on the profile type.
+- </p></div><div class="section" title="Cost Model"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.cost-model"></a>Cost Model</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.cost-model"></a>Cost Model</h3></div></div></div><p>
+ While it is likely that cost models become complex as we get into
+ more sophisticated analysis, we will try to follow a simple set of rules
+ at the beginning.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Relative benefit estimation:</em></span>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Relative benefit estimation:</em></span>
+ The idea is to estimate or measure the cost of all operations
+ in the original scenario versus the scenario we advise to switch to.
+ For instance, when advising to change a vector to a list, an occurrence
+@@ -98,7 +97,7 @@
+ For instance, when considering switching from <code class="code">set</code> to
+ <code class="code">unordered_set</code>, if we detect use of operator <code class="code">++</code>,
+ we will simply not issue the advice, since this could signal that the use
+- care require a sorted container.</p></li></ul></div></div><div class="section" title="Reports"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.reports"></a>Reports</h3></div></div></div><p>
++ care require a sorted container.</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.reports"></a>Reports</h3></div></div></div><p>
+ There are two types of reports. First, if we recognize a pattern for which
+ we have a substitute that is likely to give better performance, we print
+ the advice and estimated performance gain. The advice is usually associated
+@@ -110,7 +109,7 @@
+ which have the worst data locality in actual traversals.
+ Although this does not offer a solution,
+ it helps the user focus on the key problems and ignore the uninteresting ones.
+- </p></div><div class="section" title="Testing"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.testing"></a>Testing</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.testing"></a>Testing</h3></div></div></div><p>
+ First, we want to make sure we preserve the behavior of the release mode.
+ You can just type <code class="code">"make check-profile"</code>, which
+ builds and runs the whole test suite in profile mode.
+@@ -119,4 +118,4 @@
+ We created a <code class="code">profile</code> directory in the test suite.
+ Each diagnostic must come with at least two tests, one for false positives
+ and one for false negatives.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 19. Profile Mode </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Extensions for Custom Containers</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 19. Profile Mode </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Extensions for Custom Containers</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s03.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s03.html
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s02.html" title="Design" /><link rel="next" href="bk01pt03ch19s04.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="bk01pt03ch19s02.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s04.html">Next</a></td></tr></table><hr /></div><div class="section" title="Extensions for Custom Containers"><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s02.html" title="Design" /><link rel="next" href="bk01pt03ch19s04.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="bk01pt03ch19s02.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s04.html">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>
+ Many large projects use their own data structures instead of the ones in the
+ standard library. If these data structures are similar in functionality
+ to the standard library, they can be instrumented with the same hooks
+ that are used to instrument the standard library.
+ The instrumentation API is exposed in file
+ <code class="code">profiler.h</code> (look for "Instrumentation hooks").
+- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Empirical Cost Model</td></tr></table></div></body></html>
++ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Empirical Cost Model</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s04.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s04.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s03.html" title="Extensions for Custom Containers" /><link rel="next" href="bk01pt03ch19s05.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="bk01pt03ch19s03.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s05.html">Next</a></td></tr></table><hr /></div><div class="section" title="Empirical Cost Model"><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s03.html" title="Extensions for Custom Containers" /><link rel="next" href="bk01pt03ch19s05.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="bk01pt03ch19s03.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s05.html">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>
+ Currently, the cost model uses formulas with predefined relative weights
+ for alternative containers or container implementations. For instance,
+ iterating through a vector is X times faster than iterating through a list.
+@@ -15,4 +14,4 @@
+ filled in either by hand or by an automated training mechanism.
+ The analysis module will then use this database instead of the built in.
+ generic parameters.
+- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Extensions for Custom Containers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation Issues</td></tr></table></div></body></html>
++ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Extensions for Custom Containers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation Issues</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s05.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s05.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s04.html" title="Empirical Cost Model" /><link rel="next" href="bk01pt03ch19s06.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="bk01pt03ch19s04.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s06.html">Next</a></td></tr></table><hr /></div><div class="section" title="Implementation Issues"><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" title="Stack Traces"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stack"></a>Stack Traces</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s04.html" title="Empirical Cost Model" /><link rel="next" href="bk01pt03ch19s06.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="bk01pt03ch19s04.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s06.html">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>
+ Accurate stack traces are needed during profiling since we group events by
+ call context and dynamic instance. Without accurate traces, diagnostics
+ may be hard to interpret. For instance, when giving advice to the user
+@@ -11,24 +10,24 @@
+ <code class="code">_GLIBCXX_PROFILE_STACK_DEPTH</code> can be set
+ to 0 if you are willing to give up call context information, or to a small
+ positive value to reduce run time overhead.
+- </p></div><div class="section" title="Symbolization of Instruction Addresses"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.symbols"></a>Symbolization of Instruction Addresses</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.symbols"></a>Symbolization of Instruction Addresses</h3></div></div></div><p>
+ The profiling and analysis phases use only instruction addresses.
+ An external utility such as addr2line is needed to postprocess the result.
+ We do not plan to add symbolization support in the profile extension.
+ This would require access to symbol tables, debug information tables,
+ external programs or libraries and other system dependent information.
+- </p></div><div class="section" title="Concurrency"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.concurrency"></a>Concurrency</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.concurrency"></a>Concurrency</h3></div></div></div><p>
+ Our current model is simplistic, but precise.
+ We cannot afford to approximate because some of our diagnostics require
+ precise matching of operations to container instance and call context.
+ During profiling, we keep a single information table per diagnostic.
+ There is a single lock per information table.
+- </p></div><div class="section" title="Using the Standard Library in the Instrumentation Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stdlib-in-proflib"></a>Using the Standard Library in the Instrumentation Implementation</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stdlib-in-proflib"></a>Using the Standard Library in the Instrumentation Implementation</h3></div></div></div><p>
+ As much as we would like to avoid uses of libstdc++ within our
+ instrumentation library, containers such as unordered_map are very
+ appealing. We plan to use them as long as they are named properly
+ to avoid ambiguity.
+- </p></div><div class="section" title="Malloc Hooks"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.malloc-hooks"></a>Malloc Hooks</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.malloc-hooks"></a>Malloc Hooks</h3></div></div></div><p>
+ User applications/libraries can provide malloc hooks.
+ When the implementation of the malloc hooks uses stdlibc++, there can
+ be an infinite cycle between the profile mode instrumentation and the
+@@ -42,10 +41,10 @@
+ uses non-recursive locks.
+ XXX: A definitive solution to this problem would be for the profile extension
+ to use a custom allocator internally, and perhaps not to use libstdc++.
+- </p></div><div class="section" title="Construction and Destruction of Global Objects"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.construction-destruction"></a>Construction and Destruction of Global Objects</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.construction-destruction"></a>Construction and Destruction of Global Objects</h3></div></div></div><p>
+ The profiling library state is initialized at the first call to a profiling
+ method. This allows us to record the construction of all global objects.
+ However, we cannot do the same at destruction time. The trace is written
+ by a function registered by <code class="code">atexit</code>, thus invoked by
+ <code class="code">exit</code>.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s06.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Empirical Cost Model </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Developer Information</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s06.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Empirical Cost Model </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Developer Information</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s06.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s06.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s05.html" title="Implementation Issues" /><link rel="next" href="bk01pt03ch19s07.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="bk01pt03ch19s05.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s07.html">Next</a></td></tr></table><hr /></div><div class="section" title="Developer Information"><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" title="Big Picture"><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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s05.html" title="Implementation Issues" /><link rel="next" href="bk01pt03ch19s07.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="bk01pt03ch19s05.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s07.html">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
+ <code class="code">-D_GLIBCXX_PROFILE</code> through preprocessor directives in
+ <code class="code">include/std/*</code>.
+ </p><p>Instrumented implementations are provided in
+@@ -14,7 +13,7 @@
+ must ensure (1) that the call is guarded against reentrance and
+ (2) that the call can be turned off at compile time using a
+ <code class="code">-D_GLIBCXX_PROFILE_...</code> compiler option.
+- </p></div><div class="section" title="How To Add A Diagnostic"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.howto"></a>How To Add A Diagnostic</h3></div></div></div><p>Let's say the diagnostic name is "magic".
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.howto"></a>How To Add A Diagnostic</h3></div></div></div><p>Let's say the diagnostic name is "magic".
+ </p><p>If you need to instrument a header not already under
+ <code class="code">include/profile/*</code>, first edit the corresponding header
+ under <code class="code">include/std/</code> and add a preprocessor directive such
+@@ -42,7 +41,7 @@
+ All names of methods in namespace <code class="code">__gnu_profile</code> called from
+ <code class="code">profiler.h</code> must start with <code class="code">__trace_magic_</code>.
+ </p><p>Add the implementation of the diagnostic.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Create new file <code class="code">include/profile/impl/profiler_magic.h</code>.
+ </p></li><li class="listitem"><p>
+ Define class <code class="code">__magic_info: public __object_info_base</code>.
+@@ -65,4 +64,4 @@
+ <code class="code">include/profile/impl/profiler_trace.h</code>. Use
+ <code class="code">__trace_vector_to_list</code> as an example.
+ </p><p>Add documentation in file <code class="code">doc/xml/manual/profile_mode.xml</code>.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s07.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation Issues </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Diagnostics</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s07.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation Issues </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Diagnostics</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s07.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s07.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s06.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="bk01pt03ch19s06.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" title="Diagnostics"><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s06.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="bk01pt03ch19s06.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>
+ The table below presents all the diagnostics we intend to implement.
+ Each diagnostic has a corresponding compile time switch
+ <code class="code">-D_GLIBCXX_PROFILE_&lt;diagnostic&gt;</code>.
+@@ -18,7 +17,7 @@
+ A high accuracy means that the diagnostic is unlikely to be wrong.
+ These grades are not perfect. They are just meant to guide users with
+ specific needs or time budgets.
+- </p><div class="table"><a id="idp17050544"></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="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers" title="Containers">
++ </p><div class="table"><a id="idm269985157968"></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="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers" title="Containers">
+ CONTAINERS</a></td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_small" title="Hashtable Too Small">
+ 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="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_large" title="Hashtable Too Large">
+ 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="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.inefficient_hash" title="Inefficient Hash">
+@@ -35,7 +34,7 @@
+ LOCALITY</a></td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.sw_prefetch" title="Need Software Prefetch">
+ SOFTWARE_PREFETCH</a></td><td align="left">8</td><td align="left">8</td><td align="left"> </td><td align="left">5</td><td align="left">no</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.linked" title="Linked Structure Locality">
+ RBTREE_LOCALITY</a></td><td align="left">4</td><td align="left">8</td><td align="left"> </td><td align="left">5</td><td align="left">no</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.false_share" title="False Sharing">
+- FALSE_SHARING</a></td><td align="left">8</td><td align="left">10</td><td align="left"> </td><td align="left">10</td><td align="left">no</td></tr></tbody></table></div></div><br class="table-break" /><div class="section" title="Diagnostic Template"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.template"></a>Diagnostic Template</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++ FALSE_SHARING</a></td><td align="left">8</td><td align="left">10</td><td align="left"> </td><td align="left">10</td><td align="left">no</td></tr></tbody></table></div></div><br class="table-break" /><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.template"></a>Diagnostic Template</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_&lt;diagnostic&gt;</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> What problem will it diagnose?
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>.
+@@ -52,10 +51,10 @@
+ ...
+ advice sample
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Containers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.containers"></a>Containers</h3></div></div></div><p>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.containers"></a>Containers</h3></div></div></div><p>
+ <span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_CONTAINERS</code>.
+-</p><div class="section" title="Hashtable Too Small"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_too_small"></a>Hashtable Too Small</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_too_small"></a>Hashtable Too Small</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_HASHTABLE_TOO_SMALL</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect hashtables with many
+ rehash operations, small construction size and large destruction size.
+@@ -81,7 +80,7 @@
+
+ foo.cc:1: advice: Changing initial unordered_set size from 10 to 1000000 saves 1025530 rehash operations.
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Hashtable Too Large"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_too_large"></a>Hashtable Too Large</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_too_large"></a>Hashtable Too Large</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_HASHTABLE_TOO_LARGE</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect hashtables which are
+ never filled up because fewer elements than reserved are ever
+@@ -110,7 +109,7 @@
+ foo.cc:1: advice: Changing initial unordered_set size from 100 to 10 saves N
+ bytes of memory and M iteration steps.
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Inefficient Hash"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.inefficient_hash"></a>Inefficient Hash</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.inefficient_hash"></a>Inefficient Hash</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_INEFFICIENT_HASH</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect hashtables with polarized
+ distribution.
+@@ -141,7 +140,7 @@
+ hs.find(i);
+ }
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Vector Too Small"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_too_small"></a>Vector Too Small</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_too_small"></a>Vector Too Small</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_VECTOR_TOO_SMALL</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span>Detect vectors with many
+ resize operations, small construction size and large destruction size..
+@@ -166,7 +165,7 @@
+ foo.cc:1: advice: Changing initial vector size from 10 to 1000000 saves
+ copying 4000000 bytes and 20 memory allocations and deallocations.
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Vector Too Large"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_too_large"></a>Vector Too Large</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_too_large"></a>Vector Too Large</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_VECTOR_TOO_LARGE</code>
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span>Detect vectors which are
+ never filled up because fewer elements than reserved are ever
+@@ -192,7 +191,7 @@
+ foo.cc:1: advice: Changing initial vector size from 100 to 10 saves N
+ bytes of memory and may reduce the number of cache and TLB misses.
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Vector to Hashtable"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_to_hashtable"></a>Vector to Hashtable</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_to_hashtable"></a>Vector to Hashtable</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_VECTOR_TO_HASHTABLE</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect uses of
+ <code class="code">vector</code> that can be substituted with <code class="code">unordered_set</code>
+@@ -223,7 +222,7 @@
+ foo.cc:1: advice: Changing "vector" to "unordered_set" will save about 500,000
+ comparisons.
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Hashtable to Vector"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_to_vector"></a>Hashtable to Vector</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_to_vector"></a>Hashtable to Vector</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_HASHTABLE_TO_VECTOR</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect uses of
+ <code class="code">unordered_set</code> that can be substituted with <code class="code">vector</code>
+@@ -252,7 +251,7 @@
+ foo.cc:1: advice: Changing "unordered_set" to "vector" will save about N
+ indirections and may achieve better data locality.
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Vector to List"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_to_list"></a>Vector to List</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_to_list"></a>Vector to List</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_VECTOR_TO_LIST</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
+ <code class="code">vector</code> could be substituted with <code class="code">list</code> for
+@@ -282,7 +281,7 @@
+ foo.cc:1: advice: Changing "vector" to "list" will save about 5,000,000
+ operations.
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="List to Vector"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.list_to_vector"></a>List to Vector</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.list_to_vector"></a>List to Vector</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_LIST_TO_VECTOR</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
+ <code class="code">list</code> could be substituted with <code class="code">vector</code> for
+@@ -309,7 +308,7 @@
+ foo.cc:1: advice: Changing "list" to "vector" will save about 1000000 indirect
+ memory references.
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="List to Forward List (Slist)"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.list_to_slist"></a>List to Forward List (Slist)</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.list_to_slist"></a>List to Forward List (Slist)</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_LIST_TO_SLIST</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
+ <code class="code">list</code> could be substituted with <code class="code">forward_list</code> for
+@@ -339,7 +338,7 @@
+
+ foo.cc:1: advice: Change "list" to "forward_list".
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Ordered to Unordered Associative Container"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.assoc_ord_to_unord"></a>Ordered to Unordered Associative Container</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.assoc_ord_to_unord"></a>Ordered to Unordered Associative Container</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_ORDERED_TO_UNORDERED</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where ordered
+ associative containers can be replaced with unordered ones.
+@@ -366,16 +365,16 @@
+ 7 sum += *s.find(i);
+ 8 }
+ </pre><p>
+-</p></li></ul></div></div></div><div class="section" title="Algorithms"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.algorithms"></a>Algorithms</h3></div></div></div><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.algorithms"></a>Algorithms</h3></div></div></div><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_ALGORITHMS</code>.
+- </p><div class="section" title="Sort Algorithm Performance"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.algorithms.sort"></a>Sort Algorithm Performance</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++ </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.algorithms.sort"></a>Sort Algorithm Performance</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_SORT</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Give measure of sort algorithm
+ performance based on actual input. For instance, advise Radix Sort over
+ Quick Sort for a particular call context.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
+ See papers:
+- <a class="link" href="http://portal.acm.org/citation.cfm?doid=1065944.1065981" target="_top">
++ <a class="link" href="https://dl.acm.org/citation.cfm?doid=1065944.1065981" target="_top">
+ A framework for adaptive algorithm selection in STAPL</a> and
+ <a class="link" href="http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=4228227" target="_top">
+ Optimizing Sorting with Machine Learning Algorithms</a>.
+@@ -389,9 +388,9 @@
+ Runtime(algo) for algo in [radix, quick, merge, ...]</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
+ </p><pre class="programlisting">
+ </pre><p>
+-</p></li></ul></div></div></div><div class="section" title="Data Locality"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.locality"></a>Data Locality</h3></div></div></div><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.locality"></a>Data Locality</h3></div></div></div><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_LOCALITY</code>.
+- </p><div class="section" title="Need Software Prefetch"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.locality.sw_prefetch"></a>Need Software Prefetch</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++ </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.locality.sw_prefetch"></a>Need Software Prefetch</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_SOFTWARE_PREFETCH</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Discover sequences of indirect
+ memory accesses that are not regular, thus cannot be predicted by
+@@ -434,7 +433,7 @@
+
+ foo.cc:7: advice: Insert prefetch instruction.
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Linked Structure Locality"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.locality.linked"></a>Linked Structure Locality</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.locality.linked"></a>Linked Structure Locality</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_RBTREE_LOCALITY</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Give measure of locality of
+ objects stored in linked structures (lists, red-black trees and hashtables)
+@@ -479,13 +478,13 @@
+ foo.cc:5: advice: High scatter score NNN for set built here. Consider changing
+ the allocation sequence or switching to a structure conscious allocator.
+ </pre><p>
+-</p></li></ul></div></div></div><div class="section" title="Multithreaded Data Access"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.mthread"></a>Multithreaded Data Access</h3></div></div></div><p>
++</p></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.mthread"></a>Multithreaded Data Access</h3></div></div></div><p>
+ The diagnostics in this group are not meant to be implemented short term.
+ They require compiler support to know when container elements are written
+ to. Instrumentation can only tell us when elements are referenced.
+ </p><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_MULTITHREADED</code>.
+- </p><div class="section" title="Data Dependence Violations at Container Level"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.mthread.ddtest"></a>Data Dependence Violations at Container Level</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++ </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.mthread.ddtest"></a>Data Dependence Violations at Container Level</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_DDTEST</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect container elements
+ that are referenced from multiple threads in the parallel region or
+@@ -501,7 +500,7 @@
+ Keep a shadow for each container. Record iterator dereferences and
+ container member accesses. Issue advice for elements referenced by
+ multiple threads.
+- See paper: <a class="link" href="http://portal.acm.org/citation.cfm?id=207110.207148" target="_top">
++ See paper: <a class="link" href="https://dl.acm.org/citation.cfm?id=207110.207148" target="_top">
+ The LRPD test: speculative run-time parallelization of loops with
+ privatization and reduction parallelization</a>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
+@@ -509,7 +508,7 @@
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
+ </p><pre class="programlisting">
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="False Sharing"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.mthread.false_share"></a>False Sharing</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.mthread.false_share"></a>False Sharing</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_FALSE_SHARING</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect elements in the
+ same container which share a cache line, are written by at least one
+@@ -542,7 +541,7 @@
+ foo.cc:1: advice: Change container structure or padding to avoid false
+ sharing in multithreaded access at foo.cc:4. Detected N shared cache lines.
+ </pre><p>
+-</p></li></ul></div></div></div><div class="section" title="Statistics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.statistics"></a>Statistics</h3></div></div></div><p>
++</p></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.statistics"></a>Statistics</h3></div></div></div><p>
+ <span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_STATISTICS</code>.
+ </p><p>
+@@ -555,4 +554,4 @@
+ This diagnostic will not issue any advice, but it will print statistics for
+ each container construction site. The statistics will contain the cost
+ of each operation actually performed on the container.
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s06.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="mt_allocator.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Developer Information </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 20. The mt_allocator</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s06.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="mt_allocator.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Developer Information </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 20. The mt_allocator</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch20s02.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch20s02.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s03.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="bk01pt03ch20s03.html">Next</a></td></tr></table><hr /></div><div class="section" title="Design Issues"><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" title="Overview"><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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s03.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="bk01pt03ch20s03.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
+ describing the characteristics of the memory pool, a policy class
+ containing this pool that links instantiation types to common or
+ individual pools, and a class inheriting from the policy class that is
+@@ -36,4 +35,4 @@
+ </pre><p> This class has the interface required for standard library allocator
+ classes, namely member functions <code class="code">allocate</code> and
+ <code class="code">deallocate</code>, plus others.
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="mt_allocator.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 20. The mt_allocator </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="mt_allocator.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 20. The mt_allocator </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch20s03.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch20s03.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s02.html" title="Design Issues" /><link rel="next" href="bk01pt03ch20s04.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="bk01pt03ch20s02.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch20s04.html">Next</a></td></tr></table><hr /></div><div class="section" title="Implementation"><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" title="Tunable Parameters"><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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s02.html" title="Design Issues" /><link rel="next" href="bk01pt03ch20s04.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="bk01pt03ch20s02.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch20s04.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
+ exists a nested <code class="code">struct __pool_base::_Tune</code> that contains all
+ these parameters, which include settings for
+-</p><div class="itemizedlist"><ul class="itemizedlist" 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
++</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
+ happen before any allocations take place, when the allocator itself is
+ initialized. For instance:
+ </p><pre class="programlisting">
+@@ -39,7 +38,7 @@
+
+ return 0;
+ }
+-</pre></div><div class="section" title="Initialization"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.init"></a>Initialization</h3></div></div></div><p>
++</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.init"></a>Initialization</h3></div></div></div><p>
+ The static variables (pointers to freelists, tuning parameters etc)
+ are initialized as above, or are set to the global defaults.
+ </p><p>
+@@ -131,7 +130,7 @@
+ for this specific bin. This only occurs when a number of blocks
+ are grabbed from the global list to a thread specific list or when
+ a thread decides to return some blocks to the global freelist.
+-</p></div><div class="section" title="Deallocation Notes"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.deallocation"></a>Deallocation Notes</h3></div></div></div><p> Notes about deallocation. This allocator does not explicitly
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.deallocation"></a>Deallocation Notes</h3></div></div></div><p> Notes about deallocation. This allocator does not explicitly
+ release memory. Because of this, memory debugging programs like
+ valgrind or purify may notice leaks: sorry about this
+ inconvenience. Operating systems will reclaim allocated memory at
+@@ -158,4 +157,4 @@
+ pool that frees memory, see the following
+ <a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-6.cc?view=markup" target="_top">
+ example.</a>
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design Issues </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Single Thread Example</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design Issues </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Single Thread Example</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch20s04.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch20s04.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s03.html" title="Implementation" /><link rel="next" href="bk01pt03ch20s05.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="bk01pt03ch20s03.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch20s05.html">Next</a></td></tr></table><hr /></div><div class="section" title="Single Thread Example"><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s03.html" title="Implementation" /><link rel="next" href="bk01pt03ch20s05.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="bk01pt03ch20s03.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch20s05.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>
+ Let's start by describing how the data on a freelist is laid out in memory.
+ This is the first two blocks in freelist for thread id 3 in bin 3 (8 bytes):
+ </p><pre class="programlisting">
+@@ -76,4 +75,4 @@
+ The decision to add deallocated blocks to the front of the freelist was made
+ after a set of performance measurements that showed that this is roughly 10%
+ faster than maintaining a set of "last pointers" as well.
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Multiple Thread Example</td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Multiple Thread Example</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch20s05.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch20s05.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s04.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="bk01pt03ch20s04.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" title="Multiple Thread Example"><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s04.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="bk01pt03ch20s04.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>
+ In the ST example we never used the thread_id variable present in each block.
+ Let's start by explaining the purpose of this in a MT application.
+ </p><p>
+@@ -104,4 +103,4 @@
+ a threads freelist mentioned above). The "formula" used can probably
+ be improved to further reduce the risk of blocks being "bounced back
+ and forth" between freelists.
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Single Thread Example </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 21. The bitmap_allocator</td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Single Thread Example </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 21. The bitmap_allocator</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch21s02.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch21s02.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Implementation"><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" title="Free List Store"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.free_list_store"></a>Free List Store</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ The Free List Store (referred to as FLS for the remaining part of this
+ document) is the Global memory pool that is shared by all instances of
+ the bitmapped allocator instantiated for any type. This maintains a
+@@ -48,7 +47,7 @@
+ else return false.</p></li></ol></div><p>
+ Currently, (3) is being used with a value of 36% Maximum wastage per
+ Super Block.
+- </p></div><div class="section" title="Super Block"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.super_block"></a>Super Block</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.super_block"></a>Super Block</h3></div></div></div><p>
+ A super block is the block of memory acquired from the FLS from
+ which the bitmap allocator carves out memory for single objects
+ and satisfies the user's requests. These super blocks come in
+@@ -63,7 +62,7 @@
+ The super block is contained in the FLS, and the FLS is responsible for
+ getting / returning Super Bocks to and from the OS using operator new
+ as defined by the C++ standard.
+- </p></div><div class="section" title="Super Block Data Layout"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.super_block_data"></a>Super Block Data Layout</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.super_block_data"></a>Super Block Data Layout</h3></div></div></div><p>
+ Each Super Block will be of some size that is a multiple of the
+ number of Bits Per Block. Typically, this value is chosen as
+ Bits_Per_Byte x sizeof(size_t). On an x86 system, this gives the
+@@ -76,7 +75,7 @@
+ </p><p>
+ Consider a block of size 64 ints. In memory, it would look like this:
+ (assume a 32-bit system where, size_t is a 32-bit entity).
+- </p><div class="table"><a id="idp17461952"></a><p class="title"><strong>Table 21.1. Bitmap Allocator Memory Map</strong></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -&gt; Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p>
++ </p><div class="table"><a id="idm269984747328"></a><p class="title"><strong>Table 21.1. Bitmap Allocator Memory Map</strong></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -&gt; Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p>
+ The first Column(268) represents the size of the Block in bytes as
+ seen by the Bitmap Allocator. Internally, a global free list is
+ used to keep track of the free blocks used and given back by the
+@@ -103,7 +102,7 @@
+ The 3rd 4x2 is size of the bitmap itself, which is the size of 32-bits
+ x 2,
+ which is 8-bytes, or 2 x sizeof(size_t).
+- </p></div><div class="section" title="Maximum Wasted Percentage"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.max_wasted"></a>Maximum Wasted Percentage</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.max_wasted"></a>Maximum Wasted Percentage</h3></div></div></div><p>
+ This has nothing to do with the algorithm per-se,
+ only with some vales that must be chosen correctly to ensure that the
+ allocator performs well in a real word scenario, and maintains a good
+@@ -128,7 +127,7 @@
+ </p><p>
+ Thus, knowing these values, and based on the sizeof(value_type), we may
+ create a function that returns the Max_Wastage_Percentage for us to use.
+- </p></div><div class="section" title="allocate"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.allocate"></a><code class="function">allocate</code></h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.allocate"></a><code class="function">allocate</code></h3></div></div></div><p>
+ The allocate function is specialized for single object allocation
+ ONLY. Thus, ONLY if n == 1, will the bitmap_allocator's
+ specialized algorithm be used. Otherwise, the request is satisfied
+@@ -148,7 +147,7 @@
+ </p></li><li class="listitem"><p>
+ Is there any block in whatever region of memory that we own
+ free? This is done by checking
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ The use count for each super block, and if that fails then
+ </p></li><li class="listitem"><p>
+ The individual bit-maps for each super block.
+@@ -163,7 +162,7 @@
+ This process involves Refilling the internal exponentially
+ growing memory pool. The said effect is achieved by calling
+ _S_refill_pool which does the following:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Gets more memory from the Global Free List of the Required
+ size.
+ </p></li><li class="listitem"><p>
+@@ -183,7 +182,7 @@
+ Thus, you can clearly see that the allocate function is nothing but a
+ combination of the next-fit and first-fit algorithm optimized ONLY for
+ single object allocations.
+-</p></div><div class="section" title="deallocate"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.deallocate"></a><code class="function">deallocate</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.deallocate"></a><code class="function">deallocate</code></h3></div></div></div><p>
+ The deallocate function again is specialized for single objects ONLY.
+ For all n belonging to &gt; 1, the operator delete is called without
+ further ado, and the deallocate function returns.
+@@ -214,7 +213,7 @@
+ the vector. While doing this, we also make sure that the basic
+ invariant is maintained by making sure that _S_last_request and
+ _S_last_dealloc_index point to valid locations within the vector.
+- </p></div><div class="section" title="Questions"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.questions"></a>Questions</h3></div></div></div><div class="section" title="1"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.question.1"></a>1</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.questions"></a>Questions</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.question.1"></a>1</h4></div></div></div><p>
+ Q1) The "Data Layout" section is
+ cryptic. I have no idea of what you are trying to say. Layout of what?
+ The free-list? Each bitmap? The Super Block?
+@@ -224,7 +223,7 @@
+ general formula for calculating the size of a super block is
+ 32 x sizeof(value_type) x 2^n, where n ranges from 0 to 32 for 32-bit
+ systems.
+- </p></div><div class="section" title="2"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.question.2"></a>2</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.question.2"></a>2</h4></div></div></div><p>
+ And since I just mentioned the
+ term `each bitmap', what in the world is meant by it? What does each
+ bitmap manage? How does it relate to the super block? Is the Super
+@@ -241,7 +240,7 @@
+ blocks' status. Each bit-map is made up of a number of size_t,
+ whose exact number for a super-block of a given size I have just
+ mentioned.
+- </p></div><div class="section" title="3"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.question.3"></a>3</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.question.3"></a>3</h4></div></div></div><p>
+ How do the allocate and deallocate functions work in regard to
+ bitmaps?
+ </p><p>
+@@ -270,7 +269,7 @@
+ </p><p>
+ The bit-map now looks like this:
+ 1111111111111111111111111111111111111111111111111111111111111110
+- </p></div></div><div class="section" title="Locality"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.locality"></a>Locality</h3></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.locality"></a>Locality</h3></div></div></div><p>
+ Another issue would be whether to keep the all bitmaps in a
+ separate area in memory, or to keep them near the actual blocks
+ that will be given out or allocated for the client. After some
+@@ -287,7 +286,7 @@
+ new_allocator's book keeping overhead is too much for small objects and
+ single object allocations, though it preserves the locality of blocks
+ very well when they are returned back to the allocator.
+- </p></div><div class="section" title="Overhead and Grow Policy"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.grow_policy"></a>Overhead and Grow Policy</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.grow_policy"></a>Overhead and Grow Policy</h3></div></div></div><p>
+ Expected overhead per block would be 1 bit in memory. Also, once
+ the address of the free list has been found, the cost for
+ allocation/deallocation would be negligible, and is supposed to be
+@@ -310,4 +309,4 @@
+ sizeof(size_t) x 8 which is the number of bits in an integer,
+ which can fit exactly in a CPU register. Hence, the term given is
+ exponential growth of the internal pool.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bitmap_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 21. The bitmap_allocator </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 22. Policy-Based Data Structures</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bitmap_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 21. The bitmap_allocator </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 22. Policy-Based Data Structures</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch23s02.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch23s02.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Deprecated"><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ The SGI hashing classes <code class="classname">hash_set</code> and
+ <code class="classname">hash_set</code> have been deprecated by the
+ unordered_set, unordered_multiset, unordered_map,
+@@ -56,4 +55,4 @@
+ associative containers defined in the ISO C++ 2011 standard in the
+ headers <code class="filename">&lt;unordered_map&gt;</code>
+ and <code class="filename">&lt;unordered_set&gt;</code>.
+- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 23. HP/SGI Extensions </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 24. Utilities</td></tr></table></div></body></html>
++ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 23. HP/SGI Extensions </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 24. Utilities</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch30s02.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch30s02.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch30s03.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="bk01pt03ch30s03.html">Next</a></td></tr></table><hr /></div><div class="section" title="Implementation"><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" title="Using Builtin Atomic Functions"><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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch30s03.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="bk01pt03ch30s03.html">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
+ implemented via compiler intrinsics (if the underlying host is
+ capable) or by library fallbacks.</p><p>Compiler intrinsics (builtins) are always preferred. However, as
+ the compiler builtins for atomics are not universally implemented,
+@@ -22,14 +21,14 @@
+ If builtins are possible for int-sized integral types,
+ <code class="code">ATOMIC_INT_LOCK_FREE</code> will be defined.
+ </p><p>For the following hosts, intrinsics are enabled by default.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>alpha</p></li><li class="listitem"><p>ia64</p></li><li class="listitem"><p>powerpc</p></li><li class="listitem"><p>s390</p></li></ul></div><p>For others, some form of <code class="code">-march</code> may work. On
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>alpha</p></li><li class="listitem"><p>ia64</p></li><li class="listitem"><p>powerpc</p></li><li class="listitem"><p>s390</p></li></ul></div><p>For others, some form of <code class="code">-march</code> may work. On
+ non-ancient x86 hardware, <code class="code">-march=native</code> usually does the
+ trick.</p><p> For hosts without compiler intrinsics, but with capable
+ hardware, hand-crafted assembly is selected. This is the case for the following hosts:
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>cris</p></li><li class="listitem"><p>hppa</p></li><li class="listitem"><p>i386</p></li><li class="listitem"><p>i486</p></li><li class="listitem"><p>m48k</p></li><li class="listitem"><p>mips</p></li><li class="listitem"><p>sparc</p></li></ul></div><p>And for the rest, a simulated atomic lock via pthreads.
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>cris</p></li><li class="listitem"><p>hppa</p></li><li class="listitem"><p>i386</p></li><li class="listitem"><p>i486</p></li><li class="listitem"><p>m48k</p></li><li class="listitem"><p>mips</p></li><li class="listitem"><p>sparc</p></li></ul></div><p>And for the rest, a simulated atomic lock via pthreads.
+ </p><p> Detailed information about compiler intrinsics for atomic operations can be found in the GCC <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html" target="_top"> documentation</a>.
+ </p><p> More details on the library fallbacks from the porting <a class="link" href="internals.html#internals.thread_safety" title="Thread Safety">section</a>.
+-</p></div><div class="section" title="Thread Abstraction"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.thread"></a>Thread Abstraction</h3></div></div></div><p>A thin layer above IEEE 1003.1 (i.e. pthreads) is used to abstract
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.thread"></a>Thread Abstraction</h3></div></div></div><p>A thin layer above IEEE 1003.1 (i.e. pthreads) is used to abstract
+ the thread interface for GCC. This layer is called "gthread," and is
+ comprised of one header file that wraps the host's default thread layer with
+ a POSIX-like interface.
+@@ -42,4 +41,4 @@
+ functions, and usage found in the usual &lt;pthread.h&gt; file,
+ including <code class="code">pthread_t</code>, <code class="code">pthread_once_t</code>, <code class="code">pthread_create</code>,
+ etc.
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch30s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 30. Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Use</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch30s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 30. Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Use</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch30s03.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch30s03.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch30s02.html" title="Implementation" /><link rel="next" href="bk01pt04.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="bk01pt03ch30s02.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt04.html">Next</a></td></tr></table><hr /></div><div class="section" title="Use"><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:
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch30s02.html" title="Implementation" /><link rel="next" href="bk01pt04.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="bk01pt03ch30s02.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt04.html">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:
+ </p><pre class="programlisting">
+ #include &lt;ext/concurrence.h&gt;
+
+@@ -33,4 +32,4 @@
+ and <code class="code">__concurrence_broadcast_error</code>.
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch30s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Part IV. 
+ Appendices
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03pr01.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03pr01.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Extensions
+
+-</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="idp16390720"></a></h1></div></div></div><p>
++</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="idm269985816416"></a></h1></div></div></div><p>
+ Here we will make an attempt at describing the non-Standard
+ extensions to the library. Some of these are from older versions of
+ standard library components, namely SGI's STL, and some of these are
+@@ -24,4 +23,4 @@
+ </p></li></ol></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part III. 
+ Extensions
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 16. Compile Time Checks</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 16. Compile Time Checks</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt04.html
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt04.html
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch30s03.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch30s03.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. 
+ Appendices
+-</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch30s03.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" title="Part IV.  Appendices"><div class="titlepage"><div><div><h1 class="title"><a id="appendix"></a>Part IV. 
++</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch30s03.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. 
+ Appendices
+-</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.
++</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.
+ Contributing
+
+ </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.
+@@ -40,4 +39,4 @@
+ </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</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="bk01pt03ch30s03.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="appendix_contributing.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Use </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix A. 
+ Contributing
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/bugs.html
++++ b/src/libstdc++-v3/doc/html/manual/bugs.html
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Bugs"><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" title="Implementation Bugs"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.impl"></a>Implementation Bugs</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ Information on known bugs, details on efforts to fix them, and
+ 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>,
+ with the category set to <code class="literal">libstdc++</code>.
+- </p></div><div class="section" title="Standard Bugs"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.iso"></a>Standard Bugs</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.iso"></a>Standard Bugs</h3></div></div></div><p>
+ Everybody's got issues. Even the C++ Standard Library.
+ </p><p>
+ The Library Working Group, or LWG, is the ISO subcommittee responsible
+@@ -35,7 +34,7 @@
+ <code class="constant">_GLIBCXX_RESOLVE_LIB_DEFECTS</code> for examples
+ of style. Note that we usually do not make changes to the
+ code until an issue has reached <a class="link" href="../ext/lwg-active.html#DR" target="_top">DR</a> status.
+- </p><div class="variablelist"><dl><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#5" target="_top">5</a>:
++ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#5" target="_top">5</a>:
+ <span class="emphasis"><em>string::compare specification questionable</em></span>
+ </span></dt><dd><p>This should be two overloaded functions rather than a single function.
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#17" target="_top">17</a>:
+@@ -349,4 +348,4 @@
+ <span class="emphasis"><em>More algorithms that throw away information</em></span>
+ </span></dt><dd><p>The traditional HP / SGI return type and value is blessed
+ by the resolution of the DR.
+- </p></dd></dl></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="license.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="status.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">License </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 2. Setup</td></tr></table></div></body></html>
++ </p></dd></dl></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="license.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="status.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">License </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 2. Setup</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/concurrency.html
++++ b/src/libstdc++-v3/doc/html/manual/concurrency.html
+@@ -1,16 +1,15 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; , &#10; mutex&#10; , &#10; thread&#10; , &#10; future&#10; , &#10; condition_variable&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; , &#10; mutex&#10; , &#10; thread&#10; , &#10; future&#10; , &#10; condition_variable&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
+ Concurrency
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="atomics.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="extensions.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 15.  Concurrency"><div class="titlepage"><div><div><h2 class="title"><a id="std.concurrency"></a>Chapter 15. 
++ </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. 
+ Concurrency
+- <a id="idp16368576" class="indexterm"></a>
+-</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>
++ <a id="idm269985837952" class="indexterm"></a>
++</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>
+ Facilities for concurrent operation, and control thereof.
+-</p><div class="section" title="API Reference"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.concurrency.api"></a>API Reference</h2></div></div></div><p>
++</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>
+ All items are declared in one of four standard header files.
+ </p><p>
+ In header <code class="filename">mutex</code>, class
+@@ -39,4 +38,4 @@
+  </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Part III. 
+ Extensions
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/configure.html
++++ b/src/libstdc++-v3/doc/html/manual/configure.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; configure&#10; , &#10; options&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Configure"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.configure"></a>Configure</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; configure&#10; , &#10; options&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ When configuring libstdc++, you'll have to configure the entire
+ <span class="emphasis"><em>gccsrcdir</em></span> directory. Consider using the
+ toplevel gcc configuration option
+@@ -18,7 +17,7 @@
+ </p><p>The canonical way to find out the configure options that are
+ available for a given set of libstdc++ sources is to go to the
+ source directory and then type:<span class="command"><strong>./configure --help</strong></span>.
+-</p><div class="variablelist"><dl><dt><span class="term"><code class="code">--enable-multilib</code>[default]</span></dt><dd><p>This is part of the generic multilib support for building cross
++</p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">--enable-multilib</code>[default]</span></dt><dd><p>This is part of the generic multilib support for building cross
+ compilers. As such, targets like "powerpc-elf" will have
+ libstdc++ built many different ways: "-msoft-float"
+ and not, etc. A different libstdc++ will be built for each of
+@@ -215,4 +214,4 @@
+ <span class="emphasis"><em>freestanding</em></span> environment, in which only a
+ minimal set of headers are provided. This option builds such an
+ environment.
+- </p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="setup.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="setup.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="make.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. Setup </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Make</td></tr></table></div></body></html>
++ </p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="setup.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="setup.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="make.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. Setup </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Make</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/containers.html
++++ b/src/libstdc++-v3/doc/html/manual/containers.html
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
+ Containers
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 9.  Containers"><div class="titlepage"><div><div><h2 class="title"><a id="std.containers"></a>Chapter 9. 
++ </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. 
+ Containers
+- <a id="idp16014032" class="indexterm"></a>
+-</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="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" title="Sequences"><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" title="list"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.list"></a>list</h3></div></div></div><div class="section" title="list::size() is O(n)"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.list.size"></a>list::size() is O(n)</h4></div></div></div><p>
++ <a id="idm269986189248" class="indexterm"></a>
++</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="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>
+ Yes it is, and that's okay. This is a decision that we preserved
+ when we imported SGI's STL implementation. The following is
+ quoted from <a class="link" href="http://www.sgi.com/tech/stl/FAQ.html" target="_top">their FAQ</a>:
+@@ -42,8 +41,8 @@
+ </p><pre class="programlisting">
+ if (L.empty())
+ ...
+- </pre></blockquote></div></div></div><div class="section" title="vector"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.vector"></a>vector</h3></div></div></div><p>
+- </p><div class="section" title="Space Overhead Management"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.vector.management"></a>Space Overhead Management</h4></div></div></div><p>
++ </pre></blockquote></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.vector"></a>vector</h3></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.vector.management"></a>Space Overhead Management</h4></div></div></div><p>
+ In <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-04/msg00105.html" target="_top">this
+ message to the list</a>, Daniel Kostecky announced work on an
+ alternate form of <code class="code">std::vector</code> that would support
+@@ -52,4 +51,4 @@
+ </p><p>
+ The first two alpha releases were announced <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00048.html" target="_top">here</a>
+ and <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00111.html" target="_top">here</a>.
+- </p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Facets </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Associative</td></tr></table></div></body></html>
++ </p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Facets </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Associative</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/containers_and_c.html
++++ b/src/libstdc++-v3/doc/html/manual/containers_and_c.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="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="associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="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="associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
+ Containers
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="iterators.html">Next</a></td></tr></table><hr /></div><div class="section" title="Interacting with C"><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" title="Containers vs. Arrays"><div class="titlepage"><div><div><h3 class="title"><a id="containers.c.vs_array"></a>Containers vs. Arrays</h3></div></div></div><p>
++</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>
+ You're writing some code and can't decide whether to use builtin
+ arrays or some kind of container. There are compelling reasons
+ to use one of the container classes, but you're afraid that
+@@ -87,4 +86,4 @@
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="associative.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="iterators.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Associative </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 10. 
+ Iterators
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/debug.html
++++ b/src/libstdc++-v3/doc/html/manual/debug.html
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt02.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="bk01pt02.html">Next</a></td></tr></table><hr /></div><div class="section" title="Debugging Support"><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt02.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="bk01pt02.html">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>
+ There are numerous things that can be done to improve the ease with
+ which C++ binaries are debugged when using the GNU tool chain. Here
+ are some of them.
+-</p><div class="section" title="Using g++"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compiler"></a>Using <span class="command"><strong>g++</strong></span></h3></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compiler"></a>Using <span class="command"><strong>g++</strong></span></h3></div></div></div><p>
+ Compiler flags determine how debug information is transmitted
+ between compilation and debug or analysis tools.
+ </p><p>
+@@ -31,7 +30,7 @@
+ Many other options are available: please see <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging%20Options" target="_top">"Options
+ for Debugging Your Program"</a> in Using the GNU Compiler
+ Collection (GCC) for a complete list.
+-</p></div><div class="section" title="Debug Versions of Library Binary Files"><div class="titlepage"><div><div><h3 class="title"><a id="debug.req"></a>Debug Versions of Library Binary Files</h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.req"></a>Debug Versions of Library Binary Files</h3></div></div></div><p>
+ If you would like debug symbols in libstdc++, there are two ways to
+ build libstdc++ with debug flags. The first is to run make from the
+ toplevel in a freshly-configured tree with
+@@ -52,7 +51,7 @@
+ </pre><p>
+ This quick and dirty approach is often sufficient for quick
+ debugging tasks, when you cannot or don't want to recompile your
+- application to use the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>.</p></div><div class="section" title="Memory Leak Hunting"><div class="titlepage"><div><div><h3 class="title"><a id="debug.memory"></a>Memory Leak Hunting</h3></div></div></div><p>
++ application to use the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.memory"></a>Memory Leak Hunting</h3></div></div></div><p>
+ There are various third party memory tracing and debug utilities
+ that can be used to provide detailed memory allocation information
+ about C++ code. An exhaustive list of tools is not going to be
+@@ -121,7 +120,7 @@
+ up the runtime environment, library, and test file, might be:
+ </p><pre class="programlisting">
+ valgrind -v --num-callers=20 --leak-check=yes --leak-resolution=high --show-reachable=yes a.out
+-</pre></div><div class="section" title="Data Race Hunting"><div class="titlepage"><div><div><h3 class="title"><a id="debug.races"></a>Data Race Hunting</h3></div></div></div><p>
++</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.races"></a>Data Race Hunting</h3></div></div></div><p>
+ All synchronization primitives used in the library internals need to be
+ understood by race detectors so that they do not produce false reports.
+ </p><p>
+@@ -161,7 +160,7 @@
+ DRD</a>,
+ <a class="link" href="http://valgrind.org/docs/manual/hg-manual.html" target="_top">
+ Helgrind</a>, and
+- <a class="link" href="http://code.google.com/p/data-race-test" target="_top">
++ <a class="link" href="http://code.google.com/p/data-race-test/" target="_top">
+ ThreadSanitizer</a>.
+ </p><p>
+ With DRD, Helgrind and ThreadSanitizer you will need to define
+@@ -171,7 +170,7 @@
+ #define _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) ANNOTATE_HAPPENS_AFTER(A)
+ </pre><p>
+ Refer to the documentation of each particular tool for details.
+-</p></div><div class="section" title="Using gdb"><div class="titlepage"><div><div><h3 class="title"><a id="debug.gdb"></a>Using <span class="command"><strong>gdb</strong></span></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.gdb"></a>Using <span class="command"><strong>gdb</strong></span></h3></div></div></div><p>
+ </p><p>
+ Many options are available for GDB itself: please see <a class="link" href="http://sources.redhat.com/gdb/current/onlinedocs/gdb/" target="_top">
+ "GDB features for C++" </a> in the GDB documentation. Also
+@@ -224,18 +223,18 @@
+ on-line versions of the GDB user manual in GDB's homepage, at
+ <a class="link" href="http://sourceware.org/gdb/" target="_top"> "GDB: The GNU Project
+ Debugger" </a>.
+-</p></div><div class="section" title="Tracking uncaught exceptions"><div class="titlepage"><div><div><h3 class="title"><a id="debug.exceptions"></a>Tracking uncaught exceptions</h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.exceptions"></a>Tracking uncaught exceptions</h3></div></div></div><p>
+ The <a class="link" href="termination.html#support.termination.verbose" title="Verbose Terminate Handler">verbose
+ termination handler</a> gives information about uncaught
+ exceptions which are killing the program. It is described in the
+ linked-to page.
+-</p></div><div class="section" title="Debug Mode"><div class="titlepage"><div><div><h3 class="title"><a id="debug.debug_mode"></a>Debug Mode</h3></div></div></div><p> The <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">Debug Mode</a>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.debug_mode"></a>Debug Mode</h3></div></div></div><p> The <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">Debug Mode</a>
+ has compile and run-time checks for many containers.
+- </p></div><div class="section" title="Compile Time Checking"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compile_time_checks"></a>Compile Time Checking</h3></div></div></div><p> The <a class="link" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks">Compile-Time
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compile_time_checks"></a>Compile Time Checking</h3></div></div></div><p> The <a class="link" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks">Compile-Time
+ Checks</a> Extension has compile-time checks for many algorithms.
+- </p></div><div class="section" title="Profile-based Performance Analysis"><div class="titlepage"><div><div><h3 class="title"><a id="debug.profile_mode"></a>Profile-based Performance Analysis</h3></div></div></div><p> The <a class="link" href="profile_mode.html" title="Chapter 19. Profile Mode">Profile-based
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.profile_mode"></a>Profile-based Performance Analysis</h3></div></div></div><p> The <a class="link" href="profile_mode.html" title="Chapter 19. Profile Mode">Profile-based
+ Performance Analysis</a> Extension has performance checks for many
+ algorithms.
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Exceptions </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Part II. 
+ Standard Contents
+- </td></tr></table></div></body></html>
++ </td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/debug_mode.html
++++ b/src/libstdc++-v3/doc/html/manual/debug_mode.html
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s02.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. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch17s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 17. Debug Mode"><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="bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.link">Link- and run-time coexistence of release- and
+- debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></div><div class="section" title="Intro"><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>
++</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch17s02.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="bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.link">Link- and run-time coexistence of release- and
++ debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.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>
+ By default, libstdc++ is built with efficiency in mind, and
+ therefore performs little or no error checking that is not
+ required by the C++ standard. This means that programs that
+@@ -21,7 +20,7 @@
+ The libstdc++ debug mode performs checking for many areas of the
+ C++ standard, but the focus is on checking interactions among
+ standard iterators, containers, and algorithms, including:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Safe iterators</em></span>: Iterators keep track of the
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Safe iterators</em></span>: Iterators keep track of the
+ container whose elements they reference, so errors such as
+ incrementing a past-the-end iterator or dereferencing an iterator
+ that points to a container that has been destructed are diagnosed
+@@ -35,4 +34,4 @@
+ the same predicate that was passed
+ to <code class="code">set_intersection</code>; the libstdc++ debug mode will
+ detect an error if the sequence is not sorted or was sorted by a
+- different predicate.</p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch17s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 16. Compile Time Checks </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Semantics</td></tr></table></div></body></html>
++ different predicate.</p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch17s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 16. Compile Time Checks </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Semantics</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/diagnostics.html
++++ b/src/libstdc++-v3/doc/html/manual/diagnostics.html
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="termination.html" title="Termination" /><link rel="next" href="bk01pt02ch05s02.html" title="Concept Checking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="termination.html" title="Termination" /><link rel="next" href="bk01pt02ch05s02.html" title="Concept Checking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. 
+ Diagnostics
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="termination.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="bk01pt02ch05s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 5.  Diagnostics"><div class="titlepage"><div><div><h2 class="title"><a id="std.diagnostics"></a>Chapter 5. 
++ </th><td width="20%" align="right"> <a accesskey="n" href="bk01pt02ch05s02.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. 
+ Diagnostics
+- <a id="idp13808352" class="indexterm"></a>
+-</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="bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></div><div class="section" title="Exceptions"><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" title="API Reference"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.api"></a>API Reference</h3></div></div></div><p>
++ <a id="idm269988384144" class="indexterm"></a>
++</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="bk01pt02ch05s02.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>
+ All exception objects are defined in one of the standard header
+ files: <code class="filename">exception</code>,
+ <code class="filename">stdexcept</code>, <code class="filename">new</code>, and
+@@ -23,7 +22,7 @@
+ found in the source documentation.
+ </p><p>
+ Full API details.
+- </p></div><div class="section" title="Adding Data to exception"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.data"></a>Adding Data to <code class="classname">exception</code></h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.data"></a>Adding Data to <code class="classname">exception</code></h3></div></div></div><p>
+ The standard exception classes carry with them a single string as
+ data (usually describing what went wrong or where the 'throw' took
+ place). It's good to remember that you can add your own data to
+@@ -40,4 +39,4 @@
+ int e;
+ DBID id; // some user-defined type
+ };
+- </pre></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="termination.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt02ch05s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Termination </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Concept Checking</td></tr></table></div></body></html>
++ </pre></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="termination.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt02ch05s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Termination </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Concept Checking</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/documentation_hacking.html
++++ b/src/libstdc++-v3/doc/html/manual/documentation_hacking.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="ISO C++, documentation, style, docbook, doxygen" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Porting and Maintenance
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr></table><hr /></div><div class="section" title="Writing and Generating Documentation"><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" title="Introduction"><div class="titlepage"><div><div><h3 class="title"><a id="doc.intro"></a>Introduction</h3></div></div></div><p>
++</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>
+ Documentation for the GNU C++ Library is created from three
+ independent sources: a manual, a FAQ, and an API reference.
+ </p><p>
+@@ -27,7 +26,7 @@
+ as per
+ <a class="link" href="http://www.gnu.org/prep/standards/standards.html#Documentation" target="_top">
+ GNU Manuals</a>.
+- </p></div><div class="section" title="Generating Documentation"><div class="titlepage"><div><div><h3 class="title"><a id="doc.generation"></a>Generating Documentation</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.generation"></a>Generating Documentation</h3></div></div></div><p>
+ Certain Makefile rules are required by the GNU Coding
+ Standards. These standard rules generate HTML, PDF, XML, or man
+ files. For each of the generative rules, there is an additional
+@@ -53,7 +52,7 @@
+ <code class="literal">BUILD_PDF</code>, and <code class="literal">BUILD_EPUB</code>.
+ </p><p>
+ Supported Makefile rules:
+- </p><div class="variablelist"><dl><dt><span class="term">
++ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">
+ <span class="emphasis"><em>make html</em></span>
+ , </span><span class="term">
+ <span class="emphasis"><em>make install-html</em></span>
+@@ -113,7 +112,7 @@
+ supported, and are always aliased to dummy rules. These
+ unsupported formats are: <span class="emphasis"><em>info</em></span>,
+ <span class="emphasis"><em>ps</em></span>, and <span class="emphasis"><em>dvi</em></span>.
+- </p></div><div class="section" title="Doxygen"><div class="titlepage"><div><div><h3 class="title"><a id="doc.doxygen"></a>Doxygen</h3></div></div></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idp22126320"></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>
++ </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="idm269980088096"></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>
+ Prerequisite tools are Bash 2.0 or later,
+ <a class="link" href="http://www.doxygen.org/" target="_top">Doxygen</a>, and
+ the <a class="link" href="http://www.gnu.org/software/coreutils/" target="_top">GNU
+@@ -135,7 +134,7 @@
+ capacity. Specifically, the <code class="literal">pool_size</code>
+ variable in the configuration file <code class="filename">texmf.cnf</code> may
+ need to be increased by a minimum factor of two.
+- </p></div><div class="section" title="Generating the Doxygen Files"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.rules"></a>Generating the Doxygen Files</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.rules"></a>Generating the Doxygen Files</h4></div></div></div><p>
+ The following Makefile rules run Doxygen to generate HTML
+ docs, XML docs, XML docs as a single file, PDF docs, and the
+ man pages. These rules are not conditional! If the required
+@@ -167,7 +166,7 @@
+ If you wish to tweak the Doxygen settings, do so by editing
+ <code class="filename">doc/doxygen/user.cfg.in</code>. Notes to fellow
+ library hackers are written in triple-# comments.
+- </p></div><div class="section" title="Debugging Generation"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.debug"></a>Debugging Generation</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.debug"></a>Debugging Generation</h4></div></div></div><p>
+ Sometimes, mis-configuration of the pre-requisite tools can
+ lead to errors when attempting to build the
+ documentation. Here are some of the obvious errors, and ways
+@@ -182,7 +181,7 @@
+ contents of the following build directory:
+ <code class="filename">build/target/libstdc++-v3/doc/doxygen/latex</code>.
+ Pay attention to three files enclosed within, annotated as follows.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <span class="emphasis"><em>refman.tex</em></span>
+ </p><p>
+ The actual latex file, or partial latex file. This is generated
+@@ -211,7 +210,7 @@
+ directories of header files, until the offending header is
+ identified. Then, read the latex log files to try and find
+ surround text, and look for that in the offending header.
+- </p></div><div class="section" title="Markup"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.markup"></a>Markup</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.markup"></a>Markup</h4></div></div></div><p>
+ In general, libstdc++ files should be formatted according to
+ the rules found in the
+ <a class="link" href="source_code_style.html" title="Coding Style">Coding Standard</a>. Before
+@@ -233,9 +232,8 @@
+ member functions.
+ </p><p>
+ Some commentary to accompany
+- the first list in the <a class="link" href="http://www.stack.nl/~dimitri/doxygen/docblocks.html" target="_top">Special
+- Documentation Blocks</a> section of
+- the Doxygen manual:
++ the first list in the <a class="link" href="http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html" target="_top">Special
++ Documentation Blocks</a> section of the Doxygen manual:
+ </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>
+ ...not the Qt style. The intermediate *'s are preferred.
+ </p></li><li class="listitem"><p>
+@@ -311,7 +309,7 @@
+ writing Doxygen comments. Single and double quotes, and
+ separators in filenames are two common trouble spots. When in
+ doubt, consult the following table.
+- </p><div class="table"><a id="idp22201984"></a><p class="title"><strong>Table B.2. HTML to Doxygen Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Doxygen Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Doxygen</th></tr></thead><tbody><tr><td align="left">\</td><td align="left">\\</td></tr><tr><td align="left">"</td><td align="left">\"</td></tr><tr><td align="left">'</td><td align="left">\'</td></tr><tr><td align="left">&lt;i&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;b&gt;</td><td align="left">@b word</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">@c word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;em&gt;two words or more&lt;/em&gt;</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="section" title="Docbook"><div class="titlepage"><div><div><h3 class="title"><a id="doc.docbook"></a>Docbook</h3></div></div></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idp22221360"></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>
++ </p><div class="table"><a id="idm269980012416"></a><p class="title"><strong>Table B.2. HTML to Doxygen Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Doxygen Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Doxygen</th></tr></thead><tbody><tr><td align="left">\</td><td align="left">\\</td></tr><tr><td align="left">"</td><td align="left">\"</td></tr><tr><td align="left">'</td><td align="left">\'</td></tr><tr><td align="left">&lt;i&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;b&gt;</td><td align="left">@b word</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">@c word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;em&gt;two words or more&lt;/em&gt;</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.docbook"></a>Docbook</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idm269979992976"></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>
+ Editing the DocBook sources requires an XML editor. Many
+ exist: some notable options
+ include <span class="command"><strong>emacs</strong></span>, <span class="application">Kate</span>,
+@@ -358,7 +356,7 @@
+ XML to Texinfo is required. The default choice is <a class="link" href="http://docbook2x.sourceforge.net/" target="_top">docbook2X</a>.
+ </p><p>
+ For epub output, the <a class="link" href="http://sourceforge.net/projects/docbook/files/epub3/" target="_top">stylesheets</a> for EPUB3 are required. These stylesheets are still in development. To validate the created file, <a class="link" href="https://code.google.com/p/epubcheck/" target="_top">epubcheck</a> is necessary.
+- </p></div><div class="section" title="Generating the DocBook Files"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.rules"></a>Generating the DocBook Files</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.rules"></a>Generating the DocBook Files</h4></div></div></div><p>
+ The following Makefile rules generate (in order): an HTML
+ version of all the DocBook documentation, a PDF version of the
+ same, and a single XML document. These rules are not
+@@ -383,7 +381,7 @@
+ <strong class="userinput"><code>
+ make <code class="literal">XSL_STYLE_DIR="/usr/share/xml/docbook/stylesheet/nwalsh"</code> doc-html-docbook
+ </code></strong>
+- </pre></div><div class="section" title="Debugging Generation"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.debug"></a>Debugging Generation</h4></div></div></div><p>
++ </pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.debug"></a>Debugging Generation</h4></div></div></div><p>
+ Sometimes, mis-configuration of the pre-requisite tools can
+ lead to errors when attempting to build the
+ documentation. Here are some of the obvious errors, and ways
+@@ -398,7 +396,7 @@
+ contents of the following build directory:
+ <code class="filename">build/target/libstdc++-v3/doc/docbook/latex</code>.
+ Pay attention to three files enclosed within, annotated as follows.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <span class="emphasis"><em>spine.tex</em></span>
+ </p><p>
+ The actual latex file, or partial latex file. This is generated
+@@ -435,7 +433,7 @@
+ commenting out each of the largest parts of the
+ <code class="filename">spine.xml</code> file, section by section,
+ until the offending section is identified.
+- </p></div><div class="section" title="Editing and Validation"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.validation"></a>Editing and Validation</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.validation"></a>Editing and Validation</h4></div></div></div><p>
+ After editing the xml sources, please make sure that the XML
+ documentation and markup is still valid. This can be
+ done easily, with the following validation rule:
+@@ -455,7 +453,7 @@
+ validation on the entire manual fails.
+ </p><p>
+ All Docbook xml sources should always validate. No excuses!
+- </p></div><div class="section" title="File Organization and Basics"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.examples"></a>File Organization and Basics</h4></div></div></div><div class="literallayout"><p><br />
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.examples"></a>File Organization and Basics</h4></div></div></div><div class="literallayout"><p><br />
+       <span class="emphasis"><em>Which files are important</em></span><br />
+ <br />
+       All Docbook files are in the directory<br />
+@@ -515,17 +513,17 @@
+       &lt;/book&gt;<br />
+ <br />
+       &lt;/set&gt;<br />
+-    </p></div></div><div class="section" title="Markup By Example"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.markup"></a>Markup By Example</h4></div></div></div><p>
++    </p></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.markup"></a>Markup By Example</h4></div></div></div><p>
+ Complete details on Docbook markup can be found in the DocBook
+ Element Reference,
+ <a class="link" href="http://www.docbook.org/tdg/en/html/part2.html" target="_top">online</a>.
+ An incomplete reference for HTML to Docbook conversion is
+ detailed in the table below.
+- </p><div class="table"><a id="idp22298992"></a><p class="title"><strong>Table B.4. HTML to Docbook XML Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Docbook XML Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Docbook</th></tr></thead><tbody><tr><td align="left">&lt;p&gt;</td><td align="left">&lt;para&gt;</td></tr><tr><td align="left">&lt;pre&gt;</td><td align="left">&lt;computeroutput&gt;, &lt;programlisting&gt;,
++ </p><div class="table"><a id="idm269979915344"></a><p class="title"><strong>Table B.4. HTML to Docbook XML Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Docbook XML Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Docbook</th></tr></thead><tbody><tr><td align="left">&lt;p&gt;</td><td align="left">&lt;para&gt;</td></tr><tr><td align="left">&lt;pre&gt;</td><td align="left">&lt;computeroutput&gt;, &lt;programlisting&gt;,
+ &lt;literallayout&gt;</td></tr><tr><td align="left">&lt;ul&gt;</td><td align="left">&lt;itemizedlist&gt;</td></tr><tr><td align="left">&lt;ol&gt;</td><td align="left">&lt;orderedlist&gt;</td></tr><tr><td align="left">&lt;il&gt;</td><td align="left">&lt;listitem&gt;</td></tr><tr><td align="left">&lt;dl&gt;</td><td align="left">&lt;variablelist&gt;</td></tr><tr><td align="left">&lt;dt&gt;</td><td align="left">&lt;term&gt;</td></tr><tr><td align="left">&lt;dd&gt;</td><td align="left">&lt;listitem&gt;</td></tr><tr><td align="left">&lt;a href=""&gt;</td><td align="left">&lt;ulink url=""&gt;</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">&lt;literal&gt;, &lt;programlisting&gt;</td></tr><tr><td align="left">&lt;strong&gt;</td><td align="left">&lt;emphasis&gt;</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;emphasis&gt;</td></tr><tr><td align="left">"</td><td align="left">&lt;quote&gt;</td></tr></tbody></table></div></div><br class="table-break" /><p>
+ And examples of detailed markup for which there are no real HTML
+ equivalents are listed in the table below.
+-</p><div class="table"><a id="idp22323136"></a><p class="title"><strong>Table B.5. Docbook XML Element Use</strong></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left">&lt;structname&gt;</td><td align="left">&lt;structname&gt;char_traits&lt;/structname&gt;</td></tr><tr><td align="left">&lt;classname&gt;</td><td align="left">&lt;classname&gt;string&lt;/classname&gt;</td></tr><tr><td align="left">&lt;function&gt;</td><td align="left">
++</p><div class="table"><a id="idm269979891200"></a><p class="title"><strong>Table B.5. Docbook XML Element Use</strong></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left">&lt;structname&gt;</td><td align="left">&lt;structname&gt;char_traits&lt;/structname&gt;</td></tr><tr><td align="left">&lt;classname&gt;</td><td align="left">&lt;classname&gt;string&lt;/classname&gt;</td></tr><tr><td align="left">&lt;function&gt;</td><td align="left">
+ <p>&lt;function&gt;clear()&lt;/function&gt;</p>
+ <p>&lt;function&gt;fs.clear()&lt;/function&gt;</p>
+ </td></tr><tr><td align="left">&lt;type&gt;</td><td align="left">&lt;type&gt;long long&lt;/type&gt;</td></tr><tr><td align="left">&lt;varname&gt;</td><td align="left">&lt;varname&gt;fs&lt;/varname&gt;</td></tr><tr><td align="left">&lt;literal&gt;</td><td align="left">
+@@ -541,4 +539,4 @@
+ </td></tr></tbody></table></div></div><br class="table-break" /></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix B. 
+ Porting and Maintenance
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Porting to New Hardware or Operating Systems</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Porting to New Hardware or Operating Systems</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/dynamic_memory.html
++++ b/src/libstdc++-v3/doc/html/manual/dynamic_memory.html
+@@ -1,13 +1,12 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Support
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr></table><hr /></div><div class="section" title="Dynamic Memory"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.memory"></a>Dynamic Memory</h2></div></div></div><p>
++</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>
+ There are six flavors each of <code class="function">new</code> and
+ <code class="function">delete</code>, so make certain that you're using the right
+ ones. Here are quickie descriptions of <code class="function">new</code>:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ single object form, throwing a
+ <code class="classname">bad_alloc</code> on errors; this is what most
+ people are used to using
+@@ -69,4 +68,4 @@
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="support.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="support.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 4. 
+ Support
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Termination</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Termination</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/ext_algorithms.html
++++ b/src/libstdc++-v3/doc/html/manual/ext_algorithms.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 25. Algorithms"><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
++</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
+ and count_if. The standard versions return their results. The
+ additional signatures return void, but take a final parameter by
+ reference to which they assign their results, e.g.,
+@@ -15,9 +14,9 @@
+ copy_n (_InputIter first, _Size count, _OutputIter result);</pre><p>which copies the first 'count' elements at 'first' into 'result'.
+ </p><p>25.3 (sorting 'n' heaps 'n' stuff) is extended with some helper
+ predicates. Look in the doxygen-generated pages for notes on these.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">is_heap</code> tests whether or not a range is a heap.</p></li><li class="listitem"><p><code class="code">is_sorted</code> tests whether or not a range is sorted in
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="code">is_heap</code> tests whether or not a range is a heap.</p></li><li class="listitem"><p><code class="code">is_sorted</code> tests whether or not a range is sorted in
+ nondescending order.</p></li></ul></div><p>25.3.8 (lexicographical_compare) is extended with
+ </p><pre class="programlisting">
+ lexicographical_compare_3way(_InputIter1 first1, _InputIter1 last1,
+ _InputIter2 first2, _InputIter2 last2)</pre><p>which does... what?
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 24. Utilities </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 26. Numerics</td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 24. Utilities </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 26. Numerics</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/ext_compile_checks.html
++++ b/src/libstdc++-v3/doc/html/manual/ext_compile_checks.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03pr01.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="bk01pt03pr01.html">Prev</a> </td><th width="60%" align="center">Part III. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03pr01.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="bk01pt03pr01.html">Prev</a> </td><th width="60%" align="center">Part III. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 16. Compile Time Checks"><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>
++</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>
+ Also known as concept checking.
+ </p><p>In 1999, SGI added <span class="emphasis"><em>concept checkers</em></span> to their implementation
+ of the STL: code which checked the template parameters of
+@@ -37,4 +36,4 @@
+ support for template parameter constraints based on concepts in the core
+ language. This will obviate the need for the library-simulated concept
+ checking described above.
+- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03pr01.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 17. Debug Mode</td></tr></table></div></body></html>
++ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03pr01.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 17. Debug Mode</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/ext_concurrency.html
++++ b/src/libstdc++-v3/doc/html/manual/ext_concurrency.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch30s02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch30s02.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. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch30s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 30. Concurrency"><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="bk01pt03ch30s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch30s03.html">Use</a></span></dt></dl></div><div class="section" title="Design"><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" title="Interface to Locks and Mutexes"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"></a>Interface to Locks and Mutexes</h3></div></div></div><p>The file <code class="filename">&lt;ext/concurrence.h&gt;</code>
++</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch30s02.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="bk01pt03ch30s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch30s03.html">Use</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.design"></a>Design</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"></a>Interface to Locks and Mutexes</h3></div></div></div><p>The file <code class="filename">&lt;ext/concurrence.h&gt;</code>
+ contains all the higher-level
+ constructs for playing with threads. In contrast to the atomics layer,
+ the concurrence layer consists largely of types. All types are defined within <code class="code">namespace __gnu_cxx</code>.
+@@ -17,7 +16,7 @@
+ available locking
+ policies: <code class="code">_S_single</code>, <code class="code">_S_mutex</code>,
+ and <code class="code">_S_atomic</code>.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">_S_single</code></p><p>Indicates single-threaded code that does not need locking.
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="code">_S_single</code></p><p>Indicates single-threaded code that does not need locking.
+ </p></li><li class="listitem"><p><code class="code">_S_mutex</code></p><p>Indicates multi-threaded code using thread-layer abstractions.
+ </p></li><li class="listitem"><p><code class="code">_S_atomic</code></p><p>Indicates multi-threaded code using atomic operations.
+ </p></li></ul></div><p>The compile-time constant <code class="code">__default_lock_policy</code> is set
+@@ -33,7 +32,7 @@
+ These types have been superseded in the ISO C++ 2011 standard by the
+ mutex and lock types defined in the header
+ <code class="filename">&lt;mutex&gt;</code>.
+-</p></div><div class="section" title="Interface to Atomic Functions"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.atomics"></a>Interface to Atomic Functions</h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.atomics"></a>Interface to Atomic Functions</h3></div></div></div><p>
+ Two functions and one type form the base of atomic support.
+ </p><p>The type <code class="code">_Atomic_word</code> is a signed integral type
+ supporting atomic operations.
+@@ -47,7 +46,7 @@
+ __atomic_add_dispatch(volatile _Atomic_word*, int);
+ </pre><p>Both of these functions are declared in the header file
+ &lt;ext/atomicity.h&gt;, and are in <code class="code">namespace __gnu_cxx</code>.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <code class="code">
+ __exchange_and_add_dispatch
+ </code>
+@@ -66,7 +65,7 @@
+ </code>
+ </p><p>
+ Calls through to either of:
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">__exchange_and_add</code>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="code">__exchange_and_add</code>
+ </p><p>Multi-thread version. Inlined if compiler-generated builtin atomics
+ can be used, otherwise resolved at link time to a non-builtin code
+ sequence.
+@@ -91,4 +90,4 @@
+ </p><p>
+ Which expand to the appropriate write and read barrier required by the
+ host hardware and operating system.
+-</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch30s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 29. Demangling </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
++</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch30s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 29. Demangling </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/ext_containers.html
++++ b/src/libstdc++-v3/doc/html/manual/ext_containers.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch23s02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch23s02.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. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch23s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 23. HP/SGI Extensions"><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="bk01pt03ch23s02.html">Deprecated</a></span></dt></dl></div><div class="section" title="Backwards Compatibility"><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
++</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch23s02.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="bk01pt03ch23s02.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
+ been made with containers. Those dealing with older SGI-style
+ allocators are dealt with elsewhere. The remaining ones all deal
+ with bits:
+@@ -39,4 +38,4 @@
+ </p><pre class="programlisting">
+ size_t _Find_first() const;
+ size_t _Find_next (size_t prev) const;</pre><p>The same caveat given for the _Unchecked_* functions applies here also.
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures_ack.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch23s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Acknowledgments </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Deprecated</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures_ack.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch23s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Acknowledgments </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Deprecated</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/ext_demangling.html
++++ b/src/libstdc++-v3/doc/html/manual/ext_demangling.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 29. Demangling"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.demangle"></a>Chapter 29. Demangling</h2></div></div></div><p>
++</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>
+ Transforming C++ ABI identifiers (like RTTI symbols) into the
+ original C++ source identifiers is called
+ <span class="quote">“<span class="quote">demangling.</span>”</span>
+@@ -71,4 +70,4 @@
+ be writing C++ in order to demangle C++. (That also means we have to
+ use crummy memory management facilities, so don't forget to free()
+ the returned char array.)
+- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 28. Input and Output </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 30. Concurrency</td></tr></table></div></body></html>
++ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 28. Input and Output </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 30. Concurrency</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/ext_io.html
++++ b/src/libstdc++-v3/doc/html/manual/ext_io.html
+@@ -1,25 +1,24 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 28. Input and Output"><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>
++</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>
+ Extensions allowing <code class="code">filebuf</code>s to be constructed from
+ "C" types like FILE*s and file descriptors.
+- </p><div class="section" title="Derived filebufs"><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
++ </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
+ <code class="code">std::filebuf</code>s from C stdio types such as
+ <code class="code">FILE*</code>s and POSIX file descriptors.
+ Today the recommended way to use stdio types with libstdc++
+ IOStreams is via the <code class="code">stdio_filebuf</code> class (see below),
+ but earlier releases provided slightly different mechanisms.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>3.0.x <code class="code">filebuf</code>s have another ctor with this signature:
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>3.0.x <code class="code">filebuf</code>s have another ctor with this signature:
+ <code class="code">basic_filebuf(__c_file_type*, ios_base::openmode, int_type);
+ </code>
+ This comes in very handy in a number of places, such as
+ attaching Unix sockets, pipes, and anything else which uses file
+ descriptors, into the IOStream buffering classes. The three
+ arguments are as follows:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p><code class="code">__c_file_type* F </code>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p><code class="code">__c_file_type* F </code>
+ // the __c_file_type typedef usually boils down to stdio's FILE
+ </p></li><li class="listitem"><p><code class="code">ios_base::openmode M </code>
+ // same as all the other uses of openmode
+@@ -42,4 +41,4 @@
+ <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00074.html" target="_top"><code class="code">__gnu_cxx::stdio_filebuf</code></a>.
+ This class can be constructed from a C <code class="code">FILE*</code> or a file
+ descriptor, and provides the <code class="code">fd()</code> function.
+- </p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 27. Iterators </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 29. Demangling</td></tr></table></div></body></html>
++ </p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 27. Iterators </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 29. Demangling</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/ext_iterators.html
++++ b/src/libstdc++-v3/doc/html/manual/ext_iterators.html
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 27. Iterators"><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
++</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
+ original HP STL implementation (the language wasn't rich enough at the
+ time). For backwards compatibility, base classes are provided which
+ declare the same nested typedefs:
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>input_iterator</p></li><li class="listitem"><p>output_iterator</p></li><li class="listitem"><p>forward_iterator</p></li><li class="listitem"><p>bidirectional_iterator</p></li><li class="listitem"><p>random_access_iterator</p></li></ul></div><p>24.3.4 describes iterator operation <code class="code">distance</code>, which takes
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>input_iterator</p></li><li class="listitem"><p>output_iterator</p></li><li class="listitem"><p>forward_iterator</p></li><li class="listitem"><p>bidirectional_iterator</p></li><li class="listitem"><p>random_access_iterator</p></li></ul></div><p>24.3.4 describes iterator operation <code class="code">distance</code>, which takes
+ two iterators and returns a result. It is extended by another signature
+ which takes two iterators and a reference to a result. The result is
+ modified, and the function returns nothing.
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 26. Numerics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 28. Input and Output</td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 26. Numerics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 28. Input and Output</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/ext_numerics.html
++++ b/src/libstdc++-v3/doc/html/manual/ext_numerics.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 26. Numerics"><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>,
++</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>,
+ are extended with the following functions:
+ </p><pre class="programlisting">
+ power (x, n);
+@@ -21,4 +20,4 @@
+ <code class="code">value + 1</code> to<code class="code"> *(first + 1)</code> and so on."
+ </p><pre class="programlisting">
+ void iota(_ForwardIter first, _ForwardIter last, _Tp value);</pre><p>The <code class="code">iota</code> function is included in the ISO C++ 2011 standard.
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 25. Algorithms </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 27. Iterators</td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 25. Algorithms </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 27. Iterators</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/ext_utilities.html
++++ b/src/libstdc++-v3/doc/html/manual/ext_utilities.html
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch23s02.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="bk01pt03ch23s02.html">Prev</a> </td><th width="60%" align="center">Part III. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch23s02.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="bk01pt03ch23s02.html">Prev</a> </td><th width="60%" align="center">Part III. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 24. Utilities"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.util"></a>Chapter 24. Utilities</h2></div></div></div><p>
++</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>
+ The <code class="filename">&lt;functional&gt;</code> header
+ contains many additional functors
+ and helper functions, extending section 20.3. They are
+ implemented in the file stl_function.h:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">identity_element</code> for addition and multiplication.
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="code">identity_element</code> for addition and multiplication.
+ </p></li><li class="listitem"><p>The functor <code class="code">identity</code>, whose <code class="code">operator()</code>
+ returns the argument unchanged.
+ </p></li><li class="listitem"><p>Composition functors <code class="code">unary_function</code> and
+@@ -39,4 +38,4 @@
+ </p><p>
+ The specialized algorithms of section 20.4.4 are extended with
+ <code class="code">uninitialized_copy_n</code>.
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch23s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Deprecated </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 25. Algorithms</td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch23s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Deprecated </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 25. Algorithms</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/extensions.html
++++ b/src/libstdc++-v3/doc/html/manual/extensions.html
+@@ -1,12 +1,11 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03pr01.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03pr01.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III. 
+ Extensions
+
+-</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="bk01pt03pr01.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part III.  Extensions"><div class="titlepage"><div><div><h1 class="title"><a id="manual.ext"></a>Part III. 
++</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="bk01pt03pr01.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. 
+ Extensions
+- <a id="idp16388480" class="indexterm"></a>
+-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="preface"><a href="bk01pt03pr01.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="bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.link">Link- and run-time coexistence of release- and
++ <a id="idm269985818656" class="indexterm"></a>
++</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="preface"><a href="bk01pt03pr01.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="bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.link">Link- and run-time coexistence of release- and
+ debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.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="bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s05.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="bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.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="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.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="bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.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="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.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="bk01pt03ch20s02.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch20s02.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch20s03.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch20s04.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s05.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="bk01pt03ch21s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.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">
+ Configuring via Template Parameters
+ </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits">
+@@ -69,4 +68,4 @@
+ Text <code class="function">modify</code> Up
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_modify_down">
+ Text <code class="function">modify</code> Down
+- </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.performance.observations">Observations</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.priority_queue">Priority_Queue</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_ack.html">Acknowledgments</a></span></dt><dt><span class="bibliography"><a href="policy_data_structures.html#pbds.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_containers.html">23. HP/SGI Extensions</a></span></dt><dd><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="bk01pt03ch23s02.html">Deprecated</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_utilities.html">24. Utilities</a></span></dt><dt><span class="chapter"><a href="ext_algorithms.html">25. Algorithms</a></span></dt><dt><span class="chapter"><a href="ext_numerics.html">26. Numerics</a></span></dt><dt><span class="chapter"><a href="ext_iterators.html">27. Iterators</a></span></dt><dt><span class="chapter"><a href="ext_io.html">28. Input and Output</a></span></dt><dd><dl><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_demangling.html">29. Demangling</a></span></dt><dt><span class="chapter"><a href="ext_concurrency.html">30. Concurrency</a></span></dt><dd><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="bk01pt03ch30s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch30s03.html">Use</a></span></dt></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="io_and_c.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="bk01pt03pr01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
++ </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.performance.observations">Observations</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.priority_queue">Priority_Queue</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_ack.html">Acknowledgments</a></span></dt><dt><span class="bibliography"><a href="policy_data_structures.html#pbds.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_containers.html">23. HP/SGI Extensions</a></span></dt><dd><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="bk01pt03ch23s02.html">Deprecated</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_utilities.html">24. Utilities</a></span></dt><dt><span class="chapter"><a href="ext_algorithms.html">25. Algorithms</a></span></dt><dt><span class="chapter"><a href="ext_numerics.html">26. Numerics</a></span></dt><dt><span class="chapter"><a href="ext_iterators.html">27. Iterators</a></span></dt><dt><span class="chapter"><a href="ext_io.html">28. Input and Output</a></span></dt><dd><dl><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_demangling.html">29. Demangling</a></span></dt><dt><span class="chapter"><a href="ext_concurrency.html">30. Concurrency</a></span></dt><dd><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="bk01pt03ch30s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch30s03.html">Use</a></span></dt></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="io_and_c.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="bk01pt03pr01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/facets.html
++++ b/src/libstdc++-v3/doc/html/manual/facets.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Localization
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr></table><hr /></div><div class="section" title="Facets"><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" title="ctype"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.ctype"></a>ctype</h3></div></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.impl"></a>Implementation</h4></div></div></div><div class="section" title="Specializations"><div class="titlepage"><div><div><h5 class="title"><a id="idp15752864"></a>Specializations</h5></div></div></div><p>
++</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="idm269986448912"></a>Specializations</h5></div></div></div><p>
+ For the required specialization codecvt&lt;wchar_t, char, mbstate_t&gt; ,
+ conversions are made between the internal character set (always UCS4
+ on GNU/Linux) and whatever the currently selected locale for the
+@@ -28,7 +27,7 @@
+ </p><p>
+ Neither of these two required specializations deals with Unicode
+ characters.
+-</p></div></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ How to deal with the global locale issue?
+ </p></li><li class="listitem"><p>
+ How to deal with different types than char, wchar_t? </p></li><li class="listitem"><p>
+@@ -50,30 +49,30 @@
+ </p></li><li class="listitem"><p>
+ Rename abstract base class. See if just smash-overriding is a
+ better approach. Clarify, add sanity to naming.
+- </p></li></ul></div></div><div class="bibliography" title="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="idp15767920"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269986433920"></a><p><span class="citetitle"><em class="citetitle">
+ The GNU C Library
+- </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="idp15772672"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269986429168"></a><p><span class="citetitle"><em class="citetitle">
+ Correspondence
+- </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="idp15775760"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269986426080"></a><p><span class="citetitle"><em class="citetitle">
+ ISO/IEC 14882:1998 Programming languages - C++
+- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15778048"></a><p><span class="citetitle"><em class="citetitle">
++ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269986423792"></a><p><span class="citetitle"><em class="citetitle">
+ ISO/IEC 9899:1999 Programming languages - C
+- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry" title="The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)"><a id="idp15780320"></a><p><span class="title"><em>
++ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269986421520"></a><p><span class="title"><em>
+ <a class="link" href="http://www.unix.org/version3/ieee_std.html" target="_top">
+ The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
+ </a>
+ </em>. </span><span class="copyright">Copyright © 1999
+- The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><div class="biblioentry"><a id="idp15783568"></a><p><span class="citetitle"><em class="citetitle">
++ The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><div class="biblioentry"><a id="idm269986418272"></a><p><span class="citetitle"><em class="citetitle">
+ The C++ Programming Language, Special Edition
+ </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">
+ Addison Wesley
+- . </span></span></p></div><div class="biblioentry"><a id="idp15788192"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></span></p></div><div class="biblioentry"><a id="idm269986413648"></a><p><span class="citetitle"><em class="citetitle">
+ Standard C++ IOStreams and Locales
+ </em>. </span><span class="subtitle">
+ Advanced Programmer's Guide and Reference
+ . </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">
+ Addison Wesley Longman
+- . </span></span></p></div></div></div><div class="section" title="codecvt"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.codecvt"></a>codecvt</h3></div></div></div><p>
++ . </span></span></p></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.codecvt"></a>codecvt</h3></div></div></div><p>
+ The standard class codecvt attempts to address conversions between
+ different character encoding schemes. In particular, the standard
+ attempts to detail conversions between the implementation-defined wide
+@@ -87,7 +86,7 @@
+ addressed, and examples of correct usage for both the required
+ specializations for wide and narrow characters and the
+ implementation-provided extended functionality are given.
+-</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.req"></a>Requirements</h4></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.req"></a>Requirements</h4></div></div></div><p>
+ Around page 425 of the C++ Standard, this charming heading comes into view:
+ </p><div class="blockquote"><blockquote class="blockquote"><p>
+ 22.2.1.5 - Template class codecvt
+@@ -133,7 +132,7 @@
+ Two: The required conversions, by specifying mbstate_t as the third
+ template parameter, imply an implementation strategy that is mostly
+ (or wholly) based on the underlying C library, and the functions
+-mcsrtombs and wcsrtombs in particular.</p></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.design"></a>Design</h4></div></div></div><div class="section" title="wchar_t Size"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.wchar_t_size"></a><span class="type">wchar_t</span> Size</h5></div></div></div><p>
++mcsrtombs and wcsrtombs in particular.</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.design"></a>Design</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.wchar_t_size"></a><span class="type">wchar_t</span> Size</h5></div></div></div><p>
+ The simple implementation detail of wchar_t's size seems to
+ repeatedly confound people. Many systems use a two byte,
+ unsigned integral type to represent wide characters, and use an
+@@ -145,7 +144,7 @@
+ size for the type wchar_t.
+ </p><p>
+ Thus, portable C++ code cannot assume a byte size (or endianness) either.
+- </p></div><div class="section" title="Support for Unicode"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.unicode"></a>Support for Unicode</h5></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.unicode"></a>Support for Unicode</h5></div></div></div><p>
+ Probably the most frequently asked question about code conversion
+ is: "So dudes, what's the deal with Unicode strings?"
+ The dude part is optional, but apparently the usefulness of
+@@ -162,7 +161,7 @@
+ needed is some kind of generalized type that accounts for the
+ issues that abstract encodings will need. The minimum information
+ that is required includes:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Identifiers for each of the codesets involved in the
+ conversion. For example, using the iconv family of functions
+ from the Single Unix Specification (what used to be called
+@@ -213,7 +212,7 @@
+ Some way to enforce strict type checking on the internal and
+ external types. As part of this, the size of the internal and
+ external types will need to be known.
+-</p></li></ul></div></div><div class="section" title="Other Issues"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.issues"></a>Other Issues</h5></div></div></div><p>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.issues"></a>Other Issues</h5></div></div></div><p>
+ In addition, multi-threaded and multi-locale environments also impact
+ the design and requirements for code conversions. In particular, they
+ affect the required specialization codecvt&lt;wchar_t, char, mbstate_t&gt;
+@@ -245,7 +244,7 @@
+ conversions are made between the internal character set (always UCS4
+ on GNU/Linux) and whatever the currently selected locale for the
+ LC_CTYPE category implements.
+-</p></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.impl"></a>Implementation</h4></div></div></div><p>
++</p></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.impl"></a>Implementation</h4></div></div></div><p>
+ The two required specializations are implemented as follows:
+ </p><p>
+ <code class="code">
+@@ -347,7 +346,7 @@
+ for this specialization, and usage of codecvt&lt;internal character type,
+ external character type, encoding_state&gt; is consistent with other
+ codecvt usage.
+-</p></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.use"></a>Use</h4></div></div></div><p>A conversions involving string literal.</p><pre class="programlisting">
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.use"></a>Use</h4></div></div></div><p>A conversions involving string literal.</p><pre class="programlisting">
+ typedef codecvt_base::result result;
+ typedef unsigned short unicode_t;
+ typedef unicode_t int_type;
+@@ -384,14 +383,14 @@
+ VERIFY( !int_traits::compare(i_arr, i_lit, size) );
+ VERIFY( efrom_next == e_lit + size );
+ VERIFY( ito_next == i_arr + size );
+-</pre></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ a. things that are sketchy, or remain unimplemented:
+ do_encoding, max_length and length member functions
+ are only weakly implemented. I have no idea how to do
+ this correctly, and in a generic manner. Nathan?
+ </p></li><li class="listitem"><p>
+ b. conversions involving std::string
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
+ how should operators != and == work for string of
+ different/same encoding?
+ </p></li><li class="listitem"><p>
+@@ -401,7 +400,7 @@
+ conversions between narrow, wide, and unicode strings
+ </p></li></ul></div></li><li class="listitem"><p>
+ c. conversions involving std::filebuf and std::ostream
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
+ how to initialize the state object in a
+ standards-conformant manner?
+ </p></li><li class="listitem"><p>
+@@ -410,50 +409,50 @@
+ </p></li><li class="listitem"><p>
+ wchar_t/char internal buffers and conversions between
+ internal/external buffers?
+- </p></li></ul></div></li></ul></div></div><div class="bibliography" title="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="idp15866336"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269986335856"></a><p><span class="citetitle"><em class="citetitle">
+ The GNU C Library
+ </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="idp15871088"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></p></div><div class="biblioentry"><a id="idm269986331104"></a><p><span class="citetitle"><em class="citetitle">
+ Correspondence
+- </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="idp15874176"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269986328016"></a><p><span class="citetitle"><em class="citetitle">
+ ISO/IEC 14882:1998 Programming languages - C++
+- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15876464"></a><p><span class="citetitle"><em class="citetitle">
++ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269986325728"></a><p><span class="citetitle"><em class="citetitle">
+ ISO/IEC 9899:1999 Programming languages - C
+- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry" title="System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)"><a id="idp15878736"></a><p><span class="title"><em>
++ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269986323456"></a><p><span class="title"><em>
+ <a class="link" href="http://www.opengroup.org/austin" target="_top">
+ System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ </a>
+ </em>. </span><span class="copyright">Copyright © 2008
+ The Open Group/The Institute of Electrical and Electronics
+ Engineers, Inc.
+- . </span></p></div><div class="biblioentry"><a id="idp15881968"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></p></div><div class="biblioentry"><a id="idm269986320224"></a><p><span class="citetitle"><em class="citetitle">
+ The C++ Programming Language, Special Edition
+ </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">
+ Addison Wesley
+- . </span></span></p></div><div class="biblioentry"><a id="idp15886592"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></span></p></div><div class="biblioentry"><a id="idm269986315600"></a><p><span class="citetitle"><em class="citetitle">
+ Standard C++ IOStreams and Locales
+ </em>. </span><span class="subtitle">
+ Advanced Programmer's Guide and Reference
+ . </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">
+ Addison Wesley Longman
+- . </span></span></p></div><div class="biblioentry" title="A brief description of Normative Addendum 1"><a id="idp15892256"></a><p><span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="idm269986309936"></a><p><span class="title"><em>
+ <a class="link" href="http://www.lysator.liu.se/c/na1.html" target="_top">
+ A brief description of Normative Addendum 1
+ </a>
+- </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" title="The Unicode HOWTO"><a id="idp15895504"></a><p><span class="title"><em>
++ </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="idm269986306688"></a><p><span class="title"><em>
+ <a class="link" href="http://tldp.org/HOWTO/Unicode-HOWTO.html" target="_top">
+ The Unicode HOWTO
+ </a>
+- </em>. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span></p></div><div class="biblioentry" title="UTF-8 and Unicode FAQ for Unix/Linux"><a id="idp15898288"></a><p><span class="title"><em>
++ </em>. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span></p></div><div class="biblioentry"><a id="idm269986303904"></a><p><span class="title"><em>
+ <a class="link" href="http://www.cl.cam.ac.uk/~mgk25/unicode.html" target="_top">
+ UTF-8 and Unicode FAQ for Unix/Linux
+ </a>
+- </em>. </span><span class="author"><span class="firstname">Markus</span> <span class="surname">Khun</span>. </span></p></div></div></div><div class="section" title="messages"><div class="titlepage"><div><div><h3 class="title"><a id="manual.localization.facet.messages"></a>messages</h3></div></div></div><p>
++ </em>. </span><span class="author"><span class="firstname">Markus</span> <span class="surname">Khun</span>. </span></p></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.localization.facet.messages"></a>messages</h3></div></div></div><p>
+ The std::messages facet implements message retrieval functionality
+ equivalent to Java's java.text.MessageFormat .using either GNU gettext
+ or IEEE 1003.1-200 functions.
+-</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.req"></a>Requirements</h4></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.req"></a>Requirements</h4></div></div></div><p>
+ The std::messages facet is probably the most vaguely defined facet in
+ the standard library. It's assumed that this facility was built into
+ the standard library in order to convert string literals from one
+@@ -502,7 +501,7 @@
+ -6- Effects: Releases unspecified resources associated with cat.
+ -7- Notes: The limit on such resources, if any, is implementation-defined.
+ </em></span>
+-</p></blockquote></div></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.design"></a>Design</h4></div></div></div><p>
++</p></blockquote></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.design"></a>Design</h4></div></div></div><p>
+ A couple of notes on the standard.
+ </p><p>
+ First, why is <code class="code">messages_base::catalog</code> specified as a typedef
+@@ -535,7 +534,7 @@
+ string in 'get' is in the "C" locale. Thus, all source code is assumed
+ to be written in English, so translations are always from "en_US" to
+ other, explicitly named locales.
+-</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.impl"></a>Implementation</h4></div></div></div><div class="section" title="Models"><div class="titlepage"><div><div><h5 class="title"><a id="messages.impl.models"></a>Models</h5></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="messages.impl.models"></a>Models</h5></div></div></div><p>
+ This is a relatively simple class, on the face of it. The standard
+ specifies very little in concrete terms, so generic
+ implementations that are conforming yet do very little are the
+@@ -546,7 +545,7 @@
+ </p><p>
+ Three different mechanisms have been provided, selectable via
+ configure flags:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ generic
+ </p><p>
+ This model does very little, and is what is used by default.
+@@ -576,7 +575,7 @@
+ added for 'open' so that a directory could be specified with a given
+ message catalog. This simplifies calling conventions for the gnu
+ model.
+-</p></div><div class="section" title="The GNU Model"><div class="titlepage"><div><div><h5 class="title"><a id="messages.impl.gnu"></a>The GNU Model</h5></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="messages.impl.gnu"></a>The GNU Model</h5></div></div></div><p>
+ The messages facet, because it is retrieving and converting
+ between characters sets, depends on the ctype and perhaps the
+ codecvt facet in a given locale. In addition, underlying "C"
+@@ -588,7 +587,7 @@
+ Making the message catalogs can be initially tricky, but become
+ quite simple with practice. For complete info, see the gettext
+ documentation. Here's an idea of what is required:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Make a source file with the required string literals that need
+ to be translated. See <code class="code">intl/string_literals.cc</code> for
+ an example.
+@@ -619,7 +618,7 @@
+ <code class="code">
+ use_facet&lt;messages&lt;char&gt; &gt;(loc_de).open("libstdc++", locale(), dir);
+ </code>
+- </p></li></ul></div></div></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.use"></a>Use</h4></div></div></div><p>
++ </p></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.use"></a>Use</h4></div></div></div><p>
+ A simple example using the GNU model of message conversion.
+ </p><pre class="programlisting">
+ #include &lt;iostream&gt;
+@@ -641,9 +640,9 @@
+ cout &lt;&lt; "thank you in german:" &lt;&lt; s02 &lt;&lt; '\n';
+ mssg_de.close(cat_de);
+ }
+-</pre></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Things that are sketchy, or remain unimplemented:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
+ _M_convert_from_char, _M_convert_to_char are in flux,
+ depending on how the library ends up doing character set
+ conversions. It might not be possible to do a real character
+@@ -691,39 +690,39 @@
+ model. As of this writing, it is unknown how to query to see
+ if a specified message catalog exists using the gettext
+ package.
+- </p></li></ul></div></div><div class="bibliography" title="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="idp15979248"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269986223488"></a><p><span class="citetitle"><em class="citetitle">
+ The GNU C Library
+ </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="idp15984000"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></p></div><div class="biblioentry"><a id="idm269986218736"></a><p><span class="citetitle"><em class="citetitle">
+ Correspondence
+- </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="idp15987088"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269986215648"></a><p><span class="citetitle"><em class="citetitle">
+ ISO/IEC 14882:1998 Programming languages - C++
+- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15989376"></a><p><span class="citetitle"><em class="citetitle">
++ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269986213360"></a><p><span class="citetitle"><em class="citetitle">
+ ISO/IEC 9899:1999 Programming languages - C
+- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry" title="System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)"><a id="idp15991648"></a><p><span class="title"><em>
++ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269986211088"></a><p><span class="title"><em>
+ <a class="link" href="http://www.opengroup.org/austin" target="_top">
+ System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ </a>
+ </em>. </span><span class="copyright">Copyright © 2008
+ The Open Group/The Institute of Electrical and Electronics
+ Engineers, Inc.
+- . </span></p></div><div class="biblioentry"><a id="idp15994880"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></p></div><div class="biblioentry"><a id="idm269986207856"></a><p><span class="citetitle"><em class="citetitle">
+ The C++ Programming Language, Special Edition
+ </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">
+ Addison Wesley
+- . </span></span></p></div><div class="biblioentry"><a id="idp15999504"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></span></p></div><div class="biblioentry"><a id="idm269986203232"></a><p><span class="citetitle"><em class="citetitle">
+ Standard C++ IOStreams and Locales
+ </em>. </span><span class="subtitle">
+ Advanced Programmer's Guide and Reference
+ . </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">
+ Addison Wesley Longman
+- . </span></span></p></div><div class="biblioentry" title="API Specifications, Java Platform"><a id="idp16005168"></a><p><span class="title"><em>
+- <a class="link" href="http://java.sun.com/reference/api/index.html" target="_top">
++ . </span></span></p></div><div class="biblioentry"><a id="idm269986197568"></a><p><span class="title"><em>
++ <a class="link" href="http://www.oracle.com/technetwork/java/api/index.html" target="_top">
+ API Specifications, Java Platform
+ </a>
+ </em>. </span><span class="pagenums">java.util.Properties, java.text.MessageFormat,
+ java.util.Locale, java.util.ResourceBundle
+- . </span></p></div><div class="biblioentry" title="GNU gettext tools, version 0.10.38, Native Language Support Library and Tools."><a id="idp16007504"></a><p><span class="title"><em>
++ . </span></p></div><div class="biblioentry"><a id="idm269986195232"></a><p><span class="title"><em>
+ <a class="link" href="http://www.gnu.org/software/gettext" target="_top">
+ GNU gettext tools, version 0.10.38, Native Language Support
+ Library and Tools.
+@@ -734,4 +733,4 @@
+  </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 9. 
+ Containers
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/fstreams.html
++++ b/src/libstdc++-v3/doc/html/manual/fstreams.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Input and Output
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr></table><hr /></div><div class="section" title="File Based Streams"><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" title="Copying a File"><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>
++</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>
+ </p><p>So you want to copy a file quickly and easily, and most important,
+ completely portably. And since this is C++, you have an open
+ ifstream (call it IN) and an open ofstream (call it OUT):
+@@ -49,7 +48,7 @@
+ The operators shown above are all defined in the parent
+ basic_ostream class and are therefore available with all possible
+ descendants.
+- </p></div><div class="section" title="Binary Input and Output"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.filestreams.binary"></a>Binary Input and Output</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.filestreams.binary"></a>Binary Input and Output</h3></div></div></div><p>
+ </p><p>The first and most important thing to remember about binary I/O is
+ that opening a file with <code class="code">ios::binary</code> is not, repeat
+ <span class="emphasis"><em>not</em></span>, the only thing you have to do. It is not a silver
+@@ -87,7 +86,7 @@
+ of <span class="emphasis"><em>formatting</em></span> functions and classes to perform something
+ which <span class="emphasis"><em>requires</em></span> that formatting not be done? There are a
+ seemingly infinite number of solutions, and a few are listed here:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="quote">“<span class="quote">Derive your own fstream-type classes and write your own
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="quote">“<span class="quote">Derive your own fstream-type classes and write your own
+ &lt;&lt;/&gt;&gt; operators to do binary I/O on whatever data
+ types you're using.</span>”</span>
+ </p><p>
+@@ -147,4 +146,4 @@
+ between arbitrary programs, or across a network, or from one
+ invocation of a program to another invocation of the same program
+ on a different platform, etc.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Memory Based Streams </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Memory Based Streams </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
++++ b/src/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
+@@ -1,15 +1,14 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Numerics
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr></table><hr /></div><div class="section" title="Generalized Operations"><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>
++</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>
+ </p><p>There are four generalized functions in the &lt;numeric&gt; header
+ that follow the same conventions as those in &lt;algorithm&gt;. Each
+ of them is overloaded: one signature for common default operations,
+ and a second for fully general operations. Their names are
+ self-explanatory to anyone who works with numerics on a regular basis:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">accumulate</code></p></li><li class="listitem"><p><code class="code">inner_product</code></p></li><li class="listitem"><p><code class="code">chapterial_sum</code></p></li><li class="listitem"><p><code class="code">adjacent_difference</code></p></li></ul></div><p>Here is a simple example of the two forms of <code class="code">accumulate</code>.
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="code">accumulate</code></p></li><li class="listitem"><p><code class="code">inner_product</code></p></li><li class="listitem"><p><code class="code">chapterial_sum</code></p></li><li class="listitem"><p><code class="code">adjacent_difference</code></p></li></ul></div><p>Here is a simple example of the two forms of <code class="code">accumulate</code>.
+ </p><pre class="programlisting">
+ int ar[50];
+ int someval = somefunction();
+@@ -29,4 +28,4 @@
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="numerics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 12. 
+ Numerics
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/index.html
++++ b/src/libstdc++-v3/doc/html/manual/index.html
+@@ -1,8 +1,7 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="The GNU C++ Library Manual"><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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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
+ <a class="link" href="http://www.fsf.org" target="_top">FSF</a>
+- </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.
++ </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.
+ Introduction
+
+ </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="bk01pt02.html">II.
+@@ -16,13 +15,13 @@
+ </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="bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6.
+ Utilities
+
+-</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#idp13894640">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13898192">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13911488">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#idp15484560">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15507072">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15514368">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15528992">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#idp15545344">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15548928">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.
++</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#idm269988298944">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm269988295392">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269988282096">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#idm269986714912">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269986692400">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269986685104">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269986670480">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#idm269986654128">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269986650544">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.
+ Strings
+
+ </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.
+ Localization
+
+-</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#idp15752864">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.
++</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#idm269986448912">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.
+ Containers
+
+ </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="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.
+@@ -144,21 +143,21 @@
+
+ </a></span></dt><dt><span class="appendix"><a href="appendix_gpl.html">D.
+ <acronym class="acronym">GNU</acronym> General Public License version 3
+- </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#idp17575248">Node Invariants</a></dt><dt>22.2. <a href="policy_data_structures.html#idp17581968">Underlying Associative Data Structures</a></dt><dt>22.3. <a href="policy_data_structures.html#idp17613664">Range Iteration in Different Data Structures</a></dt><dt>22.4. <a href="policy_data_structures.html#idp17628576">Point Iteration in Hash Data Structures</a></dt><dt>22.5. <a href="policy_data_structures.html#idp17637776">Effect of erase in different underlying data structures</a></dt><dt>22.6. <a href="policy_data_structures.html#idp17705360">Underlying Priority Queue Data Structures</a></dt><dt>22.7. <a href="policy_data_structures_using.html#idp17768064">Exception Hierarchy</a></dt><dt>22.8. <a href="policy_data_structures_design.html#idp17962720">Non-unique Mapping Standard Containers</a></dt><dt>22.9. <a href="policy_data_structures_design.html#fig.pbds_embedded_lists_2">
++ </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#idm269984634416">Node Invariants</a></dt><dt>22.2. <a href="policy_data_structures.html#idm269984627696">Underlying Associative Data Structures</a></dt><dt>22.3. <a href="policy_data_structures.html#idm269984596064">Range Iteration in Different Data Structures</a></dt><dt>22.4. <a href="policy_data_structures.html#idm269984581152">Point Iteration in Hash Data Structures</a></dt><dt>22.5. <a href="policy_data_structures.html#idm269984571888">Effect of erase in different underlying data structures</a></dt><dt>22.6. <a href="policy_data_structures.html#idm269984504224">Underlying Priority Queue Data Structures</a></dt><dt>22.7. <a href="policy_data_structures_using.html#idm269984441456">Exception Hierarchy</a></dt><dt>22.8. <a href="policy_data_structures_design.html#idm269984247008">Non-unique Mapping Standard Containers</a></dt><dt>22.9. <a href="policy_data_structures_design.html#fig.pbds_embedded_lists_2">
+ Effect of embedded lists in
+ <code class="classname">std::multimap</code>
+- </a></dt><dt>22.10. <a href="policy_data_structures_design.html#idp17986224">Non-unique Mapping Containers</a></dt><dt>22.11. <a href="policy_data_structures_design.html#idp18006032">Point Iterator Hierarchy</a></dt><dt>22.12. <a href="policy_data_structures_design.html#idp18019376">Invalidation Guarantee Tags Hierarchy</a></dt><dt>22.13. <a href="policy_data_structures_design.html#idp18049600">Container Tag Hierarchy</a></dt><dt>22.14. <a href="policy_data_structures_design.html#idp18089744">Hash functions, ranged-hash functions, and
+- range-hashing functions</a></dt><dt>22.15. <a href="policy_data_structures_design.html#idp18154176">Insert hash sequence diagram</a></dt><dt>22.16. <a href="policy_data_structures_design.html#idp18161232">Insert hash sequence diagram with a null policy</a></dt><dt>22.17. <a href="policy_data_structures_design.html#idp18178048">Hash policy class diagram</a></dt><dt>22.18. <a href="policy_data_structures_design.html#idp18197088">Balls and bins</a></dt><dt>22.19. <a href="policy_data_structures_design.html#idp18227776">Insert resize sequence diagram</a></dt><dt>22.20. <a href="policy_data_structures_design.html#idp18235600">Standard resize policy trigger sequence
+- diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#idp18239760">Standard resize policy size sequence
+- diagram</a></dt><dt>22.22. <a href="policy_data_structures_design.html#idp18317728">Tree node invariants</a></dt><dt>22.23. <a href="policy_data_structures_design.html#idp18327168">Tree node invalidation</a></dt><dt>22.24. <a href="policy_data_structures_design.html#idp18340336">A tree and its update policy</a></dt><dt>22.25. <a href="policy_data_structures_design.html#idp18352000">Restoring node invariants</a></dt><dt>22.26. <a href="policy_data_structures_design.html#idp18360176">Insert update sequence</a></dt><dt>22.27. <a href="policy_data_structures_design.html#idp18382432">Useless update path</a></dt><dt>22.28. <a href="policy_data_structures_design.html#idp18427056">A PATRICIA trie</a></dt><dt>22.29. <a href="policy_data_structures_design.html#idp18437488">A trie and its update policy</a></dt><dt>22.30. <a href="policy_data_structures_design.html#idp18468000">A simple list</a></dt><dt>22.31. <a href="policy_data_structures_design.html#idp18473584">The counter algorithm</a></dt><dt>22.32. <a href="policy_data_structures_design.html#idp18537424">Underlying Priority-Queue Data-Structures.</a></dt><dt>22.33. <a href="policy_data_structures_design.html#idp18572464">Priority-Queue Data-Structure Tags.</a></dt><dt>B.1. <a href="appendix_porting.html#idp21998848">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#idp4061552">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#idp7562848">C++ 2011 Implementation Status</a></dt><dt>1.3. <a href="status.html#idp2271168">C++ TR1 Implementation Status</a></dt><dt>1.4. <a href="status.html#idp12526624">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using.html#idp13018432">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#idp13045856">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#idp13082336">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#idp13107072">C++ 2011 Library Headers</a></dt><dt>3.5. <a href="using_headers.html#idp13158512">C++ 2011 Library Headers for C Library Facilities</a></dt><dt>3.6. <a href="using_headers.html#idp13188400">C++ TR 1 Library Headers</a></dt><dt>3.7. <a href="using_headers.html#idp13205328">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.8. <a href="using_headers.html#idp13226400">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.9. <a href="using_headers.html#idp13231920">C++ ABI Headers</a></dt><dt>3.10. <a href="using_headers.html#idp13238320">Extension Headers</a></dt><dt>3.11. <a href="using_headers.html#idp13274048">Extension Debug Headers</a></dt><dt>3.12. <a href="using_headers.html#idp13288816">Extension Profile Headers</a></dt><dt>3.13. <a href="using_headers.html#idp13302192">Extension Parallel Headers</a></dt><dt>17.1. <a href="bk01pt03ch17s03.html#idp16454656">Debugging Containers</a></dt><dt>17.2. <a href="bk01pt03ch17s03.html#idp16499552">Debugging Containers C++11</a></dt><dt>18.1. <a href="bk01pt03ch18s03.html#idp16689952">Parallel Algorithms</a></dt><dt>19.1. <a href="bk01pt03ch19s02.html#idp16944832">Profile Code Location</a></dt><dt>19.2. <a href="bk01pt03ch19s07.html#idp17050544">Profile Diagnostics</a></dt><dt>21.1. <a href="bk01pt03ch21s02.html#idp17461952">Bitmap Allocator Memory Map</a></dt><dt>B.1. <a href="documentation_hacking.html#idp22126320">Doxygen Prerequisites</a></dt><dt>B.2. <a href="documentation_hacking.html#idp22201984">HTML to Doxygen Markup Comparison</a></dt><dt>B.3. <a href="documentation_hacking.html#idp22221360">Docbook Prerequisites</a></dt><dt>B.4. <a href="documentation_hacking.html#idp22298992">HTML to Docbook XML Markup Comparison</a></dt><dt>B.5. <a href="documentation_hacking.html#idp22323136">Docbook XML Element Use</a></dt><dt>B.6. <a href="api.html#idp22990128">Extension Allocators</a></dt><dt>B.7. <a href="api.html#idp23017760">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#idp18103552">Ranged Hash Function</a></dt><dt>22.2. <a href="policy_data_structures_design.html#idp18109440">Range-Hashing, Division Method</a></dt><dt>22.3. <a href="policy_data_structures_design.html#idp18113952">Division via Prime Modulo</a></dt><dt>22.4. <a href="policy_data_structures_design.html#idp18115776">Division via Bit Mask</a></dt><dt>22.5. <a href="policy_data_structures_design.html#idp18125408">
++ </a></dt><dt>22.10. <a href="policy_data_structures_design.html#idm269984223568">Non-unique Mapping Containers</a></dt><dt>22.11. <a href="policy_data_structures_design.html#idm269984203760">Point Iterator Hierarchy</a></dt><dt>22.12. <a href="policy_data_structures_design.html#idm269984190416">Invalidation Guarantee Tags Hierarchy</a></dt><dt>22.13. <a href="policy_data_structures_design.html#idm269984160256">Container Tag Hierarchy</a></dt><dt>22.14. <a href="policy_data_structures_design.html#idm269984120160">Hash functions, ranged-hash functions, and
++ range-hashing functions</a></dt><dt>22.15. <a href="policy_data_structures_design.html#idm269984055792">Insert hash sequence diagram</a></dt><dt>22.16. <a href="policy_data_structures_design.html#idm269984048736">Insert hash sequence diagram with a null policy</a></dt><dt>22.17. <a href="policy_data_structures_design.html#idm269984031920">Hash policy class diagram</a></dt><dt>22.18. <a href="policy_data_structures_design.html#idm269984012944">Balls and bins</a></dt><dt>22.19. <a href="policy_data_structures_design.html#idm269983982160">Insert resize sequence diagram</a></dt><dt>22.20. <a href="policy_data_structures_design.html#idm269983974384">Standard resize policy trigger sequence
++ diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#idm269983970224">Standard resize policy size sequence
++ diagram</a></dt><dt>22.22. <a href="policy_data_structures_design.html#idm269983892128">Tree node invariants</a></dt><dt>22.23. <a href="policy_data_structures_design.html#idm269983882688">Tree node invalidation</a></dt><dt>22.24. <a href="policy_data_structures_design.html#idm269983869584">A tree and its update policy</a></dt><dt>22.25. <a href="policy_data_structures_design.html#idm269983857920">Restoring node invariants</a></dt><dt>22.26. <a href="policy_data_structures_design.html#idm269983849744">Insert update sequence</a></dt><dt>22.27. <a href="policy_data_structures_design.html#idm269983827488">Useless update path</a></dt><dt>22.28. <a href="policy_data_structures_design.html#idm269983782736">A PATRICIA trie</a></dt><dt>22.29. <a href="policy_data_structures_design.html#idm269983772240">A trie and its update policy</a></dt><dt>22.30. <a href="policy_data_structures_design.html#idm269983741664">A simple list</a></dt><dt>22.31. <a href="policy_data_structures_design.html#idm269983736080">The counter algorithm</a></dt><dt>22.32. <a href="policy_data_structures_design.html#idm269983672320">Underlying Priority-Queue Data-Structures.</a></dt><dt>22.33. <a href="policy_data_structures_design.html#idm269983637280">Priority-Queue Data-Structure Tags.</a></dt><dt>B.1. <a href="appendix_porting.html#idm269980214944">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#idm270001165584">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#idm269994202752">C++ 2011 Implementation Status</a></dt><dt>1.3. <a href="status.html#idm270000018688">C++ TR1 Implementation Status</a></dt><dt>1.4. <a href="status.html#idm269989661024">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using.html#idm269989171392">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#idm269989143968">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#idm269989107488">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#idm269989082752">C++ 2011 Library Headers</a></dt><dt>3.5. <a href="using_headers.html#idm269989031312">C++ 2011 Library Headers for C Library Facilities</a></dt><dt>3.6. <a href="using_headers.html#idm269989001424">C++ TR 1 Library Headers</a></dt><dt>3.7. <a href="using_headers.html#idm269988984496">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.8. <a href="using_headers.html#idm269988963424">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.9. <a href="using_headers.html#idm269988957904">C++ ABI Headers</a></dt><dt>3.10. <a href="using_headers.html#idm269988951504">Extension Headers</a></dt><dt>3.11. <a href="using_headers.html#idm269988915776">Extension Debug Headers</a></dt><dt>3.12. <a href="using_headers.html#idm269988901008">Extension Profile Headers</a></dt><dt>3.13. <a href="using_headers.html#idm269988887632">Extension Parallel Headers</a></dt><dt>17.1. <a href="bk01pt03ch17s03.html#idm269985752944">Debugging Containers</a></dt><dt>17.2. <a href="bk01pt03ch17s03.html#idm269985708048">Debugging Containers C++11</a></dt><dt>18.1. <a href="bk01pt03ch18s03.html#idm269985518144">Parallel Algorithms</a></dt><dt>19.1. <a href="bk01pt03ch19s02.html#idm269985263760">Profile Code Location</a></dt><dt>19.2. <a href="bk01pt03ch19s07.html#idm269985157968">Profile Diagnostics</a></dt><dt>21.1. <a href="bk01pt03ch21s02.html#idm269984747328">Bitmap Allocator Memory Map</a></dt><dt>B.1. <a href="documentation_hacking.html#idm269980088096">Doxygen Prerequisites</a></dt><dt>B.2. <a href="documentation_hacking.html#idm269980012416">HTML to Doxygen Markup Comparison</a></dt><dt>B.3. <a href="documentation_hacking.html#idm269979992976">Docbook Prerequisites</a></dt><dt>B.4. <a href="documentation_hacking.html#idm269979915344">HTML to Docbook XML Markup Comparison</a></dt><dt>B.5. <a href="documentation_hacking.html#idm269979891200">Docbook XML Element Use</a></dt><dt>B.6. <a href="api.html#idm269979221808">Extension Allocators</a></dt><dt>B.7. <a href="api.html#idm269979194176">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#idm269984106352">Ranged Hash Function</a></dt><dt>22.2. <a href="policy_data_structures_design.html#idm269984100464">Range-Hashing, Division Method</a></dt><dt>22.3. <a href="policy_data_structures_design.html#idm269984095952">Division via Prime Modulo</a></dt><dt>22.4. <a href="policy_data_structures_design.html#idm269984094128">Division via Bit Mask</a></dt><dt>22.5. <a href="policy_data_structures_design.html#idm269984084496">
+ A Standard String Hash Function
+- </a></dt><dt>22.6. <a href="policy_data_structures_design.html#idp18131552">
++ </a></dt><dt>22.6. <a href="policy_data_structures_design.html#idm269984078352">
+ Only k String DNA Hash
+- </a></dt><dt>22.7. <a href="policy_data_structures_design.html#idp18202592">
++ </a></dt><dt>22.7. <a href="policy_data_structures_design.html#idm269984007440">
+ Probability of Probe Sequence of Length k
+- </a></dt><dt>22.8. <a href="policy_data_structures_design.html#idp18209360">
++ </a></dt><dt>22.8. <a href="policy_data_structures_design.html#idm269984000672">
+ Probability Probe Sequence in Some Bin
+ </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. 
+ Introduction
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/internals.html
++++ b/src/libstdc++-v3/doc/html/manual/internals.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; internals&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; internals&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Porting and Maintenance
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="test.html">Next</a></td></tr></table><hr /></div><div class="section" title="Porting to New Hardware or Operating Systems"><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>
++</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>
+ </p><p>This document explains how to port libstdc++ (the GNU C++ library) to
+ a new target.
+ </p><p>In order to make the GNU C++ library (libstdc++) work with a new
+@@ -20,7 +19,7 @@
+ library, but you should at least try some minimal test cases.
+ </p><p>(Note that what we think of as a "target," the library refers to as
+ a "host." The comment at the top of <code class="code">configure.ac</code> explains why.)
+- </p><div class="section" title="Operating System"><div class="titlepage"><div><div><h3 class="title"><a id="internals.os"></a>Operating System</h3></div></div></div><p>If you are porting to a new operating system (as opposed to a new chip
++ </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="internals.os"></a>Operating System</h3></div></div></div><p>If you are porting to a new operating system (as opposed to a new chip
+ using an existing operating system), you will need to create a new
+ directory in the <code class="code">config/os</code> hierarchy. For example, the IRIX
+ configuration files are all in <code class="code">config/os/irix</code>. There is no set
+@@ -99,7 +98,7 @@
+ #endif
+ </pre><p>We recommend copying an existing <code class="code">os_defines.h</code> to use as a
+ starting point.
+- </p></div><div class="section" title="CPU"><div class="titlepage"><div><div><h3 class="title"><a id="internals.cpu"></a>CPU</h3></div></div></div><p>If you are porting to a new chip (as opposed to a new operating system
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="internals.cpu"></a>CPU</h3></div></div></div><p>If you are porting to a new chip (as opposed to a new operating system
+ running on an existing chip), you will need to create a new directory in the
+ <code class="code">config/cpu</code> hierarchy. Much like the <a class="link" href="internals.html#internals.os" title="Operating System">Operating system</a> setup,
+ there are no strict rules on how to organize the CPU configuration
+@@ -117,7 +116,7 @@
+ </p><p>The <code class="code">cpu_include_dir</code> sets default locations for the files controlling
+ <a class="link" href="internals.html#internals.thread_safety" title="Thread Safety">Thread safety</a> and <a class="link" href="internals.html#internals.numeric_limits" title="Numeric Limits">Numeric limits</a>, if the defaults are not
+ appropriate for your chip.
+- </p></div><div class="section" title="Character Types"><div class="titlepage"><div><div><h3 class="title"><a id="internals.char_types"></a>Character Types</h3></div></div></div><p>The library requires that you provide three header files to implement
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="internals.char_types"></a>Character Types</h3></div></div></div><p>The library requires that you provide three header files to implement
+ character classification, analogous to that provided by the C libraries
+ <code class="code">&lt;ctype.h&gt;</code> header. You can model these on the files provided in
+ <code class="code">config/os/generic</code>. However, these files will almost
+@@ -276,7 +275,7 @@
+ ++__low;
+ return __low;
+ }
+-</pre></div><div class="section" title="Thread Safety"><div class="titlepage"><div><div><h3 class="title"><a id="internals.thread_safety"></a>Thread Safety</h3></div></div></div><p>The C++ library string functionality requires a couple of atomic
++</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="internals.thread_safety"></a>Thread Safety</h3></div></div></div><p>The C++ library string functionality requires a couple of atomic
+ operations to provide thread-safety. If you don't take any special
+ action, the library will use stub versions of these functions that are
+ not thread-safe. They will work fine, unless your applications are
+@@ -331,7 +330,7 @@
+ {
+ *__mem += __val;
+ }
+-</pre></div><div class="section" title="Numeric Limits"><div class="titlepage"><div><div><h3 class="title"><a id="internals.numeric_limits"></a>Numeric Limits</h3></div></div></div><p>The C++ library requires information about the fundamental data types,
++</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="internals.numeric_limits"></a>Numeric Limits</h3></div></div></div><p>The C++ library requires information about the fundamental data types,
+ such as the minimum and maximum representable values of each type.
+ You can define each of these values individually, but it is usually
+ easiest just to indicate how many bits are used in each of the data
+@@ -343,7 +342,7 @@
+ do not have to provide the same definitions for each operating system.
+ To take that approach, create a new file called <code class="code">cpu_limits.h</code> in
+ your CPU configuration directory (see <a class="link" href="internals.html#internals.cpu" title="CPU">CPU</a>).
+- </p></div><div class="section" title="Libtool"><div class="titlepage"><div><div><h3 class="title"><a id="internals.libtool"></a>Libtool</h3></div></div></div><p>The C++ library is compiled, archived and linked with libtool.
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="internals.libtool"></a>Libtool</h3></div></div></div><p>The C++ library is compiled, archived and linked with libtool.
+ Explaining the full workings of libtool is beyond the scope of this
+ document, but there are a few, particular bits that are necessary for
+ porting.
+@@ -365,4 +364,4 @@
+ <code class="code">ltcf-c.sh</code> in the top-level directory. Find the switch statement
+ that sets <code class="code">archive_cmds</code>. Here, adjust the setting for your
+ operating system.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="documentation_hacking.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="test.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Writing and Generating Documentation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Test</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="documentation_hacking.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="test.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Writing and Generating Documentation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Test</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/intro.html
++++ b/src/libstdc++-v3/doc/html/manual/intro.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Introduction
+
+-</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" title="Part I.  Introduction"><div class="titlepage"><div><div><h1 class="title"><a id="manual.intro"></a>Part I. 
++</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. 
+ Introduction
+- <a id="idp9094432" class="indexterm"></a>
+-</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>
++ <a id="idm269998303680" class="indexterm"></a>
++</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>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/io.html
++++ b/src/libstdc++-v3/doc/html/manual/io.html
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
+ Input and Output
+
+ </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. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 13.  Input and Output"><div class="titlepage"><div><div><h2 class="title"><a id="std.io"></a>Chapter 13. 
++ </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. 
+ Input and Output
+- <a id="idp16220688" class="indexterm"></a>
+-</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" title="Iostream Objects"><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
++ <a id="idm269985984816" class="indexterm"></a>
++</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
+ only include the headers you really need. Many people simply include
+ &lt;iostream&gt; when they don't need to -- and that can <span class="emphasis"><em>penalize
+ your runtime as well.</em></span> Here are some tips on which header to use
+@@ -118,4 +117,4 @@
+ the standard objects in that source file; you'll pay less startup
+ time. Only include the header files you need to in general; your
+ compile times will go down when there's less parsing work to do.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Stream Buffers</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Stream Buffers</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/io_and_c.html
++++ b/src/libstdc++-v3/doc/html/manual/io_and_c.html
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Input and Output
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="atomics.html">Next</a></td></tr></table><hr /></div><div class="section" title="Interacting with C"><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" title="Using FILE* and file descriptors"><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>
++</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>
+ See the <a class="link" href="ext_io.html" title="Chapter 28. Input and Output">extensions</a> for using
+ <span class="type">FILE</span> and <span class="type">file descriptors</span> with
+ <code class="classname">ofstream</code> and
+ <code class="classname">ifstream</code>.
+- </p></div><div class="section" title="Performance"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.c.sync"></a>Performance</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.c.sync"></a>Performance</h3></div></div></div><p>
+ Pathetic Performance? Ditch C.
+ </p><p>It sounds like a flame on C, but it isn't. Really. Calm down.
+ I'm just saying it to get your attention.
+@@ -54,4 +53,4 @@
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="atomics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">File Based Streams </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 14. 
+ Atomics
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/iterators.html
++++ b/src/libstdc++-v3/doc/html/manual/iterators.html
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
+ Iterators
+
+ </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. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 10.  Iterators"><div class="titlepage"><div><div><h2 class="title"><a id="std.iterators"></a>Chapter 10. 
++ </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. 
+ Iterators
+- <a id="idp16120304" class="indexterm"></a>
+-</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" title="Predefined"><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" title="Iterators vs. Pointers"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.vs_pointers"></a>Iterators vs. Pointers</h3></div></div></div><p>
++ <a id="idm269986083376" class="indexterm"></a>
++</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>
+ The following
+ FAQ <a class="link" href="../faq.html#faq.iterator_as_pod" title="7.1.">entry</a> points out that
+ iterators are not implemented as pointers. They are a generalization
+@@ -44,7 +43,7 @@
+ down through inheritance, so while the compiler has to do work
+ looking up all the names, your runtime code does not. (This has
+ been a prime concern from the beginning.)
+- </p></div><div class="section" title="One Past the End"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.end"></a>One Past the End</h3></div></div></div><p>This starts off sounding complicated, but is actually very easy,
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.end"></a>One Past the End</h3></div></div></div><p>This starts off sounding complicated, but is actually very easy,
+ especially towards the end. Trust me.
+ </p><p>Beginners usually have a little trouble understand the whole
+ 'past-the-end' thing, until they remember their early algebra classes
+@@ -127,4 +126,4 @@
+ </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="containers_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 11. 
+ Algorithms
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/license.html
++++ b/src/libstdc++-v3/doc/html/manual/license.html
+@@ -1,12 +1,11 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="License"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.license"></a>License</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ There are two licenses affecting GNU libstdc++: one for the code,
+ and one for the documentation.
+ </p><p>
+ There is a license section in the FAQ regarding common <a class="link" href="../faq.html#faq.license">questions</a>. If you have more
+ questions, ask the FSF or the <a class="link" href="http://gcc.gnu.org/lists.html" target="_top">gcc mailing list</a>.
+- </p><div class="section" title="The Code: GPL"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.license.gpl"></a>The Code: GPL</h3></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.license.gpl"></a>The Code: GPL</h3></div></div></div><p>
+ The source code is distributed under the <a class="link" href="appendix_gpl.html" title="Appendix D.  GNU General Public License version 3">GNU General Public License version 3</a>,
+ with the addition under section 7 of an exception described in
+ the <span class="quote">“<span class="quote">GCC Runtime Library Exception, version 3.1</span>”</span>
+@@ -87,7 +86,7 @@
+     </p></div><p>
+ Hopefully that text is self-explanatory. If it isn't, you need to speak
+ to your lawyer, or the Free Software Foundation.
+- </p></div><div class="section" title="The Documentation: GPL, FDL"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.license.fdl"></a>The Documentation: GPL, FDL</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.license.fdl"></a>The Documentation: GPL, FDL</h3></div></div></div><p>
+ The documentation shipped with the library and made available over
+ the web, excluding the pages generated from source comments, are
+ copyrighted by the Free Software Foundation, and placed under the
+@@ -102,4 +101,4 @@
+ </p><p>
+ If you plan on making copies of the documentation, please let us know.
+ We can probably offer suggestions.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="status.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="status.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bugs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 1. Status </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Bugs</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="status.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="status.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bugs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 1. Status </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Bugs</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/localization.html
++++ b/src/libstdc++-v3/doc/html/manual/localization.html
+@@ -1,18 +1,17 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
+ Localization
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 8.  Localization"><div class="titlepage"><div><div><h2 class="title"><a id="std.localization"></a>Chapter 8. 
++ </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. 
+ Localization
+- <a id="idp15674528" class="indexterm"></a>
+-</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#idp15752864">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" title="Locales"><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" title="locale"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.locales.locale"></a>locale</h3></div></div></div><p>
++ <a id="idm269986526032" class="indexterm"></a>
++</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#idm269986448912">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>
+ Describes the basic locale object, including nested
+ classes id, facet, and the reference-counted implementation object,
+ class _Impl.
+-</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.req"></a>Requirements</h4></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.req"></a>Requirements</h4></div></div></div><p>
+ Class locale is non-templatized and has two distinct types nested
+ inside of it:
+ </p><div class="blockquote"><blockquote class="blockquote"><p>
+@@ -26,7 +25,7 @@
+ thousands separator in the locale.
+ </p><p>
+ Literally, a facet is strictly defined:
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Containing the following public data member:
+ </p><p>
+ <code class="code">static locale::id id;</code>
+@@ -48,14 +47,14 @@
+ </em></span>
+ </p></blockquote></div><p>
+ Provides an index for looking up specific facets.
+-</p></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.design"></a>Design</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.design"></a>Design</h4></div></div></div><p>
+ The major design challenge is fitting an object-orientated and
+ non-global locale design on top of POSIX and other relevant standards,
+ which include the Single Unix (nee X/Open.)
+ </p><p>
+ Because C and earlier versions of POSIX fall down so completely,
+ portability is an issue.
+-</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.impl"></a>Implementation</h4></div></div></div><div class="section" title="Interacting with &quot;C&quot; locales"><div class="titlepage"><div><div><h5 class="title"><a id="locale.impl.c"></a>Interacting with "C" locales</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="locale.impl.c"></a>Interacting with "C" locales</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <code class="code">`locale -a`</code> displays available locales.
+ </p><div class="blockquote"><blockquote class="blockquote"><pre class="programlisting">
+ af_ZA
+@@ -385,7 +384,7 @@
+ particular on the working of locale(""), which constructs the locale
+ object from the environment of the running program, that is, in
+ practice, the set of LC_ALL, LANG, etc. variable of the shell.
+-</p></div></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Locale initialization: at what point does _S_classic, _S_global
+ get initialized? Can named locales assume this initialization
+ has already taken place?
+@@ -403,29 +402,29 @@
+ What should non-required facet instantiations do? If the
+ generic implementation is provided, then how to end-users
+ provide specializations?
+- </p></li></ul></div></div><div class="bibliography" title="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="idp15718112"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269986483120"></a><p><span class="citetitle"><em class="citetitle">
+ The GNU C Library
+ </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="idp15722880"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></p></div><div class="biblioentry"><a id="idm269986478352"></a><p><span class="citetitle"><em class="citetitle">
+ Correspondence
+- </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="idp15725968"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269986475264"></a><p><span class="citetitle"><em class="citetitle">
+ ISO/IEC 14882:1998 Programming languages - C++
+- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15728256"></a><p><span class="citetitle"><em class="citetitle">
++ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269986472976"></a><p><span class="citetitle"><em class="citetitle">
+ ISO/IEC 9899:1999 Programming languages - C
+- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry" title="System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)"><a id="idp15730528"></a><p><span class="title"><em>
++ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269986470704"></a><p><span class="title"><em>
+ <a class="link" href="http://www.opengroup.org/austin/" target="_top">
+ System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ </a>
+ </em>. </span><span class="copyright">Copyright © 2008
+ The Open Group/The Institute of Electrical and Electronics
+ Engineers, Inc.
+- . </span></p></div><div class="biblioentry"><a id="idp15733760"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></p></div><div class="biblioentry"><a id="idm269986467472"></a><p><span class="citetitle"><em class="citetitle">
+ The C++ Programming Language, Special Edition
+ </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">
+ Addison Wesley
+- . </span></span></p></div><div class="biblioentry"><a id="idp15738384"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></span></p></div><div class="biblioentry"><a id="idm269986462848"></a><p><span class="citetitle"><em class="citetitle">
+ Standard C++ IOStreams and Locales
+ </em>. </span><span class="subtitle">
+ Advanced Programmer's Guide and Reference
+@@ -434,4 +433,4 @@
+ . </span></span></p></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 7. 
+ Strings
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Facets</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Facets</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/make.html
++++ b/src/libstdc++-v3/doc/html/manual/make.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Make"><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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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
+ <a class="link" href="http://gcc.gnu.org/install/" target="_top">GCC Installation
+ Instructions</a> first. Read <span class="emphasis"><em>all of them</em></span>.
+ <span class="emphasis"><em>Twice.</em></span>
+ </p><p>Then type: <span class="command"><strong>make</strong></span>, and congratulations, you've
+ started to build.
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="configure.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="setup.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Configure </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 3. Using</td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="configure.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="setup.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Configure </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 3. Using</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/memory.html
++++ b/src/libstdc++-v3/doc/html/manual/memory.html
+@@ -1,15 +1,14 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Utilities
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr></table><hr /></div><div class="section" title="Memory"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.memory"></a>Memory</h2></div></div></div><p>
++</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>
+ Memory contains three general areas. First, function and operator
+ calls via <code class="function">new</code> and <code class="function">delete</code>
+ operator or member function calls. Second, allocation via
+ <code class="classname">allocator</code>. And finally, smart pointer and
+ intelligent pointer abstractions.
+- </p><div class="section" title="Allocators"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.allocator"></a>Allocators</h3></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.allocator"></a>Allocators</h3></div></div></div><p>
+ Memory management for Standard Library entities is encapsulated in a
+ class template called <code class="classname">allocator</code>. The
+ <code class="classname">allocator</code> abstraction is used throughout the
+@@ -17,9 +16,9 @@
+ algorithms, and parts of iostreams. This class, and base classes of
+ it, are the superset of available free store (<span class="quote">“<span class="quote">heap</span>”</span>)
+ management classes.
+-</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.req"></a>Requirements</h4></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.req"></a>Requirements</h4></div></div></div><p>
+ The C++ standard only gives a few directives in this area:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ When you add elements to a container, and the container must
+ allocate more memory to hold them, the container makes the
+ request via its <span class="type">Allocator</span> template
+@@ -54,7 +53,7 @@
+ </p></li></ul></div><p>
+ Complete details can be found in the C++ standard, look in
+ <code class="constant">[20.4 Memory]</code>.
+- </p></div><div class="section" title="Design Issues"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.design_issues"></a>Design Issues</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.design_issues"></a>Design Issues</h4></div></div></div><p>
+ The easiest way of fulfilling the requirements is to call
+ <code class="function">operator new</code> each time a container needs
+ memory, and to call <code class="function">operator delete</code> each time
+@@ -93,7 +92,7 @@
+ or loading and unloading shared objects in memory. As such, using
+ caching allocators on systems that do not support
+ <code class="function">abi::__cxa_atexit</code> is not recommended.
+- </p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.impl"></a>Implementation</h4></div></div></div><div class="section" title="Interface Design"><div class="titlepage"><div><div><h5 class="title"><a id="idp13894640"></a>Interface Design</h5></div></div></div><p>
++ </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="idm269988298944"></a>Interface Design</h5></div></div></div><p>
+ The only allocator interface that
+ is supported is the standard C++ interface. As such, all STL
+ containers have been adjusted, and all external allocators have
+@@ -106,7 +105,7 @@
+ </p><p>
+ The base class that <code class="classname">allocator</code> is derived from
+ may not be user-configurable.
+-</p></div><div class="section" title="Selecting Default Allocation Policy"><div class="titlepage"><div><div><h5 class="title"><a id="idp13898192"></a>Selecting Default Allocation Policy</h5></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269988295392"></a>Selecting Default Allocation Policy</h5></div></div></div><p>
+ It's difficult to pick an allocation strategy that will provide
+ maximum utility, without excessively penalizing some behavior. In
+ fact, it's difficult just deciding which typical actions to measure
+@@ -143,7 +142,7 @@
+ The current default choice for
+ <code class="classname">allocator</code> is
+ <code class="classname">__gnu_cxx::new_allocator</code>.
+- </p></div><div class="section" title="Disabling Memory Caching"><div class="titlepage"><div><div><h5 class="title"><a id="idp13911488"></a>Disabling Memory Caching</h5></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269988282096"></a>Disabling Memory Caching</h5></div></div></div><p>
+ In use, <code class="classname">allocator</code> may allocate and
+ deallocate using implementation-specified strategies and
+ heuristics. Because of this, every call to an allocator object's
+@@ -179,7 +178,7 @@
+ environment, it likely means that you linked against objects
+ built against the older library (objects which might still using the
+ cached allocations...).
+- </p></div></div><div class="section" title="Using a Specific Allocator"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.using"></a>Using a Specific Allocator</h4></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.using"></a>Using a Specific Allocator</h4></div></div></div><p>
+ You can specify different memory management schemes on a
+ per-container basis, by overriding the default
+ <span class="type">Allocator</span> template parameter. For example, an easy
+@@ -190,7 +189,7 @@
+ Likewise, a debugging form of whichever allocator is currently in use:
+ </p><pre class="programlisting">
+ std::deque &lt;int, __gnu_cxx::debug_allocator&lt;std::allocator&lt;int&gt; &gt; &gt; debug_deque;
+- </pre></div><div class="section" title="Custom Allocators"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.custom"></a>Custom Allocators</h4></div></div></div><p>
++ </pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.custom"></a>Custom Allocators</h4></div></div></div><p>
+ Writing a portable C++ allocator would dictate that the interface
+ would look much like the one specified for
+ <code class="classname">allocator</code>. Additional member functions, but
+@@ -199,7 +198,7 @@
+ Probably the best place to start would be to copy one of the
+ extension allocators: say a simple one like
+ <code class="classname">new_allocator</code>.
+- </p></div><div class="section" title="Extension Allocators"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.ext"></a>Extension Allocators</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.ext"></a>Extension Allocators</h4></div></div></div><p>
+ Several other allocators are provided as part of this
+ implementation. The location of the extension allocators and their
+ names have changed, but in all cases, functionality is
+@@ -308,33 +307,33 @@
+ A high-performance allocator that uses a bit-map to keep track
+ of the used and unused memory locations. It has its own
+ documentation, found <a class="link" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator">here</a>.
+- </p></li></ol></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp13965488"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269988227968"></a><p><span class="citetitle"><em class="citetitle">
+ ISO/IEC 14882:1998 Programming languages - C++
+ </em>. </span>
+ isoc++_1998
+- <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry" title="The Standard Librarian: What Are Allocators Good For?"><a id="idp13967328"></a><p><span class="title"><em>
+- <a class="link" href="http://www.drdobbs.com/cpp/184403759" target="_top">
++ <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="idm269988226128"></a><p><span class="title"><em>
++ <a class="link" href="http://www.drdobbs.com/the-standard-librarian-what-are-allocato/184403759" target="_top">
+ The Standard Librarian: What Are Allocators Good For?
+ </a>
+ </em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
+ C/C++ Users Journal
+- . </span></span></p></div><div class="biblioentry" title="The Hoard Memory Allocator"><a id="idp13971056"></a><p><span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="idm269988222352"></a><p><span class="title"><em>
+ <a class="link" href="http://www.cs.umass.edu/~emery/hoard" target="_top">
+ The Hoard Memory Allocator
+ </a>
+- </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span></p></div><div class="biblioentry" title="Reconsidering Custom Memory Allocation"><a id="idp13973840"></a><p><span class="title"><em>
++ </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span></p></div><div class="biblioentry"><a id="idm269988219568"></a><p><span class="title"><em>
+ <a class="link" href="http://www.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf" target="_top">
+ Reconsidering Custom Memory Allocation
+ </a>
+- </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" title="Allocator Types"><a id="idp13980000"></a><p><span class="title"><em>
++ </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="idm269988213408"></a><p><span class="title"><em>
+ <a class="link" href="http://www.angelikalanger.com/Articles/C++Report/Allocators/Allocators.html" target="_top">
+ Allocator Types
+ </a>
+ </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">
+ C/C++ Users Journal
+- . </span></span></p></div><div class="biblioentry"><a id="idp13984736"></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">
++ . </span></span></p></div><div class="biblioentry"><a id="idm269988208672"></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">
+ Addison Wesley
+- . </span></span></p></div><div class="biblioentry"><a id="idp13989168"></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" title="auto_ptr"><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" title="Limitations"><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
++ . </span></span></p></div><div class="biblioentry"><a id="idm269988204240"></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
+ happen with misuse of the <code class="classname">auto_ptr</code> class
+ template (called <acronym class="acronym">AP</acronym> here) would take some
+ time. Suffice it to say that the use of <acronym class="acronym">AP</acronym>
+@@ -385,7 +384,7 @@
+ to die. AP is trivial to write, however, so you could write your
+ own <code class="code">auto_array_ptr</code> for that situation (in fact, this has
+ been done many times; check the mailing lists, Usenet, Boost, etc).
+- </p></div><div class="section" title="Use in Containers"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.using"></a>Use in Containers</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.using"></a>Use in Containers</h4></div></div></div><p>
+ </p><p>All of the <a class="link" href="containers.html" title="Chapter 9.  Containers">containers</a>
+ described in the standard library require their contained types
+ to have, among other things, a copy constructor like this:
+@@ -421,16 +420,16 @@
+ }
+ </pre><p>
+ Should you try this with the checks enabled, you will see an error.
+- </p></div></div><div class="section" title="shared_ptr"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.shared_ptr"></a>shared_ptr</h3></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.shared_ptr"></a>shared_ptr</h3></div></div></div><p>
+ The shared_ptr class template stores a pointer, usually obtained via new,
+ and implements shared ownership semantics.
+-</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.req"></a>Requirements</h4></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.req"></a>Requirements</h4></div></div></div><p>
+ </p><p>
+ The standard deliberately doesn't require a reference-counted
+ implementation, allowing other techniques such as a
+ circular-linked-list.
+ </p><p>
+- </p></div><div class="section" title="Design Issues"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.design_issues"></a>Design Issues</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.design_issues"></a>Design Issues</h4></div></div></div><p>
+ The <code class="classname">shared_ptr</code> code is kindly donated to GCC by the Boost
+ project and the original authors of the code. The basic design and
+ algorithms are from Boost, the notes below describe details specific to
+@@ -444,14 +443,14 @@
+ Derived classes override those functions to destroy resources in a context
+ where the correct dynamic type is known. This is an application of the
+ technique known as type erasure.
+- </p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.impl"></a>Implementation</h4></div></div></div><div class="section" title="Class Hierarchy"><div class="titlepage"><div><div><h5 class="title"><a id="idp15484560"></a>Class Hierarchy</h5></div></div></div><p>
++ </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="idm269986714912"></a>Class Hierarchy</h5></div></div></div><p>
+ A <code class="classname">shared_ptr&lt;T&gt;</code> contains a pointer of
+ type <span class="type">T*</span> and an object of type
+ <code class="classname">__shared_count</code>. The shared_count contains a
+ pointer of type <span class="type">_Sp_counted_base*</span> which points to the
+ object that maintains the reference-counts and destroys the managed
+ resource.
+- </p><div class="variablelist"><dl><dt><span class="term"><code class="classname">_Sp_counted_base&lt;Lp&gt;</code></span></dt><dd><p>
++ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="classname">_Sp_counted_base&lt;Lp&gt;</code></span></dt><dd><p>
+ The base of the hierarchy is parameterized on the lock policy (see below.)
+ _Sp_counted_base doesn't depend on the type of pointer being managed,
+ it only maintains the reference counts and calls virtual functions when
+@@ -491,9 +490,9 @@
+ aliasing constructor, make_shared &amp; allocate_shared. Additionally,
+ the constructors taking <code class="classname">auto_ptr</code> parameters are
+ deprecated in C++11 mode.
+- </p></div><div class="section" title="Thread Safety"><div class="titlepage"><div><div><h5 class="title"><a id="idp15507072"></a>Thread Safety</h5></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269986692400"></a>Thread Safety</h5></div></div></div><p>
+ The
+-<a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
++<a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
+ Safety</a> section of the Boost shared_ptr documentation says "shared_ptr
+ objects offer the same level of thread safety as built-in types."
+ The implementation must ensure that concurrent updates to separate shared_ptr
+@@ -536,7 +535,7 @@
+ shared_ptr in libstdc++ the compiler and library are fixed, which
+ makes things much simpler: we have an atomic CAS or we don't, see Lock
+ Policy below for details.
+-</p></div><div class="section" title="Selecting Lock Policy"><div class="titlepage"><div><div><h5 class="title"><a id="idp15514368"></a>Selecting Lock Policy</h5></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269986685104"></a>Selecting Lock Policy</h5></div></div></div><p>
+ </p><p>
+ There is a single <code class="classname">_Sp_counted_base</code> class,
+ which is a template parameterized on the enum
+@@ -577,7 +576,7 @@
+ <code class="filename">ext/atomicity.h</code>, which detect if the program
+ is multi-threaded. If only one thread of execution exists in
+ the program then less expensive non-atomic operations are used.
+- </p></div><div class="section" title="Related functions and classes"><div class="titlepage"><div><div><h5 class="title"><a id="idp15528992"></a>Related functions and classes</h5></div></div></div><div class="variablelist"><dl><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>,
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269986670480"></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>,
+ <code class="code">const_pointer_cast</code></span></dt><dd><p>
+ As noted in N2351, these functions can be implemented non-intrusively using
+ the alias constructor. However the aliasing constructor is only available
+@@ -610,13 +609,13 @@
+ As well as the extra constructors, this implementation also needs some
+ members of _Sp_counted_deleter to be protected where they could otherwise
+ be private.
+- </p></dd></dl></div></div></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.using"></a>Use</h4></div></div></div><div class="section" title="Examples"><div class="titlepage"><div><div><h5 class="title"><a id="idp15545344"></a>Examples</h5></div></div></div><p>
++ </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="idm269986654128"></a>Examples</h5></div></div></div><p>
+ Examples of use can be found in the testsuite, under
+ <code class="filename">testsuite/tr1/2_general_utilities/shared_ptr</code>,
+ <code class="filename">testsuite/20_util/shared_ptr</code>
+ and
+ <code class="filename">testsuite/20_util/weak_ptr</code>.
+- </p></div><div class="section" title="Unresolved Issues"><div class="titlepage"><div><div><h5 class="title"><a id="idp15548928"></a>Unresolved Issues</h5></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269986650544"></a>Unresolved Issues</h5></div></div></div><p>
+ The <span class="emphasis"><em><code class="classname">shared_ptr</code> atomic access</em></span>
+ clause in the C++11 standard is not implemented in GCC.
+ </p><p>
+@@ -652,33 +651,33 @@
+ </p><p>
+ tr1::_Sp_deleter could be a private member of tr1::__shared_count but it
+ would alter the ABI.
+- </p></div></div><div class="section" title="Acknowledgments"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.ack"></a>Acknowledgments</h4></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.ack"></a>Acknowledgments</h4></div></div></div><p>
+ The original authors of the Boost shared_ptr, which is really nice
+ code to work with, Peter Dimov in particular for his help and
+ invaluable advice on thread safety. Phillip Jordan and Paolo
+ Carlini for the lock policy implementation.
+- </p></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry" title="Improving shared_ptr for C++0x, Revision 2"><a id="idp15560160"></a><p><span class="title"><em>
++ </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="idm269986639184"></a><p><span class="title"><em>
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm" target="_top">
+ Improving shared_ptr for C++0x, Revision 2
+ </a>
+ </em>. </span><span class="subtitle">
+ N2351
+- . </span></p></div><div class="biblioentry" title="C++ Standard Library Active Issues List"><a id="idp15562448"></a><p><span class="title"><em>
++ . </span></p></div><div class="biblioentry"><a id="idm269986636896"></a><p><span class="title"><em>
+ <a class="link" href="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html" target="_top">
+ C++ Standard Library Active Issues List
+ </a>
+ </em>. </span><span class="subtitle">
+ N2456
+- . </span></p></div><div class="biblioentry" title="Working Draft, Standard for Programming Language C++"><a id="idp15564736"></a><p><span class="title"><em>
++ . </span></p></div><div class="biblioentry"><a id="idm269986634608"></a><p><span class="title"><em>
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf" target="_top">
+ Working Draft, Standard for Programming Language C++
+ </a>
+ </em>. </span><span class="subtitle">
+ N2461
+- . </span></p></div><div class="biblioentry" title="Boost C++ Libraries documentation, shared_ptr"><a id="idp15567040"></a><p><span class="title"><em>
++ . </span></p></div><div class="biblioentry"><a id="idm269986632304"></a><p><span class="title"><em>
+ <a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">
+ Boost C++ Libraries documentation, shared_ptr
+ </a>
+ </em>. </span><span class="subtitle">
+ N2461
+- . </span></p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Pairs </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Traits</td></tr></table></div></body></html>
++ . </span></p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Pairs </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Traits</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/mt_allocator.html
++++ b/src/libstdc++-v3/doc/html/manual/mt_allocator.html
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s07.html" title="Diagnostics" /><link rel="next" href="bk01pt03ch20s02.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="bk01pt03ch19s07.html">Prev</a> </td><th width="60%" align="center">Part III. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s07.html" title="Diagnostics" /><link rel="next" href="bk01pt03ch20s02.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="bk01pt03ch19s07.html">Prev</a> </td><th width="60%" align="center">Part III. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch20s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 20. The mt_allocator"><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="bk01pt03ch20s02.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch20s02.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch20s03.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch20s04.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s05.html">Multiple Thread Example</a></span></dt></dl></div><p>
+-</p><div class="section" title="Intro"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.intro"></a>Intro</h2></div></div></div><p>
++</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch20s02.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="bk01pt03ch20s02.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch20s02.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch20s03.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch20s04.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s05.html">Multiple Thread Example</a></span></dt></dl></div><p>
++</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>
+ The mt allocator [hereinafter referred to simply as "the allocator"]
+ is a fixed size (power of two) allocator that was initially
+ developed specifically to suit the needs of multi threaded
+@@ -20,4 +19,4 @@
+ </p><p>
+ The aim of this document is to describe - from an application point of
+ view - the "inner workings" of the allocator.
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s07.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Diagnostics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design Issues</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s07.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Diagnostics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design Issues</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/numerics.html
++++ b/src/libstdc++-v3/doc/html/manual/numerics.html
+@@ -1,15 +1,14 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
+ Numerics
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 12.  Numerics"><div class="titlepage"><div><div><h2 class="title"><a id="std.numerics"></a>Chapter 12. 
++ </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. 
+ Numerics
+- <a id="idp16179040" class="indexterm"></a>
+-</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" title="Complex"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.complex"></a>Complex</h2></div></div></div><p>
+- </p><div class="section" title="complex Processing"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.complex.processing"></a>complex Processing</h3></div></div></div><p>
++ <a id="idm269986025840" class="indexterm"></a>
++</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>
++ </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>
+ </p><p>Using <code class="code">complex&lt;&gt;</code> becomes even more comple- er, sorry,
+ <span class="emphasis"><em>complicated</em></span>, with the not-quite-gratuitously-incompatible
+ addition of complex types to the C language. David Tribble has
+@@ -27,4 +26,4 @@
+ </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 11. 
+ Algorithms
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Generalized Operations</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Generalized Operations</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/numerics_and_c.html
++++ b/src/libstdc++-v3/doc/html/manual/numerics_and_c.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Numerics
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="io.html">Next</a></td></tr></table><hr /></div><div class="section" title="Interacting with C"><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" title="Numerics vs. Arrays"><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
++</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
+ is that it is defined to be free of pointer aliasing, an assumption
+ that C89 is not allowed to make, and neither is C++98. C99 adds a new
+ keyword, <code class="code">restrict</code>, to apply to individual pointers. The
+@@ -18,7 +17,7 @@
+ speaking this is only one of the five template classes, and they are
+ designed to be familiar to people who have worked with the BLAS
+ libraries before.
+- </p></div><div class="section" title="C99"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.c.c99"></a>C99</h3></div></div></div><p>In addition to the other topics on this page, we'll note here some
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.c.c99"></a>C99</h3></div></div></div><p>In addition to the other topics on this page, we'll note here some
+ of the C99 features that appear in libstdc++.
+ </p><p>The C99 features depend on the <code class="code">--enable-c99</code> configure flag.
+ This flag is already on by default, but it can be disabled by the
+@@ -34,4 +33,4 @@
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="numerics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="io.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Generalized Operations </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 13. 
+ Input and Output
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/pairs.html
++++ b/src/libstdc++-v3/doc/html/manual/pairs.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Utilities
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr></table><hr /></div><div class="section" title="Pairs"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.pairs"></a>Pairs</h2></div></div></div><p>The <code class="code">pair&lt;T1,T2&gt;</code> is a simple and handy way to
++</th><td width="20%" align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.pairs"></a>Pairs</h2></div></div></div><p>The <code class="code">pair&lt;T1,T2&gt;</code> is a simple and handy way to
+ carry around a pair of objects. One is of type T1, and another of
+ type T2; they may be the same type, but you don't get anything
+ extra if they are. The two members can be accessed directly, as
+@@ -41,4 +40,4 @@
+ </pre></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 6. 
+ Utilities
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Memory</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Memory</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/parallel_mode.html
++++ b/src/libstdc++-v3/doc/html/manual/parallel_mode.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s04.html" title="Design" /><link rel="next" href="bk01pt03ch18s02.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="bk01pt03ch17s04.html">Prev</a> </td><th width="60%" align="center">Part III. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s04.html" title="Design" /><link rel="next" href="bk01pt03ch18s02.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="bk01pt03ch17s04.html">Prev</a> </td><th width="60%" align="center">Part III. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 18. Parallel Mode"><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="bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s05.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
++</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s02.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="bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s05.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
+ implementation of many algorithms the C++ Standard Library.
+ </p><p>
+ Several of the standard algorithms, for instance
+@@ -11,14 +10,14 @@
+ annotations. These parallel mode constructs and can be invoked by
+ explicit source declaration or by compiling existing sources with a
+ specific compiler flag.
+-</p><div class="section" title="Intro"><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
+-<code class="filename">numeric</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" 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
+-<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" 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" title="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="idp16890112"></a><p><span class="citetitle"><em class="citetitle">
++</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
++<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
++<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="idm269985317808"></a><p><span class="citetitle"><em class="citetitle">
+ Parallelization of Bulk Operations for STL Dictionaries
+ </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">
+ Workshop on Highly Parallel Processing on a Chip (HPPC) 2007. (LNCS)
+- . </span></span></p></div><div class="biblioentry"><a id="idp16895184"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></span></p></div><div class="biblioentry"><a id="idm269985312736"></a><p><span class="citetitle"><em class="citetitle">
+ The Multi-Core Standard Template Library
+ </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">
+ Euro-Par 2007: Parallel Processing. (LNCS 4641)
+- . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch18s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Semantics</td></tr></table></div></body></html>
++ . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch18s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Semantics</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html
++++ b/src/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Testing"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.test"></a>Testing</h2></div></div></div><div class="section" title="Regression"><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.
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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.
+ For a given container type in this library, the test creates
+ an object of the container type and an object of the
+ corresponding standard type (e.g., <code class="classname">std::set</code>). It
+@@ -23,9 +22,9 @@
+ configured to use this allocator.</p><p>For granularity, the test is split into the
+ several sources, each checking only some containers.</p><p>For more details, consult the files in
+ <code class="filename">testsuite/ext/pb_ds/regression</code>.
+- </p></div><div class="section" title="Performance"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.test.performance"></a>Performance</h3></div></div></div><div class="section" title="Hash-Based"><div class="titlepage"><div><div><h4 class="title"><a id="performance.hash"></a>Hash-Based</h4></div></div></div><p></p><div class="section" title="Text find"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.text_find"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.test.performance"></a>Performance</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="performance.hash"></a>Hash-Based</h4></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.text_find"></a>
+ Text <code class="function">find</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="hash.text_find.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.text_find.info"></a>
+ Description
+ </h6></div></div></div><p>
+ This test inserts a number of values with keys from an
+@@ -41,7 +40,7 @@
+ <code class="filename">filethirty_years_among_the_dead_preproc.txt</code>
+ </p><p>The test checks the effect of different range-hashing
+ functions, trigger policies, and cache-hashing policies.
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="hash.text_find.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.text_find.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for the native
+ and collision-chaining hash types the the function
+@@ -144,7 +143,7 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="hash.text_find.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.text_find.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this setting, the range-hashing scheme affects performance
+ more than other policies. As the results show, containers using
+@@ -159,9 +158,9 @@
+ library's implementation. (Unfortunately, it was not possible to run
+ the tests with <code class="classname">std::tr1::unordered_map</code> 's
+ <code class="classname">cache_hash_code = true</code> , as it appeared to
+- malfuntion.)</p></div></div><div class="section" title="Integer find"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.int_find"></a>
++ malfuntion.)</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.int_find"></a>
+ Integer <code class="function">find</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_find.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_find.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with uniform
+ integer keys into a container, then performs a series of finds
+@@ -172,7 +171,7 @@
+ <code class="filename">performance/ext/pb_ds/random_int_find_timing.cc</code>
+ </p><p>The test checks the effect of different underlying
+ hash-tables,
+- range-hashing functions, and trigger policies.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_find.results"></a>
++ range-hashing functions, and trigger policies.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_find.results"></a>
+ Results
+ </h6></div></div></div><p>
+ There are two sets of results for this type, one for
+@@ -345,7 +344,7 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_find.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_find.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this setting, the choice of underlying hash-table affects
+ performance most, then the range-hashing scheme and, only finally,
+@@ -361,9 +360,9 @@
+ above graphics should be noted that
+ <code class="classname">std::tr1::unordered_map</code> are hard-wired
+ currently to mod-based schemes.
+- </p></div></div><div class="section" title="Integer Subscript find"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.int_subscript_find"></a>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.int_subscript_find"></a>
+ Integer Subscript <code class="function">find</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_find.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_find.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with uniform
+ integer keys into a container, then performs a series of finds
+@@ -373,7 +372,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/random_int_subscript_find_timing.cc</code>
+ </p><p>The test checks the effect of different underlying
+- hash-tables, range-hashing functions, and trigger policies.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_find.results"></a>
++ hash-tables, range-hashing functions, and trigger policies.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_find.results"></a>
+ Results
+ </h6></div></div></div><p>
+ There are two sets of results for this type, one for
+@@ -545,12 +544,12 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_find.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_find.observations"></a>
+ Observations
+ </h6></div></div></div><p>This test shows similar results to Hash-Based
+- Integer <code class="classname">find</code> Find Timing test.</p></div></div><div class="section" title="Integer Subscript insert"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.int_subscript_insert"></a>
++ Integer <code class="classname">find</code> Find Timing test.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.int_subscript_insert"></a>
+ Integer Subscript <code class="function">insert</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_insert.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_insert.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with uniform i.i.d.
+ integer keys into a container, using
+@@ -560,7 +559,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/random_int_subscript_insert_timing.cc</code>
+ </p><p>The test checks the effect of different underlying
+- hash-tables.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_insert.results"></a>
++ hash-tables.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_insert.results"></a>
+ Results
+ </h6></div></div></div><p>
+ There are two sets of results for this type, one for
+@@ -732,7 +731,7 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_insert.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_insert.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this setting, as in Hash-Based Text
+ <code class="function">find</code> Find Timing test and Hash-Based
+@@ -761,9 +760,9 @@
+ <code class="function">find</code> Find Timing Test and Hash-Based
+ Integer <code class="function">find</code> Find Timing Test.
+ Unsurprisingly, however, containers with lower α<sub>max</sub> perform worse in this case,
+- since more re-hashes are performed.</p></div></div><div class="section" title="Integer find with Skewed-Distribution"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.zlob_int_find"></a>
++ since more re-hashes are performed.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.zlob_int_find"></a>
+ Integer <code class="function">find</code> with Skewed-Distribution
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="hash.zlob_int_find.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.zlob_int_find.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with a markedly
+ non-uniform integer keys into a container, then performs
+@@ -774,7 +773,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/hash_zlob_random_int_find_timing.cc</code>
+ </p><p>The test checks the effect of different range-hashing
+- functions and trigger policies.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="hash.zlob_int_find.results"></a>
++ functions and trigger policies.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.zlob_int_find.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for the native, collision-chaining, and general-probing hash types.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_hash_zlob_int_find.png" align="middle" /></div></div><p>
+@@ -857,7 +856,7 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="hash.zlob_int_find.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.zlob_int_find.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this setting, the distribution of keys is so skewed that
+ the underlying hash-table type affects performance marginally.
+@@ -884,9 +883,9 @@
+ performance is bad, a χ<sup>2</sup> test can be used
+ to check how to transform it into a more uniform
+ distribution.</p><p>For this reason, this library's default range-hashing
+- function is mask-based.</p></div></div><div class="section" title="Erase Memory Use"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.erase_mem"></a>
++ function is mask-based.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.erase_mem"></a>
+ Erase Memory Use
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="hash.erase_mem.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.erase_mem.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of uniform integer keys
+ into a container, then erases all keys except one. It measures
+@@ -894,7 +893,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc</code>
+ </p><p>The test checks how containers adjust internally as their
+- logical size decreases.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="hash.erase_mem.results"></a>
++ logical size decreases.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.erase_mem.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for the native, collision-chaining, and general-probing hash types.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_hash_int_erase_mem.png" align="middle" /></div></div><p>
+@@ -977,7 +976,7 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="hash.erase_mem.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.erase_mem.observations"></a>
+ Observations
+ </h6></div></div></div><p>The standard's hash-based containers act very differently than trees in
+ this respect. When erasing numerous keys from an standard
+@@ -985,9 +984,9 @@
+ depending on whether the container is tree-based or hash-based.
+ This is a fundamental consequence of the standard's interface for
+ associative containers, and it is not due to a specific
+- implementation.</p></div></div></div><div class="section" title="Branch-Based"><div class="titlepage"><div><div><h4 class="title"><a id="performance.branch"></a>Branch-Based</h4></div></div></div><p></p><div class="section" title="Text insert"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.text_insert"></a>
++ implementation.</p></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="performance.branch"></a>Branch-Based</h4></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.text_insert"></a>
+ Text <code class="function">insert</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_insert.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_insert.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an arbitrary
+ text ([ wickland96thirty ]) into a container
+@@ -997,7 +996,7 @@
+ data structures.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/tree_text_insert_timing.cc</code>
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_insert.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_insert.results"></a>
+ Results
+ </h6></div></div></div><p>The three graphics below show the results for the native
+ tree and this library's node-based trees, the native tree and
+@@ -1078,7 +1077,7 @@
+ <code class="classname">Node_update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_insert.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_insert.observations"></a>
+ Observations
+ </h6></div></div></div><p>Observing the first graphic implies that for this setting, a splay tree
+ (<code class="classname">tree</code> with <code class="classname">Tag
+@@ -1098,9 +1097,9 @@
+ encountered, a new "hash-table" is built A large fan-out PATRICIA
+ trie, however, doe does well in look-ups (see Branch-Based
+ Text <code class="function">find</code> Find Timing Test). It may be
+- beneficial in semi-static settings.</p></div></div><div class="section" title="Text find"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.text_find"></a>
++ beneficial in semi-static settings.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.text_find"></a>
+ Text <code class="function">find</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_find.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_find.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([wickland96thirty]) into
+@@ -1111,7 +1110,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/text_find_timing.cc</code>
+ </p><p>The test checks the effect of different underlying
+- data structures.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_find.results"></a>
++ data structures.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_find.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+@@ -1170,7 +1169,7 @@
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_find.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_find.observations"></a>
+ Observations
+ </h6></div></div></div><p>For this setting, a splay tree (<code class="classname">tree</code>
+ with <code class="classname">Tag
+@@ -1203,9 +1202,9 @@
+ by a sub-trie. A large-fan-out PATRICIA trie does not do well on
+ modifications (see Tree-Based and Trie-Based
+ Text Insert Timing Test). Therefore, it is possibly beneficial in
+- semi-static settings.</p></div></div><div class="section" title="Text find with Locality-of-Reference"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.text_lor_find"></a>
++ semi-static settings.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.text_lor_find"></a>
+ Text <code class="function">find</code> with Locality-of-Reference
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_lor_find.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_lor_find.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+@@ -1219,7 +1218,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/tree_text_lor_find_timing.cc</code>
+ </p><p>The test checks the effect of different underlying
+- data structures in a locality-of-reference setting.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_lor_find.results"></a>
++ data structures in a locality-of-reference setting.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_lor_find.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+@@ -1278,7 +1277,7 @@
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_lor_find.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_lor_find.observations"></a>
+ Observations
+ </h6></div></div></div><p>For this setting, an ordered-vector tree
+ (<code class="classname">tree</code> with <code class="classname">Tag</code>
+@@ -1288,9 +1287,9 @@
+ tree all share approximately the same performance.</p><p>A splay tree (<code class="classname">tree</code>
+ with <code class="classname">Tag</code> = <code class="classname">splay_tree_tag</code>) does
+ much better, since each (successful) find "bubbles" the
+- corresponding node to the root of the tree.</p></div></div><div class="section" title="split and join"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.split_join"></a>
++ corresponding node to the root of the tree.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.split_join"></a>
+ <code class="function">split</code> and <code class="function">join</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="branch.split_join.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.split_join.info"></a>
+ Description
+ </h6></div></div></div><p>This test a container, inserts into a number of values, splits
+ the container at the median, and joins the two containers. (If the
+@@ -1307,7 +1306,7 @@
+ implication, this test checks the most efficient way to erase a
+ sub-sequence from a tree-like-based container, since this can
+ always be performed by a small sequence of splits and joins.
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="branch.split_join.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.split_join.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+@@ -1366,7 +1365,7 @@
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="branch.split_join.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.split_join.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this test, the native red-black trees must be split and
+ joined externally, through a sequence of <code class="function">erase</code> and
+@@ -1393,9 +1392,9 @@
+ via <code class="classname">container_traits</code>).</p><p>It is important to note that <code class="function">split</code> and
+ <code class="function">join</code> are not esoteric methods - they are the most
+ efficient means of erasing a contiguous range of values from a
+- tree based container.</p></div></div><div class="section" title="Order-Statistics"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.order_statistics"></a>
++ tree based container.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.order_statistics"></a>
+ Order-Statistics
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="branch.order_statistics.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.order_statistics.info"></a>
+ Description
+ </h6></div></div></div><p>This test creates a container, inserts random integers into the
+ the container, and then checks the order-statistics of the
+@@ -1410,7 +1409,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/tree_order_statistics_timing.cc</code>
+ </p><p>The test checks the performance difference of policies based
+- on node-invariant as opposed to a external functions.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="branch.order_statistics.results"></a>
++ on node-invariant as opposed to a external functions.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.order_statistics.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+@@ -1445,7 +1444,7 @@
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">tree_order_statistics_node_update</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="branch.order_statistics.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.order_statistics.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this test, the native red-black tree can support
+ order-statistics queries only externally, by performing a
+@@ -1462,9 +1461,9 @@
+ tree (<code class="classname">tree</code>
+ with <code class="classname">Tag =</code> <code class="classname">rb_tree_tag</code> ) is
+ logarithmic in the number of elements. Consequently, the splay
+- tree has worse performance than the red-black tree.</p></div></div></div><div class="section" title="Multimap"><div class="titlepage"><div><div><h4 class="title"><a id="performance.multimap"></a>Multimap</h4></div></div></div><p></p><div class="section" title="Text find with Small Secondary-to-Primary Key Ratios"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_find_small"></a>
++ tree has worse performance than the red-black tree.</p></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="performance.multimap"></a>Multimap</h4></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_find_small"></a>
+ Text <code class="function">find</code> with Small Secondary-to-Primary Key Ratios
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_small.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_small.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+@@ -1483,7 +1482,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/multimap_text_find_timing_small.cc</code>
+ </p><p>The test checks the find-time scalability of different
+- "multimap" designs.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_small.results"></a>
++ "multimap" designs.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_small.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+@@ -1631,12 +1630,12 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_small.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_small.observations"></a>
+ Observations
+ </h6></div></div></div><p>See Observations::Mapping-Semantics
+- Considerations.</p></div></div><div class="section" title="Text find with Large Secondary-to-Primary Key Ratios"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_find_large"></a>
++ Considerations.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_find_large"></a>
+ Text <code class="function">find</code> with Large Secondary-to-Primary Key Ratios
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_large.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_large.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+@@ -1654,7 +1653,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/multimap_text_find_timing_large.cc</code>
+ </p><p>The test checks the find-time scalability of different
+- "multimap" designs.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_large.results"></a>
++ "multimap" designs.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_large.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+@@ -1802,13 +1801,13 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_large.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_large.observations"></a>
+ Observations
+ </h6></div></div></div><p>See Observations::Mapping-Semantics
+- Considerations.</p></div></div><div class="section" title="Text insert with Small Secondary-to-Primary Key Ratios"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_small"></a>
++ Considerations.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_small"></a>
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_small.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_small.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+@@ -1828,7 +1827,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/multimap_text_insert_timing_small.cc</code>
+ </p><p>The test checks the insert-time scalability of different
+- "multimap" designs.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_small.results"></a>
++ "multimap" designs.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_small.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+@@ -1976,13 +1975,13 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_small.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_small.observations"></a>
+ Observations
+ </h6></div></div></div><p>See Observations::Mapping-Semantics
+- Considerations.</p></div></div><div class="section" title="Text insert with Small Secondary-to-Primary Key Ratios"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_large"></a>
++ Considerations.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_large"></a>
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_large.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_large.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+@@ -2002,7 +2001,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/multimap_text_insert_timing_large.cc</code>
+ </p><p>The test checks the insert-time scalability of different
+- "multimap" designs.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_large.results"></a>
++ "multimap" designs.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_large.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+@@ -2150,13 +2149,13 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_large.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_large.observations"></a>
+ Observations
+ </h6></div></div></div><p>See Observations::Mapping-Semantics
+- Considerations.</p></div></div><div class="section" title="Text insert with Small Secondary-to-Primary Key Ratios Memory Use"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_mem_small"></a>
++ Considerations.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_mem_small"></a>
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios Memory Use
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_small.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_small.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+@@ -2171,7 +2170,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/multimap_text_insert_mem_usage_small.cc</code>
+ </p><p>The test checks the memory scalability of different
+- "multimap" designs.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_small.results"></a>
++ "multimap" designs.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_small.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+@@ -2319,13 +2318,13 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_small.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_small.observations"></a>
+ Observations
+ </h6></div></div></div><p>See Observations::Mapping-Semantics
+- Considerations.</p></div></div><div class="section" title="Text insert with Small Secondary-to-Primary Key Ratios Memory Use"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_mem_large"></a>
++ Considerations.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_mem_large"></a>
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios Memory Use
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_large.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_large.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+@@ -2340,7 +2339,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/multimap_text_insert_mem_usage_large.cc</code>
+ </p><p>The test checks the memory scalability of different
+- "multimap" designs.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_large.results"></a>
++ "multimap" designs.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_large.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+@@ -2488,12 +2487,12 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_large.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_large.observations"></a>
+ Observations
+ </h6></div></div></div><p>See Observations::Mapping-Semantics
+- Considerations.</p></div></div></div><div class="section" title="Priority Queue"><div class="titlepage"><div><div><h4 class="title"><a id="performance.priority_queue"></a>Priority Queue</h4></div></div></div><div class="section" title="Text push"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_push"></a>
++ Considerations.</p></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="performance.priority_queue"></a>Priority Queue</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_push"></a>
+ Text <code class="function">push</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+@@ -2504,7 +2503,7 @@
+ <code class="filename">performance/ext/pb_ds/priority_queue_text_push_timing.cc</code>
+ </p><p>The test checks the effect of different underlying data
+ structures.
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push.results"></a>
+ Results
+ </h6></div></div></div><p>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+@@ -2609,7 +2608,7 @@
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push.observations"></a>
+ Observations
+ </h6></div></div></div><p>Pairing heaps (<code class="classname">priority_queue</code> with
+ <code class="classname">Tag</code> = <code class="classname">pairing_heap_tag</code>)
+@@ -2627,9 +2626,9 @@
+ operation, and the deque implementation is possibly hampered by
+ its need to manipulate a relatively-complex type (deques
+ support a O(1) <code class="function">push_front</code>, even though it is
+- not used by <code class="classname">std::priority_queue</code>.)</p></div></div><div class="section" title="Text push and pop"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_push_pop"></a>
++ not used by <code class="classname">std::priority_queue</code>.)</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_push_pop"></a>
+ Text <code class="function">push</code> and <code class="function">pop</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push_pop.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push_pop.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+@@ -2640,7 +2639,7 @@
+ <code class="filename">performance/ext/pb_ds/priority_queue_text_push_pop_timing.cc</code>
+ </p><p>The test checks the effect of different underlying data
+ structures.
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push_pop.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push_pop.results"></a>
+ Results
+ </h6></div></div></div><p>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+@@ -2737,7 +2736,7 @@
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push_pop.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push_pop.observations"></a>
+ Observations
+ </h6></div></div></div><p>These results are very similar to Priority Queue Text
+ <code class="function">push</code> Timing Test. As stated there, pairing heaps
+@@ -2757,9 +2756,9 @@
+ of <code class="function">push</code> operations, pairing heaps are better
+ in this case. See Priority Queue Random
+ Integer <code class="function">push</code> and <code class="function">pop</code>
+- Timing Test for a case which is different.</p></div></div><div class="section" title="Integer push"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.int_push"></a>
++ Timing Test for a case which is different.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.int_push"></a>
+ Integer <code class="function">push</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with integer keys
+ into a container using <code class="function">push</code>. It
+@@ -2769,7 +2768,7 @@
+ <code class="filename">performance/ext/pb_ds/priority_queue_random_int_push_timing.cc</code>
+ </p><p>The test checks the effect of different underlying data
+ structures.
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push.results"></a>
+ Results
+ </h6></div></div></div><p>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+@@ -2866,7 +2865,7 @@
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">binary_heap_tag</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push.observations"></a>
+ Observations
+ </h6></div></div></div><p>Binary heaps are the most suited for sequences of
+ <code class="function">push</code> and <code class="function">pop</code> operations of primitive types
+@@ -2875,9 +2874,9 @@
+ such types in arrays, they outperform even pairing heaps. (See
+ Priority
+ Queue Text <code class="function">push</code> Timing Test for the case of
+- non-primitive types.)</p></div></div><div class="section" title="Integer push"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.int_push_pop"></a>
++ non-primitive types.)</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.int_push_pop"></a>
+ Integer <code class="function">push</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push_pop.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push_pop.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with integer keys
+ into a container using <code class="function">push</code> , then removes them
+@@ -2888,7 +2887,7 @@
+ <code class="filename">performance/ext/pb_ds/priority_queue_random_int_push_pop_timing.cc</code>
+ </p><p>The test checks the effect of different underlying data
+ structures.
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push_pop.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push_pop.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+@@ -2953,7 +2952,7 @@
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push_pop.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push_pop.observations"></a>
+ Observations
+ </h6></div></div></div><p>Binary heaps are the most suited for sequences of
+ <code class="function">push</code> and <code class="function">pop</code> operations of primitive types
+@@ -2975,9 +2974,9 @@
+ the number of
+ <code class="function">pop</code> operations is at most that of <code class="function">push</code>
+ operations, the test here is the "best" for the standard's
+- priority queue.</p></li></ol></div></div></div><div class="section" title="Text pop Memory Use"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_pop"></a>
++ priority queue.</p></li></ol></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_pop"></a>
+ Text <code class="function">pop</code> Memory Use
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_pop.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_pop.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+@@ -2988,7 +2987,7 @@
+ <code class="filename">performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc</code>
+ </p><p>The test checks the effect of different underlying data
+ structures.
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_pop.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_pop.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+@@ -3053,7 +3052,7 @@
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_pop.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_pop.observations"></a>
+ Observations
+ </h6></div></div></div><p>The priority queue implementations (excluding the standard's) use
+ memory proportionally to the number of values they hold:
+@@ -3066,9 +3065,9 @@
+ impede performance compared to the standard's priority
+ queues.</p><p>See Hash-Based Erase
+ Memory Use Test for a similar phenomenon regarding priority
+- queues.</p></div></div><div class="section" title="Text join"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_join"></a>
++ queues.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_join"></a>
+ Text <code class="function">join</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_join.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_join.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+@@ -3081,7 +3080,7 @@
+ <code class="filename">performance/ext/pb_ds/priority_queue_text_join_timing.cc</code>
+ </p><p>The test checks the effect of different underlying data
+ structures.
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_join.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_join.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+@@ -3146,7 +3145,7 @@
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_join.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_join.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this test the node-based heaps perform <code class="function">join</code> in
+ either logarithmic or constant time. The binary heap requires
+@@ -3158,9 +3157,9 @@
+ and <code class="function">size()</code> (since they are enough to expose
+ the underlying array), but this is impossible for
+ a <code class="classname">std::deque</code>-based standard priority queue.
+- Without heapify, the cost is super-linear.</p></div></div><div class="section" title="Text modify Up"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_modify_up"></a>
++ Without heapify, the cost is super-linear.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_modify_up"></a>
+ Text <code class="function">modify</code> Up
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_up.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_up.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+@@ -3178,7 +3177,7 @@
+ arbitrary value larger (in the sense of the priority queue's
+ comparison functor) corresponds to decrease-key in standard graph
+ algorithms [clrs2001].
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_up.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_up.results"></a>
+ Results
+ </h6></div></div></div><p>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+@@ -3267,7 +3266,7 @@
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_up.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_up.observations"></a>
+ Observations
+ </h6></div></div></div><p>As noted above, increasing an arbitrary value (in the sense of
+ the priority queue's comparison functor) is very common in
+@@ -3295,9 +3294,9 @@
+ finding the appropriate value, then use the range-type iterator
+ for the <code class="function">modify</code> operation.</p><p>The explanation for the standard's priority queues' performance
+ is similar to that in Priority Queue Text
+- <code class="function">join</code> Timing Test.</p></div></div><div class="section" title="Text modify Down"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_modify_down"></a>
++ <code class="function">join</code> Timing Test.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_modify_down"></a>
+ Text <code class="function">modify</code> Down
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_down.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_down.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+@@ -3311,7 +3310,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/priority_queue_text_modify_down_timing.cc</code>
+ </p><p>The main purpose of this test is to contrast Priority Queue
+- Text <code class="classname">modify</code> Up Timing Test.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_down.results"></a>
++ Text <code class="classname">modify</code> Up Timing Test.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_down.results"></a>
+ Results
+ </h6></div></div></div><p>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+@@ -3400,7 +3399,7 @@
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_down.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_down.observations"></a>
+ Observations
+ </h6></div></div></div><p>Most points in these results are similar to Priority Queue
+ Text <code class="function">modify</code> Up Timing Test.</p><p>It is interesting to note, however, that as opposed to that
+@@ -3415,7 +3414,7 @@
+ (in the sense of the priority queue's comparison functor), and
+ so Priority Queue
+ Text <code class="classname">modify</code> Up Timing Test - is more interesting
+- than this test.</p></div></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.test.performance.observations"></a>Observations</h4></div></div></div><div class="section" title="Associative"><div class="titlepage"><div><div><h5 class="title"><a id="observations.associative"></a>Associative</h5></div></div></div><div class="section" title="Underlying Data-Structure Families"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.underlying"></a>
++ than this test.</p></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.test.performance.observations"></a>Observations</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="observations.associative"></a>Associative</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.underlying"></a>
+ Underlying Data-Structure Families
+ </h6></div></div></div><p>In general, hash-based containers have better timing performance
+ than containers based on different underlying-data structures. The
+@@ -3424,7 +3423,7 @@
+ order-preservation, or the ability to utilize node invariants. If
+ memory-use is the major factor, an ordered-vector tree gives
+ optimal results (albeit with high modificiation costs), and a
+- list-based container gives reasonable results.</p></div><div class="section" title="Hash-Based Containers"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.hash"></a>
++ list-based container gives reasonable results.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.hash"></a>
+ Hash-Based Containers
+ </h6></div></div></div><p>Hash-based containers are typically either collision
+ chaining or probing. Collision-chaining
+@@ -3439,7 +3438,7 @@
+ useful also in multithreaded applications where each thread
+ manipulates a hash-based container: in the standard, allocators have
+ class-wise semantics (see [meyers96more] - Item 10); a
+- probing container might incur less contention in this case.</p></div><div class="section" title="Hash Policies"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.hash_policies"></a>
++ probing container might incur less contention in this case.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.hash_policies"></a>
+ Hash Policies
+ </h6></div></div></div><p>In hash-based containers, the range-hashing scheme seems to
+ affect performance more than other considerations. In most
+@@ -3458,7 +3457,7 @@
+ function.</p><p>An orthogonal consideration is the trigger policy. This
+ presents difficult tradeoffs. E.g., different load
+ factors in a load-check trigger policy yield a
+- space/amortized-cost tradeoff.</p></div><div class="section" title="Branch-Based Containers"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.branch"></a>
++ space/amortized-cost tradeoff.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.branch"></a>
+ Branch-Based Containers
+ </h6></div></div></div><p>In general, there are several families of tree-based
+ underlying data structures: balanced node-based trees
+@@ -3505,7 +3504,7 @@
+ maintaining such trees is higher than that of balanced trees.
+ Moderate-fan-out trees might be useful for sequences where each
+ element has a limited number of choices, e.g., DNA
+- strings.</p></div><div class="section" title="Mapping-Semantics"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.mapping_semantics"></a>
++ strings.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.mapping_semantics"></a>
+ Mapping-Semantics
+ </h6></div></div></div><p>Different mapping semantics were discussed in the introduction and design sections.Here
+ the focus will be on the case where a keys can be composed into
+@@ -3585,7 +3584,7 @@
+ but with very high constants; using 1 with a tree-based
+ container, the cost is Θ(nlog(mn)). Using 2, 3,
+ and 4, the expected cost is Θ(n), but typically
+- with far lower costs than 1. 5 is similar to 1.</p></div></div><div class="section" title="Priority_Queue"><div class="titlepage"><div><div><h5 class="title"><a id="observations.priority_queue"></a>Priority_Queue</h5></div></div></div><div class="section" title="Complexity"><div class="titlepage"><div><div><h6 class="title"><a id="observations.priority_queue.complexity"></a>Complexity</h6></div></div></div><p>The following table shows the complexities of the different
++ with far lower costs than 1. 5 is similar to 1.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="observations.priority_queue"></a>Priority_Queue</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="observations.priority_queue.complexity"></a>Complexity</h6></div></div></div><p>The following table shows the complexities of the different
+ underlying data structures in terms of orders of growth. It is
+ interesting to note that this table implies something about the
+ constants of the operations as well (see Amortized <code class="function">push</code>
+@@ -3709,7 +3708,7 @@
+ of the priority queue's comparison functor), then the amortized
+ time is O(1), but if II) it decreases it, then the
+ amortized time is the same as the worst case time. Note that
+- for most algorithms, I) is important and II) is not.</p></div><div class="section" title="Amortized push and pop operations"><div class="titlepage"><div><div><h6 class="title"><a id="observations.priority_queue.amortized_ops"></a>
++ for most algorithms, I) is important and II) is not.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="observations.priority_queue.amortized_ops"></a>
+ Amortized <code class="function">push</code>
+ and <code class="function">pop</code> operations
+ </h6></div></div></div><p>In many cases, a priority queue is needed primarily for
+@@ -3739,7 +3738,7 @@
+ Queue Random Integer <code class="function">push</code> Timing Test and
+ Priority
+ Queue Random Integer <code class="function">push</code> and <code class="function">pop</code> Timing
+- Test.</p></li></ol></div></div><div class="section" title="Graph Algorithms"><div class="titlepage"><div><div><h6 class="title"><a id="observations.priority_queue.graphs"></a>
++ Test.</p></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="observations.priority_queue.graphs"></a>
+ Graph Algorithms
+ </h6></div></div></div><p>In some graph algorithms, a decrease-key operation is
+ required [clrs2001];
+@@ -3759,4 +3758,4 @@
+ as well. It is difficult to find an a-priori characterization of
+ graphs in which the actual number of <code class="function">modify</code>
+ operations will dwarf the number of <code class="function">push</code> and
+- <code class="function">pop</code> operations.</p></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures_design.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures_ack.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Acknowledgments</td></tr></table></div></body></html>
++ <code class="function">pop</code> operations.</p></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures_design.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures_ack.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Acknowledgments</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures.html
++++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch21s02.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="bk01pt03ch21s02.html">Prev</a> </td><th width="60%" align="center">Part III. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch21s02.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="bk01pt03ch21s02.html">Prev</a> </td><th width="60%" align="center">Part III. 
+ Extensions
+
+-</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" title="Chapter 22. Policy-Based Data Structures"><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">
++</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">
+ Configuring via Template Parameters
+ </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits">
+ Querying Container Attributes
+@@ -65,7 +64,7 @@
+ Text <code class="function">modify</code> Up
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_modify_down">
+ Text <code class="function">modify</code> Down
+- </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.performance.observations">Observations</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.priority_queue">Priority_Queue</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_ack.html">Acknowledgments</a></span></dt><dt><span class="bibliography"><a href="policy_data_structures.html#pbds.biblio">Bibliography</a></span></dt></dl></div><div class="section" title="Intro"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.intro"></a>Intro</h2></div></div></div><p>
++ </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.performance.observations">Observations</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.priority_queue">Priority_Queue</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_ack.html">Acknowledgments</a></span></dt><dt><span class="bibliography"><a href="policy_data_structures.html#pbds.biblio">Bibliography</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.intro"></a>Intro</h2></div></div></div><p>
+ This is a library of policy-based elementary data structures:
+ associative containers and priority queues. It is designed for
+ high-performance, flexibility, semantic safety, and conformance to
+@@ -73,7 +72,7 @@
+ <code class="literal">std::tr1</code> (except for some points where it differs
+ by design).
+ </p><p>
+- </p><div class="section" title="Performance Issues"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.intro.issues"></a>Performance Issues</h3></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.intro.issues"></a>Performance Issues</h3></div></div></div><p>
+ </p><p>
+ An attempt is made to categorize the wide variety of possible
+ container designs in terms of performance-impacting factors. These
+@@ -93,7 +92,7 @@
+ </p><p>
+ Specific issues found while unraveling performance factors in the
+ design of associative containers and priority queues follow.
+- </p><div class="section" title="Associative"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.issues.associative"></a>Associative</h4></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.issues.associative"></a>Associative</h4></div></div></div><p>
+ Associative containers depend on their composite policies to a very
+ large extent. Implicitly hard-wiring policies can hamper their
+ performance and limit their functionality. An efficient hash-based
+@@ -134,7 +133,7 @@
+ is a red-black tree, then splitting a reference to the container is
+ exception-free; if it is an ordered-vector tree, exceptions can be
+ thrown.
+- </p></div><div class="section" title="Priority Que"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.issues.priority_queue"></a>Priority Que</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.issues.priority_queue"></a>Priority Que</h4></div></div></div><p>
+ Priority queues are useful when one needs to efficiently access a
+ minimum (or maximum) value as the set of values changes.
+ </p><p>
+@@ -176,7 +175,7 @@
+ expense of more difference in the the kinds of operations that the
+ underlying data structure can support. These differences pose a
+ challenge when creating a uniform interface for priority queues.
+- </p></div></div><div class="section" title="Goals"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.intro.motivation"></a>Goals</h3></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.intro.motivation"></a>Goals</h3></div></div></div><p>
+ Many fine associative-container libraries were already written,
+ most notably, the C++ standard's associative containers. Why
+ then write another library? This section shows some possible
+@@ -187,8 +186,8 @@
+ only then adding hash-based containers, which are fundamentally
+ different), did not standardize priority queues as containers,
+ and (in our opinion) overloads the iterator concept.
+- </p><div class="section" title="Associative"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.motivation.associative"></a>Associative</h4></div></div></div><p>
+- </p><div class="section" title="Policy Choices"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.policy"></a>Policy Choices</h5></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.motivation.associative"></a>Associative</h4></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.policy"></a>Policy Choices</h5></div></div></div><p>
+ Associative containers require a relatively large number of
+ policies to function efficiently in various settings. In some
+ cases this is needed for making their common operations more
+@@ -249,7 +248,7 @@
+ these invariants, one must supply some policy that is aware
+ of these changes. Without this, it would be better to use a
+ linked list (in itself very efficient for these purposes).
+- </p></li></ol></div><div class="figure"><a id="idp17575248"></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" title="Underlying Data Structures"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
++ </p></li></ol></div><div class="figure"><a id="idm269984634416"></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>
+ The standard C++ library contains associative containers based on
+ red-black trees and collision-chaining hash tables. These are
+ very useful, but they are not ideal for all types of
+@@ -257,7 +256,7 @@
+ </p><p>
+ The figure below shows the different underlying data structures
+ currently supported in this library.
+- </p><div class="figure"><a id="idp17581968"></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>
++ </p><div class="figure"><a id="idm269984627696"></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>
+ A shows a collision-chaining hash-table, B shows a probing
+ hash-table, C shows a red-black tree, D shows a splay tree, E shows
+ a tree based on an ordered vector(implicit in the order of the
+@@ -334,7 +333,7 @@
+ library iterators, for example) can ease generic manipulation of
+ associative containers based on different underlying data
+ structures.
+- </p></div><div class="section" title="Iterators"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.iterators"></a>Iterators</h5></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.iterators"></a>Iterators</h5></div></div></div><p>
+ Iterators are centric to the design of the standard library
+ containers, because of the container/algorithm/iterator
+ decomposition that allows an algorithm to operate on a range
+@@ -359,7 +358,7 @@
+ "ds_gen.html#find_range"&gt;Design::Associative
+ Containers::Data-Structure Genericity::Point-Type and Range-Type
+ Methods</span></em>.
+- </p><div class="section" title="Using Point Iterators for Range Operations"><div class="titlepage"><div><div><h6 class="title"><a id="associative.iterators.using"></a>Using Point Iterators for Range Operations</h6></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="associative.iterators.using"></a>Using Point Iterators for Range Operations</h6></div></div></div><p>
+ Suppose <code class="classname">cntnr</code> is some associative
+ container, and say <code class="varname">c</code> is an object of
+ type <code class="classname">cntnr</code>. Then what will be the outcome
+@@ -376,7 +375,7 @@
+ no guarantee that the elements traversed will coincide with the
+ <span class="emphasis"><em>logical</em></span> elements between 1 and 5, as in
+ label B.
+- </p><div class="figure"><a id="idp17613664"></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>
++ </p><div class="figure"><a id="idm269984596064"></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>
+ In our opinion, this problem is not caused just because
+ red-black trees are order preserving while
+ collision-chaining hash tables are (generally) not - it
+@@ -397,7 +396,7 @@
+ Consequently, applying an algorithm to a sequence obtained from most
+ containers may or may not make sense, but applying it to a
+ sub-sequence of a self-organizing container does not.
+- </p></div><div class="section" title="Cost to Point Iterators to Enable Range Operations"><div class="titlepage"><div><div><h6 class="title"><a id="associative.iterators.cost"></a>Cost to Point Iterators to Enable Range Operations</h6></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="associative.iterators.cost"></a>Cost to Point Iterators to Enable Range Operations</h6></div></div></div><p>
+ Suppose <code class="varname">c</code> is some collision-chaining
+ hash-based container object, and one calls
+ </p><pre class="programlisting">c.find(3)</pre><p>
+@@ -427,11 +426,11 @@
+ list, as in the graphic below, label B. Here the iterators are as
+ light as can be, but the hash-table's operations are more
+ complicated.
+- </p><div class="figure"><a id="idp17628576"></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>
++ </p><div class="figure"><a id="idm269984581152"></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>
+ It should be noted that containers based on collision-chaining
+ hash-tables are not the only ones with this type of behavior;
+ many other self-organizing data structures display it as well.
+- </p></div><div class="section" title="Invalidation Guarantees"><div class="titlepage"><div><div><h6 class="title"><a id="associative.iterators.invalidation"></a>Invalidation Guarantees</h6></div></div></div><p>Consider the following snippet:</p><pre class="programlisting">
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="associative.iterators.invalidation"></a>Invalidation Guarantees</h6></div></div></div><p>Consider the following snippet:</p><pre class="programlisting">
+ it = c.find(3);
+ c.erase(5);
+ </pre><p>
+@@ -443,7 +442,7 @@
+ container. The graphic below shows three cases: A1 and A2 show
+ a red-black tree; B1 and B2 show a probing hash-table; C1 and C2
+ show a collision-chaining hash table.
+- </p><div class="figure"><a id="idp17637776"></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>
++ </p><div class="figure"><a id="idm269984571888"></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>
+ Erasing 5 from A1 yields A2. Clearly, an iterator to 3 can
+ be de-referenced and incremented. The sequence of iterators
+ changed, but in a way that is well-defined by the interface.
+@@ -465,7 +464,7 @@
+ to express whether <code class="varname">it</code> is valid or not. This
+ is true also for <code class="function">insert</code>. Again, the
+ iterator concept seems overloaded.
+- </p></div></div><div class="section" title="Functional"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.functions"></a>Functional</h5></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.functions"></a>Functional</h5></div></div></div><p>
+ </p><p>
+ The design of the functional overlay to the underlying data
+ structures differs slightly from some of the conventions used in
+@@ -476,7 +475,7 @@
+ rubric, the standard associative containers lack some useful
+ methods, and provide other methods which would be better
+ removed.
+- </p><div class="section" title="erase"><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.erase"></a><code class="function">erase</code></h6></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
++ </p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.erase"></a><code class="function">erase</code></h6></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ Order-preserving standard associative containers provide the
+ method
+ </p><pre class="programlisting">
+@@ -548,7 +547,7 @@
+ is almost certain to do something
+ different than erasing all elements whose keys are between 2
+ and 5, and is likely to produce other undefined behavior.
+- </p></li></ol></div></div><div class="section" title="split and join"><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.split"></a>
++ </p></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.split"></a>
+ <code class="function">split</code> and <code class="function">join</code>
+ </h6></div></div></div><p>
+ It is well-known that tree-based and trie-based container
+@@ -559,7 +558,7 @@
+ choices for tree-based container methods, especially, since as
+ noted just before, they are efficient replacements for erasing
+ sub-sequences.
+- </p></div><div class="section" title="insert"><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.insert"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.insert"></a>
+ <code class="function">insert</code>
+ </h6></div></div></div><p>
+ The standard associative containers provide methods of the form
+@@ -575,7 +574,7 @@
+ similar to constructors taking a range given by a pair of
+ iterators; the constructors, however, are transactional, whereas
+ the insert methods are not; this is possibly confusing.
+- </p></div><div class="section" title="operator== and operator&lt;="><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.compare"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.compare"></a>
+ <code class="function">operator==</code> and <code class="function">operator&lt;=</code>
+ </h6></div></div></div><p>
+ Associative containers are parametrized by policies allowing to
+@@ -595,7 +594,7 @@
+ equivalence; also, are two containers considered equivalent if
+ they store the same values in different order? this is an
+ arbitrary decision.
+- </p></div></div></div><div class="section" title="Priority Queues"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.motivation.priority_queue"></a>Priority Queues</h4></div></div></div><div class="section" title="Policy Choices"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.priority_queue.policy"></a>Policy Choices</h5></div></div></div><p>
++ </p></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.motivation.priority_queue"></a>Priority Queues</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.priority_queue.policy"></a>Policy Choices</h5></div></div></div><p>
+ Priority queues are containers that allow efficiently inserting
+ values and accessing the maximal value (in the sense of the
+ container's comparison functor). Their interface
+@@ -672,14 +671,14 @@
+ comparing the iterator returned by <code class="function">find</code> to the
+ iterator returned by <code class="function">end</code>, and not by comparing a
+ pointer returned by <code class="function">find</code> to <span class="type">NULL</span>.
+- </p></li></ol></div></li></ol></div></div><div class="section" title="Underlying Data Structures"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.priority_queue.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
++ </p></li></ol></div></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.priority_queue.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
+ There are three main implementations of priority queues: the
+ first employs a binary heap, typically one which uses a
+ sequence; the second uses a tree (or forest of trees), which is
+ typically less structured than an associative container's tree;
+ the third simply uses an associative container. These are
+ shown in the figure below with labels A1 and A2, B, and C.
+- </p><div class="figure"><a id="idp17705360"></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>
++ </p><div class="figure"><a id="idm269984504224"></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>
+ No single implementation can completely replace any of the
+ others. Some have better <code class="function">push</code>
+ and <code class="function">pop</code> amortized performance, some have
+@@ -694,7 +693,7 @@
+ important for priority queues, since the invalidation guarantees
+ of one of the most useful data structures - binary heaps - is
+ markedly different than those of most of the others.
+- </p></div><div class="section" title="Binary Heaps"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.priority_queue.binary_heap"></a>Binary Heaps</h5></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.priority_queue.binary_heap"></a>Binary Heaps</h5></div></div></div><p>
+ Binary heaps are one of the most useful underlying
+ data structures for priority queues. They are very efficient in
+ terms of memory (since they don't require per-value structure
+@@ -771,7 +770,7 @@
+ <code class="classname">std::priority_queue</code>, however, this will generally
+ change the order of growth of the entire sequence of
+ operations.
+- </p></li></ol></div></div></div></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="pbds.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry" title="STL Exception Handling Contract"><a id="biblio.abrahams97exception"></a><p>[biblio.abrahams97exception] <span class="title"><em>
++ </p></li></ol></div></div></div></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="pbds.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="biblio.abrahams97exception"></a><p>[biblio.abrahams97exception] <span class="title"><em>
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1075.pdf" target="_top">
+ STL Exception Handling Contract
+ </a>
+@@ -781,7 +780,7 @@
+ Abrahams
+ </span>. </span><span class="publisher"><span class="publishername">
+ ISO SC22/WG21
+- . </span></span></p></div><div class="biblioentry" title="Modern C++ Design: Generic Programming and Design Patterns Applied"><a id="biblio.alexandrescu01modern"></a><p>[biblio.alexandrescu01modern] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.alexandrescu01modern"></a><p>[biblio.alexandrescu01modern] <span class="title"><em>
+ Modern C++ Design: Generic Programming and Design Patterns Applied
+ </em>. </span><span class="date">
+ 2001
+@@ -791,7 +790,7 @@
+ Alexandrescu
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="MTF, Bit, and COMB: A Guide to Deterministic and Randomized Algorithms for the List Update Problem"><a id="biblio.andrew04mtf"></a><p>[biblio.andrew04mtf] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.andrew04mtf"></a><p>[biblio.andrew04mtf] <span class="title"><em>
+ MTF, Bit, and COMB: A Guide to Deterministic and Randomized
+ Algorithms for the List Update Problem
+ </em>. </span><span class="authorgroup"><span class="firstname">
+@@ -802,7 +801,7 @@
+ D.
+ </span> <span class="surname">
+ Gleich
+- </span>. </span></p></div><div class="biblioentry" title="Why You Shouldn't Use set - and What You Should Use Instead"><a id="biblio.austern00noset"></a><p>[biblio.austern00noset] <span class="title"><em>
++ </span>. </span></p></div><div class="biblioentry"><a id="biblio.austern00noset"></a><p>[biblio.austern00noset] <span class="title"><em>
+ Why You Shouldn't Use set - and What You Should Use Instead
+ </em>. </span><span class="date">
+ April, 2000
+@@ -812,7 +811,7 @@
+ Austern
+ </span>. </span><span class="publisher"><span class="publishername">
+ C++ Report
+- . </span></span></p></div><div class="biblioentry" title="A Proposal to Add Hashtables to the Standard Library"><a id="biblio.austern01htprop"></a><p>[biblio.austern01htprop] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.austern01htprop"></a><p>[biblio.austern01htprop] <span class="title"><em>
+ <a class="link" href="http://www.open-std.org/JTC1/sc22/wg21/docs/papers/2001/n1326.html" target="_top">
+ A Proposal to Add Hashtables to the Standard Library
+ </a>
+@@ -824,7 +823,7 @@
+ Austern
+ </span>. </span><span class="publisher"><span class="publishername">
+ ISO SC22/WG21
+- . </span></span></p></div><div class="biblioentry" title="Segmented iterators and hierarchical algorithms"><a id="biblio.austern98segmentedit"></a><p>[biblio.austern98segmentedit] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.austern98segmentedit"></a><p>[biblio.austern98segmentedit] <span class="title"><em>
+ Segmented iterators and hierarchical algorithms
+ </em>. </span><span class="date">
+ April, 1998
+@@ -834,7 +833,7 @@
+ Austern
+ </span>. </span><span class="publisher"><span class="publishername">
+ Generic Programming
+- . </span></span></p></div><div class="biblioentry" title="Boost Timer Library"><a id="biblio.dawestimer"></a><p>[biblio.dawestimer] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.dawestimer"></a><p>[biblio.dawestimer] <span class="title"><em>
+ <a class="link" href="www.boost.org/doc/libs/release/libs/timer/" target="_top">
+ Boost Timer Library
+ </a>
+@@ -844,7 +843,7 @@
+ Dawes
+ </span>. </span><span class="publisher"><span class="publishername">
+ Boost
+- . </span></span></p></div><div class="biblioentry" title="Boost Pool Library"><a id="biblio.clearypool"></a><p>[biblio.clearypool] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.clearypool"></a><p>[biblio.clearypool] <span class="title"><em>
+ <a class="link" href="www.boost.org/doc/libs/release/libs/pool/" target="_top">
+ Boost Pool Library
+ </a>
+@@ -854,7 +853,7 @@
+ Cleary
+ </span>. </span><span class="publisher"><span class="publishername">
+ Boost
+- . </span></span></p></div><div class="biblioentry" title="Boost Type Traits Library"><a id="biblio.maddocktraits"></a><p>[biblio.maddocktraits] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.maddocktraits"></a><p>[biblio.maddocktraits] <span class="title"><em>
+ <a class="link" href="www.boost.org/doc/libs/release/libs/type_traits/" target="_top">
+ Boost Type Traits Library
+ </a>
+@@ -868,7 +867,7 @@
+ Cleary
+ </span>. </span><span class="publisher"><span class="publishername">
+ Boost
+- . </span></span></p></div><div class="biblioentry" title="Worst-case efficient priority queues"><a id="biblio.brodal96priority"></a><p>[biblio.brodal96priority] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.brodal96priority"></a><p>[biblio.brodal96priority] <span class="title"><em>
+ <a class="link" href="https://dl.acm.org/citation.cfm?id=313883" target="_top">
+ Worst-case efficient priority queues
+ </a>
+@@ -876,7 +875,7 @@
+ Gerth
+ </span> <span class="surname">
+ Stolting Brodal
+- </span>. </span></p></div><div class="biblioentry" title="Efficient C++ Programming Techniques"><a id="biblio.bulkamayheweff"></a><p>[biblio.bulkamayheweff] <span class="title"><em>
++ </span>. </span></p></div><div class="biblioentry"><a id="biblio.bulkamayheweff"></a><p>[biblio.bulkamayheweff] <span class="title"><em>
+ Efficient C++ Programming Techniques
+ </em>. </span><span class="date">
+ 1997
+@@ -890,7 +889,7 @@
+ Mayhew
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="Introduction to Algorithms, 2nd edition"><a id="biblio.clrs2001"></a><p>[biblio.clrs2001] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.clrs2001"></a><p>[biblio.clrs2001] <span class="title"><em>
+ Introduction to Algorithms, 2nd edition
+ </em>. </span><span class="date">
+ 2001
+@@ -912,7 +911,7 @@
+ Stein
+ </span>. </span><span class="publisher"><span class="publishername">
+ MIT Press
+- . </span></span></p></div><div class="biblioentry" title="Balls and bins: A study in negative dependence"><a id="biblio.dubhashi98neg"></a><p>[biblio.dubhashi98neg] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.dubhashi98neg"></a><p>[biblio.dubhashi98neg] <span class="title"><em>
+ Balls and bins: A study in negative dependence
+ </em>. </span><span class="date">
+ 1998
+@@ -926,7 +925,7 @@
+ Ranjan
+ </span>. </span><span class="publisher"><span class="publishername">
+ Random Structures and Algorithms 13
+- . </span></span></p></div><div class="biblioentry" title="Extendible hashing - a fast access method for dynamic files"><a id="biblio.fagin79extendible"></a><p>[biblio.fagin79extendible] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.fagin79extendible"></a><p>[biblio.fagin79extendible] <span class="title"><em>
+ Extendible hashing - a fast access method for dynamic files
+ </em>. </span><span class="date">
+ 1979
+@@ -948,7 +947,7 @@
+ Strong
+ </span>. </span><span class="publisher"><span class="publishername">
+ ACM Trans. Database Syst. 4
+- . </span></span></p></div><div class="biblioentry" title="Ptset: Sets of integers implemented as Patricia trees"><a id="biblio.filliatre2000ptset"></a><p>[biblio.filliatre2000ptset] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.filliatre2000ptset"></a><p>[biblio.filliatre2000ptset] <span class="title"><em>
+ <a class="link" href="http://cristal.inria.fr/~frisch/icfp06_contest/advtr/applyOmatic/ptset.ml" target="_top">
+ Ptset: Sets of integers implemented as Patricia trees
+ </a>
+@@ -958,7 +957,7 @@
+ Jean-Christophe
+ </span> <span class="surname">
+ Filliatre
+- </span>. </span></p></div><div class="biblioentry" title="The pairing heap: a new form of self-adjusting heap"><a id="biblio.fredman86pairing"></a><p>[biblio.fredman86pairing] <span class="title"><em>
++ </span>. </span></p></div><div class="biblioentry"><a id="biblio.fredman86pairing"></a><p>[biblio.fredman86pairing] <span class="title"><em>
+ <a class="link" href="http://www.cs.cmu.edu/~sleator/papers/pairing-heaps.pdf" target="_top">
+ The pairing heap: a new form of self-adjusting heap
+ </a>
+@@ -980,7 +979,7 @@
+ R. E.
+ </span> <span class="surname">
+ Tarjan
+- </span>. </span></p></div><div class="biblioentry" title="Design Patterns - Elements of Reusable Object-Oriented Software"><a id="biblio.gof"></a><p>[biblio.gof] <span class="title"><em>
++ </span>. </span></p></div><div class="biblioentry"><a id="biblio.gof"></a><p>[biblio.gof] <span class="title"><em>
+ Design Patterns - Elements of Reusable Object-Oriented Software
+ </em>. </span><span class="date">
+ 1995
+@@ -1002,7 +1001,7 @@
+ Vlissides
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="Order-preserving key transformations"><a id="biblio.garg86order"></a><p>[biblio.garg86order] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.garg86order"></a><p>[biblio.garg86order] <span class="title"><em>
+ Order-preserving key transformations
+ </em>. </span><span class="date">
+ 1986
+@@ -1016,7 +1015,7 @@
+ Gotlieb
+ </span>. </span><span class="publisher"><span class="publishername">
+ Trans. Database Syst. 11
+- . </span></span></p></div><div class="biblioentry" title="Making a real hash of things"><a id="biblio.hyslop02making"></a><p>[biblio.hyslop02making] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.hyslop02making"></a><p>[biblio.hyslop02making] <span class="title"><em>
+ Making a real hash of things
+ </em>. </span><span class="date">
+ May 2002
+@@ -1030,7 +1029,7 @@
+ Sutter
+ </span>. </span><span class="publisher"><span class="publishername">
+ C++ Report
+- . </span></span></p></div><div class="biblioentry" title="The C++ Standard Library - A Tutorial and Reference"><a id="biblio.jossutis01stl"></a><p>[biblio.jossutis01stl] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.jossutis01stl"></a><p>[biblio.jossutis01stl] <span class="title"><em>
+ The C++ Standard Library - A Tutorial and Reference
+ </em>. </span><span class="date">
+ 2001
+@@ -1040,7 +1039,7 @@
+ Jossutis
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="New Heap Data Structures"><a id="biblio.kt99fat_heaps"></a><p>[biblio.kt99fat_heaps] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.kt99fat_heaps"></a><p>[biblio.kt99fat_heaps] <span class="title"><em>
+ <a class="link" href="http://www.cs.princeton.edu/research/techreps/TR-597-99" target="_top">
+ New Heap Data Structures
+ </a>
+@@ -1054,7 +1053,7 @@
+ Robert E.
+ </span> <span class="surname">
+ Tarjan
+- </span>. </span></p></div><div class="biblioentry" title="Are Set Iterators Mutable or Immutable?"><a id="biblio.kleft00sets"></a><p>[biblio.kleft00sets] <span class="title"><em>
++ </span>. </span></p></div><div class="biblioentry"><a id="biblio.kleft00sets"></a><p>[biblio.kleft00sets] <span class="title"><em>
+ Are Set Iterators Mutable or Immutable?
+ </em>. </span><span class="date">
+ October 2000
+@@ -1068,7 +1067,7 @@
+ Kleft
+ </span>. </span><span class="publisher"><span class="publishername">
+ C/C++ Users Jornal
+- . </span></span></p></div><div class="biblioentry" title="The Art of Computer Programming - Sorting and Searching"><a id="biblio.knuth98sorting"></a><p>[biblio.knuth98sorting] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.knuth98sorting"></a><p>[biblio.knuth98sorting] <span class="title"><em>
+ The Art of Computer Programming - Sorting and Searching
+ </em>. </span><span class="date">
+ 1998
+@@ -1078,7 +1077,7 @@
+ Knuth
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="Data abstraction and hierarchy"><a id="biblio.liskov98data"></a><p>[biblio.liskov98data] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.liskov98data"></a><p>[biblio.liskov98data] <span class="title"><em>
+ Data abstraction and hierarchy
+ </em>. </span><span class="date">
+ May 1998
+@@ -1088,7 +1087,7 @@
+ Liskov
+ </span>. </span><span class="publisher"><span class="publishername">
+ SIGPLAN Notices 23
+- . </span></span></p></div><div class="biblioentry" title="Linear hashing: A new tool for file and table addressing"><a id="biblio.litwin80lh"></a><p>[biblio.litwin80lh] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.litwin80lh"></a><p>[biblio.litwin80lh] <span class="title"><em>
+ Linear hashing: A new tool for file and table addressing
+ </em>. </span><span class="date">
+ June 1980
+@@ -1098,8 +1097,8 @@
+ Litwin
+ </span>. </span><span class="publisher"><span class="publishername">
+ Proceedings of International Conference on Very Large Data Bases
+- . </span></span></p></div><div class="biblioentry" title="Deamortization - Part 2: Binomial Heaps"><a id="biblio.maverik_lowerbounds"></a><p>[biblio.maverik_lowerbounds] <span class="title"><em>
+- <a class="link" href="http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps" target="_top">
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.maverik_lowerbounds"></a><p>[biblio.maverik_lowerbounds] <span class="title"><em>
++ <a class="link" href="http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps/" target="_top">
+ Deamortization - Part 2: Binomial Heaps
+ </a>
+ </em>. </span><span class="date">
+@@ -1108,7 +1107,7 @@
+ Maverik
+ </span> <span class="surname">
+ Woo
+- </span>. </span></p></div><div class="biblioentry" title="More Effective C++: 35 New Ways to Improve Your Programs and Designs"><a id="biblio.meyers96more"></a><p>[biblio.meyers96more] <span class="title"><em>
++ </span>. </span></p></div><div class="biblioentry"><a id="biblio.meyers96more"></a><p>[biblio.meyers96more] <span class="title"><em>
+ More Effective C++: 35 New Ways to Improve Your Programs and Designs
+ </em>. </span><span class="date">
+ 1996
+@@ -1118,7 +1117,7 @@
+ Meyers
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="How Non-Member Functions Improve Encapsulation"><a id="biblio.meyers00nonmember"></a><p>[biblio.meyers00nonmember] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.meyers00nonmember"></a><p>[biblio.meyers00nonmember] <span class="title"><em>
+ How Non-Member Functions Improve Encapsulation
+ </em>. </span><span class="date">
+ 2000
+@@ -1128,7 +1127,7 @@
+ Meyers
+ </span>. </span><span class="publisher"><span class="publishername">
+ C/C++ Users Journal
+- . </span></span></p></div><div class="biblioentry" title="Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library"><a id="biblio.meyers01stl"></a><p>[biblio.meyers01stl] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.meyers01stl"></a><p>[biblio.meyers01stl] <span class="title"><em>
+ Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library
+ </em>. </span><span class="date">
+ 2001
+@@ -1138,7 +1137,7 @@
+ Meyers
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="Class Template, Member Template - or Both?"><a id="biblio.meyers02both"></a><p>[biblio.meyers02both] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.meyers02both"></a><p>[biblio.meyers02both] <span class="title"><em>
+ Class Template, Member Template - or Both?
+ </em>. </span><span class="date">
+ 2003
+@@ -1148,7 +1147,7 @@
+ Meyers
+ </span>. </span><span class="publisher"><span class="publishername">
+ C/C++ Users Journal
+- . </span></span></p></div><div class="biblioentry" title="Randomized Algorithms"><a id="biblio.motwani95random"></a><p>[biblio.motwani95random] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.motwani95random"></a><p>[biblio.motwani95random] <span class="title"><em>
+ Randomized Algorithms
+ </em>. </span><span class="date">
+ 2003
+@@ -1162,13 +1161,13 @@
+ Raghavan
+ </span>. </span><span class="publisher"><span class="publishername">
+ Cambridge University Press
+- . </span></span></p></div><div class="biblioentry" title="COM: Component Model Object Technologies"><a id="biblio.mscom"></a><p>[biblio.mscom] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.mscom"></a><p>[biblio.mscom] <span class="title"><em>
+ <a class="link" href="https://www.microsoft.com/com/" target="_top">
+ COM: Component Model Object Technologies
+ </a>
+ </em>. </span><span class="publisher"><span class="publishername">
+ Microsoft
+- . </span></span></p></div><div class="biblioentry" title="Rationale for Adding Hash Tables to the C++ Standard Template Library"><a id="biblio.musser95rationale"></a><p>[biblio.musser95rationale] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.musser95rationale"></a><p>[biblio.musser95rationale] <span class="title"><em>
+ Rationale for Adding Hash Tables to the C++ Standard Template Library
+ </em>. </span><span class="date">
+ 1995
+@@ -1176,7 +1175,7 @@
+ David R.
+ </span> <span class="surname">
+ Musser
+- </span>. </span></p></div><div class="biblioentry" title="STL Tutorial and Reference Guide"><a id="biblio.musser96stltutorial"></a><p>[biblio.musser96stltutorial] <span class="title"><em>
++ </span>. </span></p></div><div class="biblioentry"><a id="biblio.musser96stltutorial"></a><p>[biblio.musser96stltutorial] <span class="title"><em>
+ STL Tutorial and Reference Guide
+ </em>. </span><span class="date">
+ 1996
+@@ -1190,8 +1189,8 @@
+ Saini
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="Priority Queues and the STL"><a id="biblio.nelson96stlpq"></a><p>[biblio.nelson96stlpq] <span class="title"><em>
+- <a class="link" href="http://www.dogma.net/markn/articles/pq_stl/priority.htm" target="_top">Priority Queues and the STL
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.nelson96stlpq"></a><p>[biblio.nelson96stlpq] <span class="title"><em>
++ <a class="link" href="http://marknelson.us/1996/01/01/priority-queues/" target="_top">Priority Queues and the STL
+ </a>
+ </em>. </span><span class="date">
+ January 1996
+@@ -1201,7 +1200,7 @@
+ Nelson
+ </span>. </span><span class="publisher"><span class="publishername">
+ Dr. Dobbs Journal
+- . </span></span></p></div><div class="biblioentry" title="Fast mergeable integer maps"><a id="biblio.okasaki98mereable"></a><p>[biblio.okasaki98mereable] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.okasaki98mereable"></a><p>[biblio.okasaki98mereable] <span class="title"><em>
+ Fast mergeable integer maps
+ </em>. </span><span class="date">
+ September 1998
+@@ -1215,7 +1214,7 @@
+ Gill
+ </span>. </span><span class="publisher"><span class="publishername">
+ In Workshop on ML
+- . </span></span></p></div><div class="biblioentry" title="Standard Template Library Programmer's Guide"><a id="biblio.sgi_stl"></a><p>[biblio.sgi_stl] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.sgi_stl"></a><p>[biblio.sgi_stl] <span class="title"><em>
+ <a class="link" href="http://www.sgi.com/tech/stl/" target="_top">
+ Standard Template Library Programmer's Guide
+ </a>
+@@ -1225,11 +1224,11 @@
+ Austern
+ </span>. </span><span class="publisher"><span class="publishername">
+ SGI
+- . </span></span></p></div><div class="biblioentry" title="select"><a id="biblio.select_man"></a><p>[biblio.select_man] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.select_man"></a><p>[biblio.select_man] <span class="title"><em>
+ <a class="link" href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/select.html" target="_top">
+ select
+ </a>
+- </em>. </span></p></div><div class="biblioentry" title="Amortized Efficiency of List Update Problems"><a id="biblio.sleator84amortized"></a><p>[biblio.sleator84amortized] <span class="title"><em>
++ </em>. </span></p></div><div class="biblioentry"><a id="biblio.sleator84amortized"></a><p>[biblio.sleator84amortized] <span class="title"><em>
+ Amortized Efficiency of List Update Problems
+ </em>. </span><span class="date">
+ 1984
+@@ -1243,7 +1242,7 @@
+ Tarjan
+ </span>. </span><span class="publisher"><span class="publishername">
+ ACM Symposium on Theory of Computing
+- . </span></span></p></div><div class="biblioentry" title="Self-Adjusting Binary Search Trees"><a id="biblio.sleator85self"></a><p>[biblio.sleator85self] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.sleator85self"></a><p>[biblio.sleator85self] <span class="title"><em>
+ Self-Adjusting Binary Search Trees
+ </em>. </span><span class="date">
+ 1985
+@@ -1257,7 +1256,7 @@
+ Tarjan
+ </span>. </span><span class="publisher"><span class="publishername">
+ ACM Symposium on Theory of Computing
+- . </span></span></p></div><div class="biblioentry" title="The Standard Template Library"><a id="biblio.stepanov94standard"></a><p>[biblio.stepanov94standard] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.stepanov94standard"></a><p>[biblio.stepanov94standard] <span class="title"><em>
+ The Standard Template Library
+ </em>. </span><span class="date">
+ 1984
+@@ -1269,7 +1268,7 @@
+ M.
+ </span> <span class="surname">
+ Lee
+- </span>. </span></p></div><div class="biblioentry" title="The C++ Programming Langugage"><a id="biblio.stroustrup97cpp"></a><p>[biblio.stroustrup97cpp] <span class="title"><em>
++ </span>. </span></p></div><div class="biblioentry"><a id="biblio.stroustrup97cpp"></a><p>[biblio.stroustrup97cpp] <span class="title"><em>
+ The C++ Programming Langugage
+ </em>. </span><span class="date">
+ 1997
+@@ -1279,7 +1278,7 @@
+ Stroustrup
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="C++ Templates: The Complete Guide"><a id="biblio.vandevoorde2002cpptemplates"></a><p>[biblio.vandevoorde2002cpptemplates] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.vandevoorde2002cpptemplates"></a><p>[biblio.vandevoorde2002cpptemplates] <span class="title"><em>
+ C++ Templates: The Complete Guide
+ </em>. </span><span class="date">
+ 2002
+@@ -1293,7 +1292,7 @@
+ Josuttis
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="Thirty Years Among the Dead"><a id="biblio.wickland96thirty"></a><p>[biblio.wickland96thirty] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.wickland96thirty"></a><p>[biblio.wickland96thirty] <span class="title"><em>
+ <a class="link" href="http://myweb.wvnet.edu/~gsa00121/books/amongdead30.zip" target="_top">
+ Thirty Years Among the Dead
+ </a>
+@@ -1305,4 +1304,4 @@
+ Wickland
+ </span>. </span><span class="publisher"><span class="publishername">
+ National Psychological Institute
+- . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch21s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures_using.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
++ . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch21s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures_using.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html
++++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html
+@@ -1,11 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Acknowledgments"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.ack"></a>Acknowledgments</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ Written by Ami Tavory and Vladimir Dreizin (IBM Haifa Research
+ Laboratories), and Benjamin Kosnik (Red Hat).
+ </p><p>
+- This library was partially written at
+- <a class="link" href="http://www.haifa.il.ibm.com/" target="_top">IBM's Haifa Research Labs</a>.
++ This library was partially written at IBM's Haifa Research Labs.
+ It is based heavily on policy-based design and uses many useful
+ techniques from Modern C++ Design: Generic Programming and Design
+ Patterns Applied by Andrei Alexandrescu.
+@@ -26,4 +24,4 @@
+ attributing to him any flaws in the design or implementation of the
+ library).
+ </p><p>We would like to thank Matt Austern for the suggestion to
+- include tries.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_based_data_structures_test.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Testing </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 23. HP/SGI Extensions</td></tr></table></div></body></html>
++ include tries.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_based_data_structures_test.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Testing </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 23. HP/SGI Extensions</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures_design.html
++++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures_design.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Design"><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" title="Concepts"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.design.concepts"></a>Concepts</h3></div></div></div><div class="section" title="Null Policy Classes"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.null_type"></a>Null Policy Classes</h4></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ Associative containers are typically parametrized by various
+ policies. For example, a hash-based associative container is
+ parametrized by a hash-functor, transforming each key into an
+@@ -27,7 +26,7 @@
+ places simplifications are made possible with this technique
+ include node updates in tree and trie data structures, and hash
+ and probe functions for hash data structures.
+- </p></div><div class="section" title="Map and Set Semantics"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.associative_semantics"></a>Map and Set Semantics</h4></div></div></div><div class="section" title="Distinguishing Between Maps and Sets"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.associative_semantics.set_vs_map"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.associative_semantics"></a>Map and Set Semantics</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.associative_semantics.set_vs_map"></a>
+ Distinguishing Between Maps and Sets
+ </h5></div></div></div><p>
+ Anyone familiar with the standard knows that there are four kinds
+@@ -93,7 +92,7 @@
+ </p><p>
+ When one uses a "multimap," one should choose with care the
+ type of container used for secondary keys.
+- </p></div><div class="section" title="Alternatives to std::multiset and std::multimap"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.associative_semantics.multi"></a>Alternatives to <code class="classname">std::multiset</code> and <code class="classname">std::multimap</code></h5></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.associative_semantics.multi"></a>Alternatives to <code class="classname">std::multiset</code> and <code class="classname">std::multimap</code></h5></div></div></div><p>
+ Brace onself: this library does not contain containers like
+ <code class="classname">std::multimap</code> or
+ <code class="classname">std::multiset</code>. Instead, these data
+@@ -171,7 +170,7 @@
+ naturally; collision-chaining hash tables (label B) store
+ equivalent-key values in the same bucket, the bucket can be
+ arranged so that equivalent-key values are consecutive.
+- </p><div class="figure"><a id="idp17962720"></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>
++ </p><div class="figure"><a id="idm269984247008"></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>
+ Put differently, the standards' non-unique mapping
+ associative-containers are associative containers that map
+ primary keys to linked lists that are embedded into the
+@@ -253,7 +252,7 @@
+ first graphic above. Labels A and B, respectively. Each shaded
+ box represents some size-type or secondary
+ associative-container.
+- </p><div class="figure"><a id="idp17986224"></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>
++ </p><div class="figure"><a id="idm269984223568"></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>
+ In the first example above, then, one would use an associative
+ container mapping each user to an associative container which
+ maps each application id to a start time (see
+@@ -265,7 +264,7 @@
+ </p><p>
+ See the discussion in list-based container types for containers
+ especially suited as secondary associative-containers.
+- </p></div></div><div class="section" title="Iterator Semantics"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.iterator_semantics"></a>Iterator Semantics</h4></div></div></div><div class="section" title="Point and Range Iterators"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.iterator_semantics.point_and_range"></a>Point and Range Iterators</h5></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.iterator_semantics"></a>Iterator Semantics</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.iterator_semantics.point_and_range"></a>Point and Range Iterators</h5></div></div></div><p>
+ Iterator concepts are bifurcated in this design, and are
+ comprised of point-type and range-type iteration.
+ </p><p>
+@@ -286,7 +285,7 @@
+ implementation, including that of C++ standard library
+ components), but in this design, it is made explicit. They are
+ distinct types.
+- </p></div><div class="section" title="Distinguishing Point and Range Iterators"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.iterator_semantics.both"></a>Distinguishing Point and Range Iterators</h5></div></div></div><p>When using this library, is necessary to differentiate
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.iterator_semantics.both"></a>Distinguishing Point and Range Iterators</h5></div></div></div><p>When using this library, is necessary to differentiate
+ between two types of methods and iterators: point-type methods and
+ iterators, and range-type methods and iterators. Each associative
+ container's interface includes the methods:</p><pre class="programlisting">
+@@ -306,7 +305,7 @@
+ shows invariants for order-preserving containers: point-type
+ iterators are synonymous with range-type iterators.
+ Orthogonally, <span class="emphasis"><em>C</em></span>shows invariants for "set"
+- containers: iterators are synonymous with const iterators.</p><div class="figure"><a id="idp18006032"></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
++ containers: iterators are synonymous with const iterators.</p><div class="figure"><a id="idm269984203760"></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
+ (hash-based associative containers) lack movement
+ operators, such as <code class="literal">operator++</code> - in fact, this
+ is the reason why this library differentiates from the standard C++ librarys
+@@ -322,7 +321,7 @@
+ a concept in C++ standardese, which is the category of iterators
+ with no movement capabilities.) All other standard C++ library
+ tags, such as <code class="literal">forward_iterator_tag</code> retain their
+- common use.</p></div><div class="section" title="Invalidation Guarantees"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.design.concepts.invalidation"></a>Invalidation Guarantees</h5></div></div></div><p>
++ common use.</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.design.concepts.invalidation"></a>Invalidation Guarantees</h5></div></div></div><p>
+ If one manipulates a container object, then iterators previously
+ obtained from it can be invalidated. In some cases a
+ previously-obtained iterator cannot be de-referenced; in other cases,
+@@ -345,7 +344,7 @@
+ to the question of whether point-type iterators and range-type
+ iterators are valid. The graphic below shows tags corresponding to
+ different types of invalidation guarantees.
+- </p><div class="figure"><a id="idp18019376"></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" type="disc"><li class="listitem"><p>
++ </p><div class="figure"><a id="idm269984190416"></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>
+ <code class="classname">basic_invalidation_guarantee</code>
+ corresponds to a basic guarantee that a point-type iterator,
+ a found pointer, or a found reference, remains valid as long
+@@ -376,7 +375,7 @@
+ our opinion, an invalidation-guarantee hierarchy would solve
+ these problems in all container types - not just associative
+ containers.
+- </p></div></div><div class="section" title="Genericity"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.genericity"></a>Genericity</h4></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.genericity"></a>Genericity</h4></div></div></div><p>
+ The design attempts to address the following problem of
+ data-structure genericity. When writing a function manipulating
+ a generic container object, what is the behavior of the object?
+@@ -391,7 +390,7 @@
+ </pre><p>
+ then one needs to address the following questions in the body
+ of <code class="function">some_op_sequence</code>:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Which types and methods does <code class="literal">Cntnr</code> support?
+ Containers based on hash tables can be queries for the
+ hash-functor type and object; this is meaningless for tree-based
+@@ -418,7 +417,7 @@
+ capabilities? What is the relationship between two different
+ data structures, if anything?
+ </p></li></ul></div><p>The remainder of this section explains these issues in
+- detail.</p><div class="section" title="Tag"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.genericity.tag"></a>Tag</h5></div></div></div><p>
++ detail.</p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.genericity.tag"></a>Tag</h5></div></div></div><p>
+ Tags are very useful for manipulating generic types. For example, if
+ <code class="literal">It</code> is an iterator class, then <code class="literal">typename
+ It::iterator_category</code> or <code class="literal">typename
+@@ -429,11 +428,11 @@
+ </p><p>
+ This library contains a container tag hierarchy corresponding to the
+ diagram below.
+- </p><div class="figure"><a id="idp18049600"></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>
++ </p><div class="figure"><a id="idm269984160256"></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>
+ Given any container <span class="type">Cntnr</span>, the tag of
+ the underlying data structure can be found via <code class="literal">typename
+ Cntnr::container_category</code>.
+- </p></div><div class="section" title="Traits"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.genericity.traits"></a>Traits</h5></div></div></div><p></p><p>Additionally, a traits mechanism can be used to query a
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.genericity.traits"></a>Traits</h5></div></div></div><p></p><p>Additionally, a traits mechanism can be used to query a
+ container type for its attributes. Given any container
+ <code class="literal">Cntnr</code>, then <code class="literal">&lt;Cntnr&gt;</code>
+ is a traits class identifying the properties of the
+@@ -453,7 +452,7 @@
+ otherwise <code class="classname">container_traits&lt;Cntnr&gt;::split_join_can_throw</code>
+ will yield a compilation error. (This is somewhat similar to a
+ compile-time version of the COM model).
+- </p></div></div></div><div class="section" title="By Container"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.design.container"></a>By Container</h3></div></div></div><div class="section" title="hash"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.hash"></a>hash</h4></div></div></div><div class="section" title="Interface"><div class="titlepage"><div><div><h5 class="title"><a id="container.hash.interface"></a>Interface</h5></div></div></div><p>
++ </p></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.design.container"></a>By Container</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.hash"></a>hash</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.hash.interface"></a>Interface</h5></div></div></div><p>
+ The collision-chaining hash-based container has the
+ following declaration.</p><pre class="programlisting">
+ template&lt;
+@@ -487,8 +486,8 @@
+ </pre><p>The parameters are identical to those of the
+ 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
+ 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
+- other parameters, and are explained below.</p></div><div class="section" title="Details"><div class="titlepage"><div><div><h5 class="title"><a id="container.hash.details"></a>Details</h5></div></div></div><div class="section" title="Hash Policies"><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" title="General"><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
+- involves. The graphic below illustrates the discussion.</p><div class="figure"><a id="idp18089744"></a><p class="title"><strong>Figure 22.14. Hash functions, ranged-hash functions, and
++ 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
++ involves. The graphic below illustrates the discussion.</p><div class="figure"><a id="idm269984120160"></a><p class="title"><strong>Figure 22.14. Hash functions, ranged-hash functions, and
+ 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
+ strings of 3 characters). A hash-table algorithm needs to map
+ elements of U "uniformly" into the range [0,..., m -
+@@ -505,7 +504,7 @@
+ Z<sub>+</sub>,</p><p>which maps a non-negative hash value, and a non-negative
+ range upper-bound into a non-negative integral in the range
+ between 0 (inclusive) and the range upper bound (exclusive),
+- 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="idp18103552"></a><p class="title"><strong>Equation 22.1. Ranged Hash Function</strong></p><div class="equation-contents"><span class="mathphrase">
++ 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="idm269984106352"></a><p class="title"><strong>Equation 22.1. Ranged Hash Function</strong></p><div class="equation-contents"><span class="mathphrase">
+ f(u , m) = g(h(u), m)
+ </span></div></div><br class="equation-break" /><p>From the above, it is obvious that given g and
+ h, f can always be composed (however the converse
+@@ -523,9 +522,9 @@
+ probe function transforming the hash value into a
+ sequence of hash values, and a range-hashing function
+ transforming the sequence of hash values into a sequence of
+- positions.</p></div><div class="section" title="Range Hashing"><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
++ 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
+ 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
+- as</p><div class="equation"><a id="idp18109440"></a><p class="title"><strong>Equation 22.2. Range-Hashing, Division Method</strong></p><div class="equation-contents"><span class="mathphrase">
++ as</p><div class="equation"><a id="idm269984100464"></a><p class="title"><strong>Equation 22.2. Range-Hashing, Division Method</strong></p><div class="equation-contents"><span class="mathphrase">
+ g(r, m) = r mod m
+ </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
+ v (typically powers of 2), and some a. Each of
+@@ -536,9 +535,9 @@
+ implement using the low
+ level % (modulo) operation (for any m), or the
+ low level &amp; (bit-mask) operation (for the case where
+- m is a power of 2), i.e.,</p><div class="equation"><a id="idp18113952"></a><p class="title"><strong>Equation 22.3. Division via Prime Modulo</strong></p><div class="equation-contents"><span class="mathphrase">
++ m is a power of 2), i.e.,</p><div class="equation"><a id="idm269984095952"></a><p class="title"><strong>Equation 22.3. Division via Prime Modulo</strong></p><div class="equation-contents"><span class="mathphrase">
+ g(r, m) = r % m
+- </span></div></div><br class="equation-break" /><p>and</p><div class="equation"><a id="idp18115776"></a><p class="title"><strong>Equation 22.4. Division via Bit Mask</strong></p><div class="equation-contents"><span class="mathphrase">
++ </span></div></div><br class="equation-break" /><p>and</p><div class="equation"><a id="idm269984094128"></a><p class="title"><strong>Equation 22.4. Division via Bit Mask</strong></p><div class="equation-contents"><span class="mathphrase">
+ g(r, m) = r &amp; m - 1, (with m =
+ 2<sup>k</sup> for some k)
+ </span></div></div><br class="equation-break" /><p>respectively.</p><p>The % (modulo) implementation has the advantage that for
+@@ -550,7 +549,7 @@
+ relying on the fast bit-wise and operation. It has the
+ disadvantage that for g(r, m) is affected only by the
+ low order bits of r. This method is hard-wired into
+- Dinkumware's implementation.</p></div><div class="section" title="Ranged Hash"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.ranged"></a>Ranged Hash</h6></div></div></div><p>In cases it is beneficial to allow the
++ Dinkumware's implementation.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.ranged"></a>Ranged Hash</h6></div></div></div><p>In cases it is beneficial to allow the
+ client to directly specify a ranged-hash hash function. It is
+ true, that the writer of the ranged-hash function cannot rely
+ on the values of m having specific numerical properties
+@@ -564,7 +563,7 @@
+ s = [ s<sub>0</sub>,..., s<sub>t - 1</sub>]
+ </p><p>be a string of t characters, each of which is from
+ domain S. Consider the following ranged-hash
+- function:</p><div class="equation"><a id="idp18125408"></a><p class="title"><strong>Equation 22.5. 
++ function:</p><div class="equation"><a id="idm269984084496"></a><p class="title"><strong>Equation 22.5. 
+ A Standard String Hash Function
+ </strong></p><div class="equation-contents"><span class="mathphrase">
+ f<sub>1</sub>(s, m) = ∑ <sub>i =
+@@ -576,7 +575,7 @@
+ of a long DNA sequence (and so S = {'A', 'C', 'G',
+ 'T'}). In this case, scanning the entire string might be
+ prohibitively expensive. A possible alternative might be to use
+- 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="idp18131552"></a><p class="title"><strong>Equation 22.6. 
++ 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="idm269984078352"></a><p class="title"><strong>Equation 22.6. 
+ Only k String DNA Hash
+ </strong></p><div class="equation-contents"><span class="mathphrase">
+ f<sub>2</sub>(s, m) = ∑ <sub>i
+@@ -590,12 +589,12 @@
+ 1</sup> s<sub>r</sub>i a<sup>r<sub>i</sub></sup> mod
+ m ,</p><p>respectively, for r<sub>0</sub>,..., r<sub>k-1</sub>
+ each in the (inclusive) range [0,...,t-1].</p><p>It should be noted that the above functions cannot be
+- decomposed as per a ranged hash composed of hash and range hashing.</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.implementation"></a>Implementation</h6></div></div></div><p>This sub-subsection describes the implementation of
++ decomposed as per a ranged hash composed of hash and range hashing.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.implementation"></a>Implementation</h6></div></div></div><p>This sub-subsection describes the implementation of
+ the above in this library. It first explains range-hashing
+ functions in collision-chaining tables, then ranged-hash
+ functions in collision-chaining tables, then probing-based
+ tables, and finally lists the relevant classes in this
+- library.</p><div class="section" title="Range-Hashing and Ranged-Hashes in Collision-Chaining Tables"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.collision-chaining"></a>
++ library.</p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.collision-chaining"></a>
+ Range-Hashing and Ranged-Hashes in Collision-Chaining Tables
+ </h6></div></div></div><p><code class="classname">cc_hash_table</code> is
+ parametrized by <code class="classname">Hash_Fn</code> and <code class="classname">Comb_Hash_Fn</code>, a
+@@ -607,12 +606,12 @@
+ the container transforms the key into a non-negative integral
+ using the hash functor (points B and C), and transforms the
+ result into a position using the combining functor (points D
+- and E).</p><div class="figure"><a id="idp18154176"></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
++ and E).</p><div class="figure"><a id="idm269984055792"></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
+ 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
+ a ranged-hash function. The graphic below shows an <code class="function">insert</code> sequence
+ diagram. The user inserts an element (point A), the container
+ transforms the key into a position using the combining functor
+- (points B and C).</p><div class="figure"><a id="idp18161232"></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" title="Probing tables"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.probe"></a>
++ (points B and C).</p><div class="figure"><a id="idm269984048736"></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>
+ Probing tables
+ </h6></div></div></div><p><code class="classname">gp_hash_table</code> is parametrized by
+ <code class="classname">Hash_Fn</code>, <code class="classname">Probe_Fn</code>,
+@@ -624,7 +623,7 @@
+ functor, <code class="classname">Probe_Fn</code> is a functor for offsets
+ from a hash value, and <code class="classname">Comb_Probe_Fn</code>
+ transforms a probe sequence into a sequence of positions within
+- the table.</p></div><div class="section" title="Pre-Defined Policies"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.predefined"></a>
++ the table.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.predefined"></a>
+ Pre-Defined Policies
+ </h6></div></div></div><p>This library contains some pre-defined classes
+ implementing range-hashing and probing functions:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">direct_mask_range_hashing</code>
+@@ -635,14 +634,14 @@
+ a linear probe and a quadratic probe function,
+ respectively.</p></li></ol></div><p>
+ The graphic below shows the relationships.
+- </p><div class="figure"><a id="idp18178048"></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" title="Resize Policies"><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" title="General"><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
++ </p><div class="figure"><a id="idm269984031920"></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
+ shrink. It is necessary to specify policies to determine how
+ and when a hash table should change its size. Usually, resize
+ 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
+ should grow (e.g., it should multiply by powers of
+ 2).</p></li><li class="listitem"><p>A trigger policy indicating when a hash
+ table should grow (e.g., a load factor is
+- exceeded).</p></li></ol></div></div><div class="section" title="Size Policies"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.size"></a>Size Policies</h6></div></div></div><p>Size policies determine how a hash table changes size. These
++ exceeded).</p></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.size"></a>Size Policies</h6></div></div></div><p>Size policies determine how a hash table changes size. These
+ policies are simple, and there are relatively few sensible
+ options. An exponential-size policy (with the initial size and
+ growth factors both powers of 2) works well with a mask-based
+@@ -650,7 +649,7 @@
+ hard-wired policy used by Dinkumware. A
+ prime-list based policy works well with a modulo-prime range
+ hashing function and is the hard-wired policy used by SGI's
+- implementation.</p></div><div class="section" title="Trigger Policies"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.trigger"></a>Trigger Policies</h6></div></div></div><p>Trigger policies determine when a hash table changes size.
++ implementation.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.trigger"></a>Trigger Policies</h6></div></div></div><p>Trigger policies determine when a hash table changes size.
+ Following is a description of two policies: load-check
+ policies, and collision-check policies.</p><p>Load-check policies are straightforward. The user specifies
+ two factors, Α<sub>min</sub> and
+@@ -668,10 +667,10 @@
+ and some load factor be denoted by Α. We would like to
+ calculate the minimal length of k, such that if there were Α
+ m elements in the hash table, a probe sequence of length k would
+- be found with probability at most 1/m.</p><div class="figure"><a id="idp18197088"></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
++ be found with probability at most 1/m.</p><div class="figure"><a id="idm269984012944"></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
+ k appears in bin i by p<sub>i</sub>, the
+ length of the probe sequence of bin i by
+- l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="idp18202592"></a><p class="title"><strong>Equation 22.7. 
++ l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="idm269984007440"></a><p class="title"><strong>Equation 22.7. 
+ Probability of Probe Sequence of Length k
+ </strong></p><div class="equation-contents"><span class="mathphrase">
+ p<sub>1</sub> =
+@@ -685,7 +684,7 @@
+ l<sub>i</sub> are negatively-dependent
+ (<a class="xref" href="policy_data_structures.html#biblio.dubhashi98neg" title="Balls and bins: A study in negative dependence">[biblio.dubhashi98neg]</a>)
+ . Let
+- I(.) denote the indicator function. Then</p><div class="equation"><a id="idp18209360"></a><p class="title"><strong>Equation 22.8. 
++ I(.) denote the indicator function. Then</p><div class="equation"><a id="idm269984000672"></a><p class="title"><strong>Equation 22.8. 
+ Probability Probe Sequence in Some Bin
+ </strong></p><div class="equation-contents"><span class="mathphrase">
+ P( exists<sub>i</sub> l<sub>i</sub> ≥ k ) =
+@@ -697,11 +696,11 @@
+ be applied to negatively-dependent variables (<a class="xref" href="policy_data_structures.html#biblio.dubhashi98neg" title="Balls and bins: A study in negative dependence">[biblio.dubhashi98neg]</a>). Inserting the first probability
+ equation into the second one, and equating with 1/m, we
+ obtain</p><p>k ~ √ ( 2 α ln 2 m ln(m) )
+- ) .</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl"></a>Implementation</h6></div></div></div><p>This sub-subsection describes the implementation of the
++ ) .</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl"></a>Implementation</h6></div></div></div><p>This sub-subsection describes the implementation of the
+ above in this library. It first describes resize policies and
+ their decomposition into trigger and size policies, then
+ describes pre-defined classes, and finally discusses controlled
+- access the policies' internals.</p><div class="section" title="Decomposition"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl.decomposition"></a>Decomposition</h6></div></div></div><p>Each hash-based container is parametrized by a
++ access the policies' internals.</p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl.decomposition"></a>Decomposition</h6></div></div></div><p>Each hash-based container is parametrized by a
+ <code class="classname">Resize_Policy</code> parameter; the container derives
+ <code class="classname">public</code>ly from <code class="classname">Resize_Policy</code>. For
+ example:</p><pre class="programlisting">
+@@ -724,7 +723,7 @@
+ a resize is needed, and if so, what is the new size (points D
+ to G); following the resize, it notifies the policy that a
+ resize has completed (point H); finally, the element is
+- inserted, and the policy notified (point I).</p><div class="figure"><a id="idp18227776"></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
++ inserted, and the policy notified (point I).</p><div class="figure"><a id="idm269983982160"></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
+ decomposed to a size policy and a trigger policy. Consequently,
+ the library contains a single class for instantiating a resize
+ policy: <code class="classname">hash_standard_resize_policy</code>
+@@ -733,9 +732,9 @@
+ 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>)
+ to these policies.</p><p>The two graphics immediately below show sequence diagrams
+ illustrating the interaction between the standard resize policy
+- and its trigger and size policies, respectively.</p><div class="figure"><a id="idp18235600"></a><p class="title"><strong>Figure 22.20. Standard resize policy trigger sequence
+- 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="idp18239760"></a><p class="title"><strong>Figure 22.21. Standard resize policy size sequence
+- 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" title="Predefined Policies"><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
++ and its trigger and size policies, respectively.</p><div class="figure"><a id="idm269983974384"></a><p class="title"><strong>Figure 22.20. Standard resize policy trigger sequence
++ 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="idm269983970224"></a><p class="title"><strong>Figure 22.21. Standard resize policy size sequence
++ 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
+ 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>
+ implements a load check trigger policy.</p></li><li class="listitem"><p><code class="classname">cc_hash_max_collision_check_resize_trigger</code>
+ implements a collision check trigger policy.</p></li><li class="listitem"><p><code class="classname">hash_exponential_size_policy</code>
+@@ -753,7 +752,7 @@
+ instantiated by <code class="classname">hash_load_check_resize_trigger</code>,
+ or <code class="classname">cc_hash_max_collision_check_resize_trigger</code>;
+ <code class="classname">Size_Policy</code> is instantiated by <code class="classname">hash_exponential_size_policy</code>,
+- or <code class="classname">hash_prime_size_policy</code>.</p></div><div class="section" title="Controling Access to Internals"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl.internals"></a>Controling Access to Internals</h6></div></div></div><p>There are cases where (controlled) access to resize
++ or <code class="classname">hash_prime_size_policy</code>.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl.internals"></a>Controling Access to Internals</h6></div></div></div><p>There are cases where (controlled) access to resize
+ policies' internals is beneficial. E.g., it is sometimes
+ useful to query a hash-table for the table's actual size (as
+ opposed to its <code class="function">size()</code> - the number of values it
+@@ -798,11 +797,11 @@
+ </pre><p>which resizes the container. Implementations of
+ <code class="classname">Resize_Policy</code> can export public methods for resizing
+ the container externally; these methods internally call
+- <code class="classname">do_resize</code> to resize the table.</p></div></div></div><div class="section" title="Policy Interactions"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.policy_interaction"></a>Policy Interactions</h6></div></div></div><p>
++ <code class="classname">do_resize</code> to resize the table.</p></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.policy_interaction"></a>Policy Interactions</h6></div></div></div><p>
+ </p><p>Hash-tables are unfortunately especially susceptible to
+ choice of policies. One of the more complicated aspects of this
+ is that poor combinations of good policies can form a poor
+- container. Following are some considerations.</p><div class="section" title="probe/size/trigger"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.probesizetrigger"></a>probe/size/trigger</h6></div></div></div><p>Some combinations do not work well for probing containers.
++ container. Following are some considerations.</p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.probesizetrigger"></a>probe/size/trigger</h6></div></div></div><p>Some combinations do not work well for probing containers.
+ For example, combining a quadratic probe policy with an
+ exponential size policy can yield a poor container: when an
+ element is inserted, a trigger policy might decide that there
+@@ -811,13 +810,13 @@
+ the unused entries.</p><p>Unfortunately, this library cannot detect such problems at
+ compilation (they are halting reducible). It therefore defines
+ an exception class <code class="classname">insert_error</code> to throw an
+- exception in this case.</p></div><div class="section" title="hash/trigger"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.hashtrigger"></a>hash/trigger</h6></div></div></div><p>Some trigger policies are especially susceptible to poor
++ exception in this case.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.hashtrigger"></a>hash/trigger</h6></div></div></div><p>Some trigger policies are especially susceptible to poor
+ hash functions. Suppose, as an extreme case, that the hash
+ function transforms each key to the same hash value. After some
+ inserts, a collision detecting policy will always indicate that
+ the container needs to grow.</p><p>The library, therefore, by design, limits each operation to
+ one resize. For each <code class="classname">insert</code>, for example, it queries
+- only once whether a resize is needed.</p></div><div class="section" title="equivalence functors/storing hash values/hash"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.eqstorehash"></a>equivalence functors/storing hash values/hash</h6></div></div></div><p><code class="classname">cc_hash_table</code> and
++ only once whether a resize is needed.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.eqstorehash"></a>equivalence functors/storing hash values/hash</h6></div></div></div><p><code class="classname">cc_hash_table</code> and
+ <code class="classname">gp_hash_table</code> are
+ parametrized by an equivalence functor and by a
+ <code class="classname">Store_Hash</code> parameter. If the latter parameter is
+@@ -828,7 +827,7 @@
+ collisions for other types.</p><p>If a ranged-hash function or ranged probe function is
+ directly supplied, however, then it makes no sense to store the
+ hash value with each entry. This library's container will
+- fail at compilation, by design, if this is attempted.</p></div><div class="section" title="size/load-check trigger"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.sizeloadtrigger"></a>size/load-check trigger</h6></div></div></div><p>Assume a size policy issues an increasing sequence of sizes
++ fail at compilation, by design, if this is attempted.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.sizeloadtrigger"></a>size/load-check trigger</h6></div></div></div><p>Assume a size policy issues an increasing sequence of sizes
+ a, a q, a q<sup>1</sup>, a q<sup>2</sup>, ... For
+ example, an exponential size policy might issue the sequence of
+ sizes 8, 16, 32, 64, ...</p><p>If a load-check trigger policy is used, with loads
+@@ -836,7 +835,7 @@
+ respectively, then it is a good idea to have:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>α<sub>max</sub> ~ 1 / q</p></li><li class="listitem"><p>α<sub>min</sub> &lt; 1 / (2 q)</p></li></ol></div><p>This will ensure that the amortized hash cost of each
+ modifying operation is at most approximately 3.</p><p>α<sub>min</sub> ~ α<sub>max</sub> is, in
+ any case, a bad choice, and α<sub>min</sub> &gt;
+- α <sub>max</sub> is horrendous.</p></div></div></div></div><div class="section" title="tree"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.tree"></a>tree</h4></div></div></div><div class="section" title="Interface"><div class="titlepage"><div><div><h5 class="title"><a id="container.tree.interface"></a>Interface</h5></div></div></div><p>The tree-based container has the following declaration:</p><pre class="programlisting">
++ α <sub>max</sub> is horrendous.</p></div></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.tree"></a>tree</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.tree.interface"></a>Interface</h5></div></div></div><p>The tree-based container has the following declaration:</p><pre class="programlisting">
+ template&lt;
+ typename Key,
+ typename Mapped,
+@@ -861,7 +860,7 @@
+ Note that containers based on the former two contain more types
+ and methods than the latter (e.g.,
+ <code class="classname">reverse_iterator</code> and <code class="classname">rbegin</code>), and different
+- exception and invalidation guarantees.</p></div><div class="section" title="Details"><div class="titlepage"><div><div><h5 class="title"><a id="container.tree.details"></a>Details</h5></div></div></div><div class="section" title="Node Invariants"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.node"></a>Node Invariants</h6></div></div></div><p>Consider the two trees in the graphic below, labels A and B. The first
++ exception and invalidation guarantees.</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.tree.details"></a>Details</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.node"></a>Node Invariants</h6></div></div></div><p>Consider the two trees in the graphic below, labels A and B. The first
+ is a tree of floats; the second is a tree of pairs, each
+ signifying a geometric line interval. Each element in a tree is refered to as a node of the tree. Of course, each of
+ these trees can support the usual queries: the first can easily
+@@ -877,7 +876,7 @@
+ 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
+ each node the size of the sub-tree rooted at the node; the
+ second stores at each node the maximal endpoint of the
+- intervals at the sub-tree rooted at the node.</p><div class="figure"><a id="idp18317728"></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
++ intervals at the sub-tree rooted at the node.</p><div class="figure"><a id="idm269983892128"></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
+ 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
+ should be (if any).</p></li><li class="listitem"><p>Various operations can invalidate node
+ invariants. The graphic below shows how a right rotation,
+@@ -891,9 +890,9 @@
+ metadata.</p></li><li class="listitem"><p>It is not feasible to know in advance which methods trees
+ can support. Besides the usual <code class="classname">find</code> method, the
+ first tree can support a <code class="classname">find_by_order</code> method, while
+- the second can support an <code class="classname">overlaps</code> method.</p></li></ol></div><div class="figure"><a id="idp18327168"></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:
++ the second can support an <code class="classname">overlaps</code> method.</p></li></ol></div><div class="figure"><a id="idm269983882688"></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:
+ node iterators, and template-template node updater
+- parameters.</p><div class="section" title="Node Iterators"><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
++ 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
+ types, <code class="classname">const_node_iterator</code>
+ and <code class="classname">node_iterator</code>.
+ These iterators allow descending from a node to one of its
+@@ -913,14 +912,14 @@
+ node_end();
+ </pre><p>The first pairs return node iterators corresponding to the
+ root node of the tree; the latter pair returns node iterators
+- corresponding to a just-after-leaf node.</p></div><div class="section" title="Node Updator"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.node.updator"></a>Node Updator</h6></div></div></div><p>The tree-based containers are parametrized by a
++ corresponding to a just-after-leaf node.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.node.updator"></a>Node Updator</h6></div></div></div><p>The tree-based containers are parametrized by a
+ <code class="classname">Node_Update</code> template-template parameter. A
+ tree-based container instantiates
+ <code class="classname">Node_Update</code> to some
+ <code class="classname">node_update</code> class, and publicly subclasses
+ <code class="classname">node_update</code>. The graphic below shows this
+ scheme, as well as some predefined policies (which are explained
+- below).</p><div class="figure"><a id="idp18340336"></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
++ below).</p><div class="figure"><a id="idm269983869584"></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
+ <code class="classname">Node_Update</code>) must define <code class="classname">metadata_type</code> as
+ the type of metadata it requires. For order statistics,
+ e.g., <code class="classname">metadata_type</code> might be <code class="classname">size_t</code>.
+@@ -939,7 +938,7 @@
+ <code class="classname">nd_it</code>. For example, say node x in the
+ graphic below label A has an invalid invariant, but its' children,
+ y and z have valid invariants. After the invocation, all three
+- nodes should have valid invariants, as in label B.</p><div class="figure"><a id="idp18352000"></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,
++ nodes should have valid invariants, as in label B.</p><div class="figure"><a id="idm269983857920"></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,
+ it invokes this method in its <code class="classname">node_update</code> base to
+ restore the invariant. For example, the graphic below shows
+ an <code class="function">insert</code> operation (point A); the tree performs some
+@@ -947,7 +946,7 @@
+ C, and D). (It is well known that any <code class="function">insert</code>,
+ <code class="function">erase</code>, <code class="function">split</code> or <code class="function">join</code>, can restore
+ 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>)
+- .</p><div class="figure"><a id="idp18360176"></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
++ .</p><div class="figure"><a id="idm269983849744"></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
+ 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
+ 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
+ tree?</p></li><li class="listitem"><p>How can the following cyclic dependency be resolved?
+@@ -989,9 +988,9 @@
+ node's metadata (this is halting reducible). In the graphic
+ below, assume the shaded node is inserted. The tree would have
+ to traverse the useless path shown to the root, applying
+- redundant updates all the way.</p></li></ol></div><div class="figure"><a id="idp18382432"></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>
++ redundant updates all the way.</p></li></ol></div><div class="figure"><a id="idm269983827488"></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>
+ solves both these problems. The tree detects that node
+- invariants are irrelevant, and defines all accordingly.</p></div></div><div class="section" title="Split and Join"><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.
++ 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.
+ It is possible to split a tree so that it passes
+ all nodes with keys larger than a given key to a different
+ tree. These methods have the following advantages over the
+@@ -1001,7 +1000,7 @@
+ trees are split and joined at linear complexity. The
+ alternatives have super-linear complexity.</p></li><li class="listitem"><p>Aside from orders of growth, these operations perform
+ few allocations and de-allocations. For red-black trees, allocations are not performed,
+- and the methods are exception-free. </p></li></ol></div></div></div></div><div class="section" title="Trie"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.trie"></a>Trie</h4></div></div></div><div class="section" title="Interface"><div class="titlepage"><div><div><h5 class="title"><a id="container.trie.interface"></a>Interface</h5></div></div></div><p>The trie-based container has the following declaration:</p><pre class="programlisting">
++ and the methods are exception-free. </p></li></ol></div></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.trie"></a>Trie</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.trie.interface"></a>Interface</h5></div></div></div><p>The trie-based container has the following declaration:</p><pre class="programlisting">
+ template&lt;typename Key,
+ typename Mapped,
+ typename Cmp_Fn = std::less&lt;Key&gt;,
+@@ -1035,7 +1034,7 @@
+ complexity and size).</p></li><li class="listitem"><p>It works well for common-prefix keys.</p></li><li class="listitem"><p>It can support efficiently queries such as which
+ keys match a certain prefix. This is sometimes useful in file
+ systems and routers, and for "type-ahead" aka predictive text matching
+- on mobile devices.</p></li></ol></div></div><div class="section" title="Details"><div class="titlepage"><div><div><h5 class="title"><a id="container.trie.details"></a>Details</h5></div></div></div><div class="section" title="Element Access Traits"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.etraits"></a>Element Access Traits</h6></div></div></div><p>A trie inherently views its keys as sequences of elements.
++ on mobile devices.</p></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.trie.details"></a>Details</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.etraits"></a>Element Access Traits</h6></div></div></div><p>A trie inherently views its keys as sequences of elements.
+ For example, a trie can view a string as a sequence of
+ characters. A trie needs to map each of n elements to a
+ number in {0, n - 1}. For example, a trie can map a
+@@ -1072,7 +1071,7 @@
+ sub-tree with leafs "a" and "as". The maximal common prefix is
+ "a". The internal node contains, consequently, to const
+ iterators, one pointing to <code class="varname">'a'</code>, and the other to
+- <code class="varname">'s'</code>.</p><div class="figure"><a id="idp18427056"></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" title="Node Invariants"><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
++ <code class="varname">'s'</code>.</p><div class="figure"><a id="idm269983782736"></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
+ tree-based containers. There are two minor
+ differences, though, which, unfortunately, thwart sharing them
+ 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
+@@ -1081,15 +1080,15 @@
+ parametrized by <code class="classname">Cmp_Fn</code>.</p></li><li class="listitem"><p>Tree-based containers store values in all nodes, while
+ trie-based containers (at least in this implementation) store
+ values in leafs.</p></li></ol></div><p>The graphic below shows the scheme, as well as some predefined
+- policies (which are explained below).</p><div class="figure"><a id="idp18437488"></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
++ policies (which are explained below).</p><div class="figure"><a id="idm269983772240"></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
+ updating policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ <code class="classname">trie_order_statistics_node_update</code>
+ supports order statistics.
+ </p></li><li class="listitem"><p><code class="classname">trie_prefix_search_node_update</code>
+ supports searching for ranges that match a given prefix.</p></li><li class="listitem"><p><code class="classname">null_node_update</code>
+- is the null node updater.</p></li></ol></div></div><div class="section" title="Split and Join"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.split"></a>Split and Join</h6></div></div></div><p>Trie-based containers support split and join methods; the
++ is the null node updater.</p></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.split"></a>Split and Join</h6></div></div></div><p>Trie-based containers support split and join methods; the
+ rationale is equal to that of tree-based containers supporting
+- these methods.</p></div></div></div><div class="section" title="List"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.list"></a>List</h4></div></div></div><div class="section" title="Interface"><div class="titlepage"><div><div><h5 class="title"><a id="container.list.interface"></a>Interface</h5></div></div></div><p>The list-based container has the following declaration:</p><pre class="programlisting">
++ these methods.</p></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.list"></a>List</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.list.interface"></a>Interface</h5></div></div></div><p>The list-based container has the following declaration:</p><pre class="programlisting">
+ template&lt;typename Key,
+ typename Mapped,
+ typename Eq_Fn = std::equal_to&lt;Key&gt;,
+@@ -1124,12 +1123,12 @@
+ useful manner? Remarkably, many on-line competitive
+ algorithms exist for reordering lists to reflect access
+ prediction. (See <a class="xref" href="policy_data_structures.html#biblio.motwani95random" title="Randomized Algorithms">[biblio.motwani95random]</a> and <a class="xref" href="policy_data_structures.html#biblio.andrew04mtf" title="MTF, Bit, and COMB: A Guide to Deterministic and Randomized Algorithms for the List Update Problem">[biblio.andrew04mtf]</a>).
+- </p></div><div class="section" title="Details"><div class="titlepage"><div><div><h5 class="title"><a id="container.list.details"></a>Details</h5></div></div></div><p>
+- </p><div class="section" title="Underlying Data Structure"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.ds"></a>Underlying Data Structure</h6></div></div></div><p>The graphic below shows a
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.list.details"></a>Details</h5></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.ds"></a>Underlying Data Structure</h6></div></div></div><p>The graphic below shows a
+ simple list of integer keys. If we search for the integer 6, we
+ are paying an overhead: the link with key 6 is only the fifth
+ link; if it were the first link, it could be accessed
+- faster.</p><div class="figure"><a id="idp18468000"></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
++ faster.</p><div class="figure"><a id="idm269983741664"></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
+ accessed. They try to determine, by the access history, which
+ keys to move to the front of the list. Some of these algorithms
+ require adding some metadata alongside each entry.</p><p>For example, in the graphic below label A shows the counter
+@@ -1139,7 +1138,7 @@
+ predetermined value, say 10, as shown in label C, the count is set
+ to 0 and the node is moved to the front of the list, as in label
+ D.
+- </p><div class="figure"><a id="idp18473584"></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" title="Policies"><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
++ </p><div class="figure"><a id="idm269983736080"></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
+ implementing any algorithm moving nodes to the front of the
+ list (policies implementing algorithms interchanging nodes are
+ unsupported).</p><p>Associative containers based on lists are parametrized by a
+@@ -1174,7 +1173,7 @@
+ the list. The latter type is very useful in this library,
+ since there is no need to associate metadata with each element.
+ (See <a class="xref" href="policy_data_structures.html#biblio.andrew04mtf" title="MTF, Bit, and COMB: A Guide to Deterministic and Randomized Algorithms for the List Update Problem">[biblio.andrew04mtf]</a>
+- </p></div><div class="section" title="Use in Multimaps"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.mapped"></a>Use in Multimaps</h6></div></div></div><p>In this library, there are no equivalents for the standard's
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.mapped"></a>Use in Multimaps</h6></div></div></div><p>In this library, there are no equivalents for the standard's
+ multimaps and multisets; instead one uses an associative
+ container mapping primary keys to secondary keys.</p><p>List-based containers are especially useful as associative
+ containers for secondary keys. In fact, they are implemented
+@@ -1203,7 +1202,7 @@
+ object (a hash-based container object holds a
+ hash functor). List-based containers, conversely, only have
+ class-wide policy objects.
+- </p></li></ol></div></div></div></div><div class="section" title="Priority Queue"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.priority_queue"></a>Priority Queue</h4></div></div></div><div class="section" title="Interface"><div class="titlepage"><div><div><h5 class="title"><a id="container.priority_queue.interface"></a>Interface</h5></div></div></div><p>The priority queue container has the following
++ </p></li></ol></div></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.priority_queue"></a>Priority Queue</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.priority_queue.interface"></a>Interface</h5></div></div></div><p>The priority queue container has the following
+ declaration:
+ </p><pre class="programlisting">
+ template&lt;typename Value_Type,
+@@ -1239,7 +1238,7 @@
+ insufficient for manipulating priority-queues. </p><p>Different settings require different priority-queue
+ implementations which are described in later; see traits
+ discusses ways to differentiate between the different traits of
+- different implementations.</p></div><div class="section" title="Details"><div class="titlepage"><div><div><h5 class="title"><a id="container.priority_queue.details"></a>Details</h5></div></div></div><div class="section" title="Iterators"><div class="titlepage"><div><div><h6 class="title"><a id="container.priority_queue.details.iterators"></a>Iterators</h6></div></div></div><p>There are many different underlying-data structures for
++ different implementations.</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.priority_queue.details"></a>Details</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.priority_queue.details.iterators"></a>Iterators</h6></div></div></div><p>There are many different underlying-data structures for
+ implementing priority queues. Unfortunately, most such
+ structures are oriented towards making <code class="function">push</code> and
+ <code class="function">top</code> efficient, and consequently don't allow efficient
+@@ -1306,12 +1305,12 @@
+ this data and a priority queue's iterator. Using the embedded
+ method would need to use two associative containers. Similar
+ problems might arise in cases where a value can reside
+- simultaneously in many priority queues.</p></div><div class="section" title="Underlying Data Structure"><div class="titlepage"><div><div><h6 class="title"><a id="container.priority_queue.details.d"></a>Underlying Data Structure</h6></div></div></div><p>There are three main implementations of priority queues: the
++ simultaneously in many priority queues.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.priority_queue.details.d"></a>Underlying Data Structure</h6></div></div></div><p>There are three main implementations of priority queues: the
+ first employs a binary heap, typically one which uses a
+ sequence; the second uses a tree (or forest of trees), which is
+ typically less structured than an associative container's tree;
+ the third simply uses an associative container. These are
+- shown in the graphic below, in labels A1 and A2, label B, and label C.</p><div class="figure"><a id="idp18537424"></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
++ shown in the graphic below, in labels A1 and A2, label B, and label C.</p><div class="figure"><a id="idm269983672320"></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
+ from a priority queue must incur a logarithmic expense (in the
+ amortized sense). Any priority queue implementation that would
+ avoid this, would violate known bounds on comparison-based
+@@ -1381,7 +1380,7 @@
+ at all; the priority queue itself is an associative container.
+ Most associative containers are too structured to compete with
+ priority queues in terms of <code class="function">push</code> and <code class="function">pop</code>
+- performance.</p></div><div class="section" title="Traits"><div class="titlepage"><div><div><h6 class="title"><a id="container.priority_queue.details.traits"></a>Traits</h6></div></div></div><p>It would be nice if all priority queues could
++ performance.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.priority_queue.details.traits"></a>Traits</h6></div></div></div><p>It would be nice if all priority queues could
+ share exactly the same behavior regardless of implementation. Sadly, this is not possible. Just one for instance is in join operations: joining
+ two binary heaps might throw an exception (not corrupt
+ any of the heaps on which it operates), but joining two pairing
+@@ -1391,7 +1390,7 @@
+ container <code class="classname">Cntnr</code>, the tag of the underlying
+ data structure can be found via <code class="classname">typename
+ Cntnr::container_category</code>; this is one of the possible tags shown in the graphic below.
+- </p><div class="figure"><a id="idp18572464"></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
++ </p><div class="figure"><a id="idm269983637280"></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
+ container type for its attributes. Given any container
+ <code class="classname">Cntnr</code>, then </p><pre class="programlisting">__gnu_pbds::container_traits&lt;Cntnr&gt;</pre><p>
+ is a traits class identifying the properties of the
+@@ -1427,4 +1426,4 @@
+ <code class="function">erase</code> operations is non-negligible (say
+ super-logarithmic in the total sequence of operations) - binary
+ heaps will perform badly.
+- </p></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures_using.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_based_data_structures_test.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Testing</td></tr></table></div></body></html>
++ </p></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures_using.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_based_data_structures_test.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Testing</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures_using.html
++++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures_using.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Using"><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" title="Prerequisites"><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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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
+ other libraries except the standard C++ library . All classes are
+ defined in namespace <code class="code">__gnu_pbds</code>. The library internally
+ uses macros beginning with <code class="code">PB_DS</code>, but
+@@ -11,11 +10,11 @@
+ Further dependencies are necessary to create the visual output
+ for the performance tests. To create these graphs, an
+ additional package is needed: <span class="command"><strong>pychart</strong></span>.
+- </p></div><div class="section" title="Organization"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.organization"></a>Organization</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.organization"></a>Organization</h3></div></div></div><p>
+ The various data structures are organized as follows.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Branch-Based
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
+ <code class="classname">basic_branch</code>
+ is an abstract base class for branched-based
+ associative-containers
+@@ -29,7 +28,7 @@
+ associative-containers
+ </p></li></ul></div></li><li class="listitem"><p>
+ Hash-Based
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
+ <code class="classname">basic_hash_table</code>
+ is an abstract base class for hash-based
+ associative-containers
+@@ -43,12 +42,12 @@
+ associative-containers
+ </p></li></ul></div></li><li class="listitem"><p>
+ List-Based
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
+ <code class="classname">list_update</code>
+ list-based update-policy associative container
+ </p></li></ul></div></li><li class="listitem"><p>
+ Heap-Based
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
+ <code class="classname">priority_queue</code>
+ A priority queue.
+ </p></li></ul></div></li></ul></div><p>
+@@ -62,7 +61,7 @@
+ In addition, there are the following diagnostics classes,
+ used to report errors specific to this library's data
+ structures.
+- </p><div class="figure"><a id="idp17768064"></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" title="Tutorial"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.tutorial"></a>Tutorial</h3></div></div></div><div class="section" title="Basic Use"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.basic"></a>Basic Use</h4></div></div></div><p>
++ </p><div class="figure"><a id="idm269984441456"></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>
+ For the most part, the policy-based containers containers in
+ namespace <code class="literal">__gnu_pbds</code> have the same interface as
+ the equivalent containers in the standard C++ library, except for
+@@ -186,7 +185,7 @@
+ </pre><p>
+ so all hash-based associative containers inherit the same
+ hash-functor accessor methods.
+- </p></div><div class="section" title="Configuring via Template Parameters"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.configuring"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.configuring"></a>
+ Configuring via Template Parameters
+ </h4></div></div></div><p>
+ In general, each of this library's containers is
+@@ -240,7 +239,7 @@
+ by one of them.</p><p>Note that as opposed to the
+ <code class="classname">std::priority_queue</code>,
+ <code class="classname">__gnu_pbds::priority_queue</code> is not a
+- sequence-adapter; it is a regular container.</p></div><div class="section" title="Querying Container Attributes"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.traits"></a>
++ sequence-adapter; it is a regular container.</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.traits"></a>
+ Querying Container Attributes
+ </h4></div></div></div><p></p><p>A containers underlying data structure
+ affect their performance; Unfortunately, they can also affect
+@@ -278,7 +277,7 @@
+ </pre><p>is the container's invalidation guarantee. Invalidation
+ guarantees are especially important regarding priority queues,
+ since in this library's design, iterators are practically the
+- only way to manipulate them.</p></div><div class="section" title="Point and Range Iteration"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.point_range_iteration"></a>
++ only way to manipulate them.</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.point_range_iteration"></a>
+ Point and Range Iteration
+ </h4></div></div></div><p></p><p>This library differentiates between two types of methods
+ and iterators: point-type, and range-type. For example,
+@@ -377,11 +376,11 @@
+ </pre><p>
+ gives one of three pre-determined types that answer this
+ query.
+- </p></div></div><div class="section" title="Examples"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.examples"></a>Examples</h3></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.examples"></a>Examples</h3></div></div></div><p>
+ Additional code examples are provided in the source
+ distribution, as part of the regression and performance
+ testsuite.
+- </p><div class="section" title="Intermediate Use"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.examples.basic"></a>Intermediate Use</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.examples.basic"></a>Intermediate Use</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Basic use of maps:
+ <code class="filename">basic_map.cc</code>
+ </p></li><li class="listitem"><p>
+@@ -405,7 +404,7 @@
+ </p></li><li class="listitem"><p>
+ Conditionally erasing values from a priority queue:
+ <code class="filename">priority_queue_erase_if.cc</code>
+- </p></li></ul></div></div><div class="section" title="Querying with container_traits"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.examples.query"></a>Querying with <code class="classname">container_traits</code> </h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.examples.query"></a>Querying with <code class="classname">container_traits</code> </h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Using <code class="classname">container_traits</code> to query
+ about underlying data structure behavior:
+ <code class="filename">assoc_container_traits.cc</code>
+@@ -416,7 +415,7 @@
+ Using <code class="classname">container_traits</code>
+ to query about underlying data structure behavior:
+ <code class="filename">priority_queue_container_traits.cc</code>
+- </p></li></ul></div></div><div class="section" title="By Container Method"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.examples.container"></a>By Container Method</h4></div></div></div><p></p><div class="section" title="Hash-Based"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.using.examples.container.hash"></a>Hash-Based</h5></div></div></div><div class="section" title="size Related"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.hash.resize"></a>size Related</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.examples.container"></a>By Container Method</h4></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.using.examples.container.hash"></a>Hash-Based</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.hash.resize"></a>size Related</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Setting the initial size of a hash-based container
+ object:
+ <code class="filename">hash_initial_size.cc</code>
+@@ -434,7 +433,7 @@
+ </p></li><li class="listitem"><p>
+ Changing the load factors of a hash-based container
+ object: <code class="filename">hash_load_set_change.cc</code>
+- </p></li></ul></div></div><div class="section" title="Hashing Function Related"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.hash.hashor"></a>Hashing Function Related</h6></div></div></div><p></p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.hash.hashor"></a>Hashing Function Related</h6></div></div></div><p></p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Using a modulo range-hashing function for the case of an
+ unknown skewed key distribution:
+ <code class="filename">hash_mod.cc</code>
+@@ -448,7 +447,7 @@
+ </p></li><li class="listitem"><p>
+ Writing a ranged-hash functor:
+ <code class="filename">ranged_hash.cc</code>
+- </p></li></ul></div></div></div><div class="section" title="Branch-Based"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.using.examples.container.branch"></a>Branch-Based</h5></div></div></div><div class="section" title="split or join Related"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.branch.split"></a>split or join Related</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.using.examples.container.branch"></a>Branch-Based</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.branch.split"></a>split or join Related</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Joining two tree-based container objects:
+ <code class="filename">tree_join.cc</code>
+ </p></li><li class="listitem"><p>
+@@ -458,21 +457,21 @@
+ Order statistics while joining two tree-based container
+ objects:
+ <code class="filename">tree_order_statistics_join.cc</code>
+- </p></li></ul></div></div><div class="section" title="Node Invariants"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.branch.invariants"></a>Node Invariants</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.branch.invariants"></a>Node Invariants</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Using trees for order statistics:
+ <code class="filename">tree_order_statistics.cc</code>
+ </p></li><li class="listitem"><p>
+ Augmenting trees to support operations on line
+ intervals:
+ <code class="filename">tree_intervals.cc</code>
+- </p></li></ul></div></div><div class="section" title="trie"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.branch.trie"></a>trie</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.branch.trie"></a>trie</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Using a PATRICIA trie for DNA strings:
+ <code class="filename">trie_dna.cc</code>
+ </p></li><li class="listitem"><p>
+ Using a PATRICIA
+ trie for finding all entries whose key matches a given prefix:
+ <code class="filename">trie_prefix_search.cc</code>
+- </p></li></ul></div></div></div><div class="section" title="Priority Queues"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.using.examples.container.priority_queue"></a>Priority Queues</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.using.examples.container.priority_queue"></a>Priority Queues</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Cross referencing an associative container and a priority
+ queue: <code class="filename">priority_queue_xref.cc</code>
+ </p></li><li class="listitem"><p>
+@@ -480,4 +479,4 @@
+ very simple version of Dijkstra's shortest path
+ algorithm:
+ <code class="filename">priority_queue_dijkstra.cc</code>
+- </p></li></ul></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 22. Policy-Based Data Structures </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>
++ </p></li></ul></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 22. Policy-Based Data Structures </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>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/profile_mode.html
++++ b/src/libstdc++-v3/doc/html/manual/profile_mode.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s05.html" title="Testing" /><link rel="next" href="bk01pt03ch19s02.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="bk01pt03ch18s05.html">Prev</a> </td><th width="60%" align="center">Part III. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s05.html" title="Testing" /><link rel="next" href="bk01pt03ch19s02.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="bk01pt03ch18s05.html">Prev</a> </td><th width="60%" align="center">Part III. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 19. Profile Mode"><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="bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.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="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.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="bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.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="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.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" title="Intro"><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>
++</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s02.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="bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.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="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.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="bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.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="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.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>
+ <span class="emphasis"><em>Goal: </em></span>Give performance improvement advice based on
+ recognition of suboptimal usage patterns of the standard library.
+ </p><p>
+@@ -16,7 +15,7 @@
+ CGO 2009</a>.
+ </p><p>
+ <span class="emphasis"><em>Strengths: </em></span>
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Unintrusive solution. The application code does not require any
+ modification.
+ </p></li><li class="listitem"><p> The advice is call context sensitive, thus capable of
+@@ -27,14 +26,14 @@
+ </p></li></ul></div><p>
+ </p><p>
+ <span class="emphasis"><em>Drawbacks: </em></span>
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ You must recompile the application code with custom options.
+ </p></li><li class="listitem"><p>You must run the application on representative input.
+ The advice is input dependent.
+ </p></li><li class="listitem"><p>
+ The execution time will increase, in some cases by factors.
+ </p></li></ul></div><p>
+- </p><div class="section" title="Using the Profile Mode"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.using"></a>Using the Profile Mode</h3></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.using"></a>Using the Profile Mode</h3></div></div></div><p>
+ This is the anticipated common workflow for program <code class="code">foo.cc</code>:
+ </p><pre class="programlisting">
+ $ cat foo.cc
+@@ -54,7 +53,7 @@
+ </pre><p>
+ </p><p>
+ Anatomy of a warning:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Warning id. This is a short descriptive string for the class
+ that this warning belongs to. E.g., "vector-to-list".
+ </p></li><li class="listitem"><p>
+@@ -94,11 +93,11 @@
+ We believe such warnings can help users understand the performance
+ behavior of their application better, which can lead to changes
+ at a higher abstraction level.
+- </p></div><div class="section" title="Tuning the Profile Mode"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.tuning"></a>Tuning the Profile Mode</h3></div></div></div><p>Compile time switches and environment variables (see also file
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.tuning"></a>Tuning the Profile Mode</h3></div></div></div><p>Compile time switches and environment variables (see also file
+ profiler.h). Unless specified otherwise, they can be set at compile time
+ using -D_&lt;name&gt; or by setting variable &lt;name&gt;
+ in the environment where the program is run, before starting execution.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <code class="code">_GLIBCXX_PROFILE_NO_&lt;diagnostic&gt;</code>:
+ disable specific diagnostics.
+ See section Diagnostics for possible values.
+@@ -138,9 +137,9 @@
+ call context.
+ (Environment variable not supported.)
+ </p></li></ul></div><p>
+- </p></div></div><div class="bibliography" title="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="idp17357280"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269984851168"></a><p><span class="citetitle"><em class="citetitle">
+ Perflint: A Context Sensitive Performance Advisor for C++ Programs
+ </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">
+ Proceedings of the 2009 International Symposium on Code Generation
+ and Optimization
+- . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Testing </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>
++ . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Testing </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>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/setup.html
++++ b/src/libstdc++-v3/doc/html/manual/setup.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Introduction
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="configure.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 2. Setup"><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
++</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
+ and properly built binaries useful for linking to other software is
+ a multi-step process. Steps include getting the sources,
+ configuring and building the sources, testing, and installation.
+@@ -19,7 +18,7 @@
+ make install
+ </pre><p>
+ Each step is described in more detail in the following sections.
+- </p><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.prereq"></a>Prerequisites</h2></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.prereq"></a>Prerequisites</h2></div></div></div><p>
+ Because libstdc++ is part of GCC, the primary source for
+ installation instructions is
+ <a class="link" href="http://gcc.gnu.org/install/" target="_top">the GCC install page</a>.
+@@ -45,7 +44,7 @@
+ Hacking</a> in the appendix for full details.
+ </p><p>
+ Finally, a few system-specific requirements:
+- </p><div class="variablelist"><dl><dt><span class="term">linux</span></dt><dd><p>
++ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">linux</span></dt><dd><p>
+ If GCC 3.1.0 or later on is being used on GNU/Linux, an attempt
+ will be made to use "C" library functionality necessary for
+ C++ named locale support. For GCC 4.6.0 and later, this
+@@ -87,7 +86,7 @@
+ libstdc++ after "C" locales are installed is not necessary.
+ </p><p>
+ To install support for locales, do only one of the following:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>install all locales</p></li><li class="listitem"><p>install just the necessary locales</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>with Debian GNU/Linux:</p><p> Add the above list, as shown, to the file
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>install all locales</p></li><li class="listitem"><p>install just the necessary locales</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>with Debian GNU/Linux:</p><p> Add the above list, as shown, to the file
+ <code class="code">/etc/locale.gen</code> </p><p> run <code class="code">/usr/sbin/locale-gen</code> </p></li><li class="listitem"><p>on most Unix-like operating systems:</p><p><code class="code"> localedef -i de_DE -f ISO-8859-1 de_DE </code></p><p>(repeat for each entry in the above list) </p></li><li class="listitem"><p>
+ Instructions for other operating systems solicited.
+- </p></li></ul></div></li></ul></div></dd></dl></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bugs.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="configure.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Bugs </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Configure</td></tr></table></div></body></html>
++ </p></li></ul></div></li></ul></div></dd></dl></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bugs.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="configure.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Bugs </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Configure</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/source_code_style.html
++++ b/src/libstdc++-v3/doc/html/manual/source_code_style.html
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Contributing
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="source_design_notes.html">Next</a></td></tr></table><hr /></div><div class="section" title="Coding Style"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.coding_style"></a>Coding Style</h2></div></div></div><p>
+- </p><div class="section" title="Bad Identifiers"><div class="titlepage"><div><div><h3 class="title"><a id="coding_style.bad_identifiers"></a>Bad Identifiers</h3></div></div></div><p>
++</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>
++ </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="coding_style.bad_identifiers"></a>Bad Identifiers</h3></div></div></div><p>
+ Identifiers that conflict and should be avoided.
+ </p><div class="literallayout"><p><br />
+       This is the list of names <span class="quote">“<span class="quote">reserved to the<br />
+@@ -192,7 +191,7 @@
+       // long double conversion members mangled as __opr<br />
+       // http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00060.html<br />
+       __opr<br />
+-    </p></div></div><div class="section" title="By Example"><div class="titlepage"><div><div><h3 class="title"><a id="coding_style.example"></a>By Example</h3></div></div></div><div class="literallayout"><p><br />
++    </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="coding_style.example"></a>By Example</h3></div></div></div><div class="literallayout"><p><br />
+       This library is written to appropriate C++ coding standards. As such,<br />
+       it is intended to precede the recommendations of the GNU Coding<br />
+       Standard, which can be referenced in full here:<br />
+@@ -617,4 +616,4 @@
+         }<br />
+       } // namespace std<br />
+       </code><br />
+-    </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_organization.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_design_notes.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Directory Layout and Source Conventions </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design Notes</td></tr></table></div></body></html>
++    </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_organization.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_design_notes.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Directory Layout and Source Conventions </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design Notes</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/source_design_notes.html
++++ b/src/libstdc++-v3/doc/html/manual/source_design_notes.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Contributing
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="appendix_porting.html">Next</a></td></tr></table><hr /></div><div class="section" title="Design Notes"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.design_notes"></a>Design Notes</h2></div></div></div><p>
++</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>
+ </p><div class="literallayout"><p><br />
+ <br />
+     The Library<br />
+@@ -860,4 +859,4 @@
+   </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_code_style.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_porting.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Coding Style </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix B. 
+ Porting and Maintenance
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/source_organization.html
++++ b/src/libstdc++-v3/doc/html/manual/source_organization.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Contributing
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="source_code_style.html">Next</a></td></tr></table><hr /></div><div class="section" title="Directory Layout and Source Conventions"><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>
++</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>
+ The unpacked source directory of libstdc++ contains the files
+ needed to create the GNU C++ Library.
+ </p><div class="literallayout"><p><br />
+@@ -94,4 +93,4 @@
+   </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_code_style.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix A. 
+ Contributing
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Coding Style</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Coding Style</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/status.html
++++ b/src/libstdc++-v3/doc/html/manual/status.html
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Introduction
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="license.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 1. Status"><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" title="Implementation Status"><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" title="C++ 1998/2003"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.1998"></a>C++ 1998/2003</h3></div></div></div><div class="section" title="Implementation Status"><div class="titlepage"><div><div><h4 class="title"><a id="iso.1998.status"></a>Implementation Status</h4></div></div></div><p>
++</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>
+ This status table is based on the table of contents of ISO/IEC 14882:2003.
+ </p><p>
+ This page describes the C++ support in mainline GCC SVN, not in any
+ particular release.
+-</p><div class="table"><a id="idp4061552"></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">
++</p><div class="table"><a id="idm270001165584"></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">
+ <span class="emphasis"><em>18</em></span>
+ </td><td colspan="3" align="left">
+ <span class="emphasis"><em>Language support</em></span>
+@@ -52,9 +51,9 @@
+ <span class="emphasis"><em>Appendix D</em></span>
+ </td><td colspan="3" align="left">
+ <span class="emphasis"><em>Compatibility features</em></span>
+- </td></tr><tr><td align="left">D.1</td><td align="left">Increment operator with bool operand</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.2</td><td align="left"><code class="code">static</code> keyword</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.3</td><td align="left">Access declarations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.4</td><td align="left">Implicit conversion from const strings</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.5</td><td align="left">C standard library headers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.6</td><td align="left">Old iostreams members</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.7</td><td align="left">char* streams</td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section" title="Implementation Specific Behavior"><div class="titlepage"><div><div><h4 class="title"><a id="iso.1998.specific"></a>Implementation Specific Behavior</h4></div></div></div><p>
++ </td></tr><tr><td align="left">D.1</td><td align="left">Increment operator with bool operand</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.2</td><td align="left"><code class="code">static</code> keyword</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.3</td><td align="left">Access declarations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.4</td><td align="left">Implicit conversion from const strings</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.5</td><td align="left">C standard library headers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.6</td><td align="left">Old iostreams members</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.7</td><td align="left">char* streams</td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="iso.1998.specific"></a>Implementation Specific Behavior</h4></div></div></div><p>
+ The ISO standard defines the following phrase:
+- </p><div class="blockquote"><blockquote class="blockquote"><div class="variablelist"><dl><dt><span class="term">
++ </p><div class="blockquote"><blockquote class="blockquote"><div class="variablelist"><dl class="variablelist"><dt><span class="term">
+ <code class="code">[1.3.5] implementation-defined behavior</code>
+ </span></dt><dd><p>
+ Behavior, for a well-formed program construct and correct data, that
+@@ -142,7 +141,7 @@
+ <a class="link" href="io.html" title="Chapter 13.  Input and Output">in this chapter</a>.
+ </p><p><span class="emphasis"><em>[27.8.1.4]/16</em></span> Calling <code class="code">fstream::sync</code> when
+ a get area exists will... whatever <code class="code">fflush()</code> does, I think.
+- </p></div></div><div class="section" title="C++ 2011"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.2011"></a>C++ 2011</h3></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.2011"></a>C++ 2011</h3></div></div></div><p>
+ <a id="status.iso.200x"></a>
+ This table is based on the table of contents of ISO/IEC
+ JTC1 SC22 WG21 Doc No: N3290 Date: 2011-04-11
+@@ -158,11 +157,15 @@
+ </p><p>
+ This page describes the C++11 support in mainline GCC SVN, not in any
+ particular release.
+-</p><div class="table"><a id="idp7562848"></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">
++</p><div class="table"><a id="idm269994202752"></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">
+ <span class="emphasis"><em>18</em></span>
+ </td><td colspan="3" align="left">
+ <span class="emphasis"><em>Language support</em></span>
+- </td></tr><tr><td align="left">18.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">18.2</td><td align="left">Types</td><td align="left">Partial</td><td align="left">Missing offsetof, max_align_t</td></tr><tr><td align="left">18.3</td><td align="left">Implementation properties</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.3.2</td><td align="left">Numeric Limits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.3.2.3</td><td align="left">Class template <code class="code">numeric_limits</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.3.2.4</td><td align="left"><code class="code">numeric_limits</code> members</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">18.3.2.5</td><td align="left"><code class="code">float_round_style</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">18.3.2.6</td><td align="left"><code class="code">float_denorm_style</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">18.3.2.7</td><td align="left"><code class="code">numeric_limits</code> specializations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.3.3</td><td align="left">C Library</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.4</td><td align="left">Integer types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.4.1</td><td align="left">Header <code class="code">&lt;cstdint&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">18.5</td><td align="left">Start and termination</td><td align="left">Partial</td><td align="left">C library dependency for quick_exit, at_quick_exit</td></tr><tr><td align="left">18.6</td><td align="left">Dynamic memory management</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.7</td><td align="left">Type identification</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.7.1</td><td align="left">Class type_info</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.7.2</td><td align="left">Class bad_cast</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.7.3</td><td align="left">Class bad_typeid</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8</td><td align="left">Exception handling</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.8.1</td><td align="left">Class exception</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.2</td><td align="left">Class bad_exception</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.3</td><td align="left">Abnormal termination</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.4</td><td align="left"><code class="code">uncaught_exception</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.5</td><td align="left">Exception Propagation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.6</td><td align="left"><code class="code">nested_exception</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.9</td><td align="left">Initializer lists</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.9.1</td><td align="left">Initializer list constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.9.2</td><td align="left">Initializer list access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.9.3</td><td align="left">Initializer list range access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.10</td><td align="left">Other runtime support</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
++ </td></tr><tr><td align="left">18.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">18.2</td><td align="left">Types</td><td align="left">Partial</td><td align="left">Missing offsetof, max_align_t</td></tr><tr><td align="left">18.3</td><td align="left">Implementation properties</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.3.2</td><td align="left">Numeric Limits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.3.2.3</td><td align="left">Class template <code class="code">numeric_limits</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.3.2.4</td><td align="left"><code class="code">numeric_limits</code> members</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">18.3.2.5</td><td align="left"><code class="code">float_round_style</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">18.3.2.6</td><td align="left"><code class="code">float_denorm_style</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">18.3.2.7</td><td align="left"><code class="code">numeric_limits</code> specializations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.3.3</td><td align="left">C Library</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.4</td><td align="left">Integer types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.4.1</td><td align="left">Header <code class="code">&lt;cstdint&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">18.5</td><td align="left">Start and termination</td><td align="left">Partial</td><td align="left">C library dependency for quick_exit, at_quick_exit</td></tr><tr bgcolor="#B0B0B0"><td align="left">18.6</td><td align="left">Dynamic memory management</td><td align="left">Partial</td><td align="left">Missing <code class="code">get_new_handler</code>.
++ <code class="code">set_new_handler</code> is not thread-safe.
++ </td></tr><tr><td align="left">18.7</td><td align="left">Type identification</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.7.1</td><td align="left">Class type_info</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.7.2</td><td align="left">Class bad_cast</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.7.3</td><td align="left">Class bad_typeid</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8</td><td align="left">Exception handling</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.8.1</td><td align="left">Class exception</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.2</td><td align="left">Class bad_exception</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">18.8.3</td><td align="left">Abnormal termination</td><td align="left">Partial</td><td align="left">Missing <code class="code">get_terminate</code>.
++ <code class="code">set_terminate</code> is not thread-safe.
++ </td></tr><tr><td align="left">18.8.4</td><td align="left"><code class="code">uncaught_exception</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.5</td><td align="left">Exception Propagation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.6</td><td align="left"><code class="code">nested_exception</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.9</td><td align="left">Initializer lists</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.9.1</td><td align="left">Initializer list constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.9.2</td><td align="left">Initializer list access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.9.3</td><td align="left">Initializer list range access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.10</td><td align="left">Other runtime support</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
+ <span class="emphasis"><em>19</em></span>
+ </td><td colspan="3" align="left">
+ <span class="emphasis"><em>Diagnostics</em></span>
+@@ -185,7 +188,7 @@
+ is_nothrow_assignable,
+ is_nothrow_copy_assignable, is_nothrow_move_assignable,
+ is_nothrow_destructible
+- </td></tr><tr><td align="left">20.9.5</td><td align="left">Type property queries</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.6</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7</td><td align="left">Transformations between types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.9.7.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.3</td><td align="left">Sign modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.4</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.5</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.6</td><td align="left">Other transformations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10</td><td align="left">Compile-time rational arithmetic</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.2</td><td align="left">Header <code class="code">&lt;ratio&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.3</td><td align="left">Class template <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.4</td><td align="left">Arithmetic on <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.5</td><td align="left">Comparison of <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.6</td><td align="left">SI types for <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11</td><td align="left">Time utilities</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.3</td><td align="left">Clock requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4</td><td align="left">Time-related traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.4.1</td><td align="left"><code class="code">treat_as_floating_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4.2</td><td align="left"><code class="code">duration_values</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4.3</td><td align="left">Specializations of <code class="code">common_type</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.11.5</td><td align="left">Class template <code class="code">duration</code></td><td align="left">Partial</td><td align="left">Missing constexpr for non-member arithmetic operations</td></tr><tr><td align="left">20.11.6</td><td align="left">Class template <code class="code">time_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7</td><td align="left">Clocks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.7.1</td><td align="left">Class <code class="code">system_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7.2</td><td align="left">Class <code class="code">steady_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7.3</td><td align="left">Class <code class="code">high_resolution_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.8</td><td align="left">Date and time functions</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12</td><td align="left">Scoped allocator adaptor</td><td align="left">Partial</td><td align="left"> </td></tr><tr><td align="left">20.12.1</td><td align="left">Header <code class="code">&lt;scoped_allocator&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.12.2</td><td align="left">Scoped allocator adaptor member types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.12.3</td><td align="left">Scoped allocator adaptor constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12.4</td><td align="left">Scoped allocator adaptor members</td><td align="left">Partial</td><td align="left"> </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">
++ </td></tr><tr><td align="left">20.9.5</td><td align="left">Type property queries</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.6</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7</td><td align="left">Transformations between types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.9.7.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.3</td><td align="left">Sign modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.4</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.5</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.9.7.6</td><td align="left">Other transformations</td><td align="left">Partial</td><td align="left">Missing <code class="code">aligned_union</code>.</td></tr><tr><td align="left">20.10</td><td align="left">Compile-time rational arithmetic</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.2</td><td align="left">Header <code class="code">&lt;ratio&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.3</td><td align="left">Class template <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.4</td><td align="left">Arithmetic on <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.5</td><td align="left">Comparison of <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.6</td><td align="left">SI types for <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11</td><td align="left">Time utilities</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.3</td><td align="left">Clock requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4</td><td align="left">Time-related traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.4.1</td><td align="left"><code class="code">treat_as_floating_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4.2</td><td align="left"><code class="code">duration_values</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4.3</td><td align="left">Specializations of <code class="code">common_type</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.11.5</td><td align="left">Class template <code class="code">duration</code></td><td align="left">Partial</td><td align="left">Missing constexpr for non-member arithmetic operations</td></tr><tr><td align="left">20.11.6</td><td align="left">Class template <code class="code">time_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7</td><td align="left">Clocks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.7.1</td><td align="left">Class <code class="code">system_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7.2</td><td align="left">Class <code class="code">steady_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7.3</td><td align="left">Class <code class="code">high_resolution_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.8</td><td align="left">Date and time functions</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12</td><td align="left">Scoped allocator adaptor</td><td align="left">Partial</td><td align="left"> </td></tr><tr><td align="left">20.12.1</td><td align="left">Header <code class="code">&lt;scoped_allocator&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.12.2</td><td align="left">Scoped allocator adaptor member types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.12.3</td><td align="left">Scoped allocator adaptor constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12.4</td><td align="left">Scoped allocator adaptor members</td><td align="left">Partial</td><td align="left"> </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">
+ <span class="emphasis"><em>21</em></span>
+ </td><td colspan="3" align="left">
+ <span class="emphasis"><em>Strings</em></span>
+@@ -237,7 +240,9 @@
+ <span class="emphasis"><em>Appendix D</em></span>
+ </td><td colspan="3" align="left">
+ <span class="emphasis"><em>Compatibility features</em></span>
+- </td></tr><tr><td align="left">D.1</td><td align="left">Increment operator with <code class="code">bool</code> operand</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.2</td><td align="left"><code class="code">register</code> keyword</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.3</td><td align="left">Implicit declaration of copy functions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.4</td><td align="left">Dynamic exception specifications</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.5</td><td align="left">C standard library headers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.6</td><td align="left">Old iostreams members</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.7</td><td align="left"><code class="code">char*</code> streams</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.8</td><td align="left">Function objects</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.9</td><td align="left">Binders</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.10</td><td align="left"><code class="code">auto_ptr</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.11</td><td align="left">Violating exception-specifications</td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><div class="section" title="Implementation Specific Behavior"><div class="titlepage"><div><div><h4 class="title"><a id="iso.2011.specific"></a>Implementation Specific Behavior</h4></div></div></div><p>For behaviour which is also specified by the 1998 and 2003 standards,
++ </td></tr><tr><td align="left">D.1</td><td align="left">Increment operator with <code class="code">bool</code> operand</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.2</td><td align="left"><code class="code">register</code> keyword</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.3</td><td align="left">Implicit declaration of copy functions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.4</td><td align="left">Dynamic exception specifications</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.5</td><td align="left">C standard library headers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.6</td><td align="left">Old iostreams members</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.7</td><td align="left"><code class="code">char*</code> streams</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.8</td><td align="left">Function objects</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.9</td><td align="left">Binders</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.10</td><td align="left"><code class="code">auto_ptr</code></td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">D.11</td><td align="left">Violating exception-specifications</td><td align="left">Partial</td><td align="left">Missing <code class="code">get_unexpected</code>.
++ <code class="code">set_unexpected</code> is not thread-safe.
++ </td></tr></tbody></table></div></div><br class="table-break" /><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="iso.2011.specific"></a>Implementation Specific Behavior</h4></div></div></div><p>For behaviour which is also specified by the 1998 and 2003 standards,
+ see <a class="link" href="status.html#iso.1998.specific" title="Implementation Specific Behavior">C++ 1998/2003 Implementation
+ Specific Behavior</a>. This section only documents behaviour which
+ is new in the 2011 standard.
+@@ -250,7 +255,7 @@
+ <code class="classname">native_handle_type</code> and
+ <code class="methodname">native_handle</code> are provided. The handle types
+ are defined in terms of the Gthreads abstraction layer.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="classname">thread</code>: The native handle type is
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="classname">thread</code>: The native handle type is
+ a typedef for <code class="code">__gthread_t</code> i.e. <code class="code">pthread_t</code>
+ when GCC is configured with the <code class="literal">posix</code> thread
+ model. The value of the native handle is undefined for a thread
+@@ -275,7 +280,7 @@
+ <code class="code">launch</code> is a scoped enumeration type with
+ overloaded operators to support bitmask operations. There are no
+ additional bitmask elements defined.
+- </p></div></div><div class="section" title="C++ TR1"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.tr1"></a>C++ TR1</h3></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.tr1"></a>C++ TR1</h3></div></div></div><p>
+ This table is based on the table of contents of ISO/IEC DTR 19768
+ Doc No: N1836=05-0096 Date: 2005-06-24
+ Draft Technical Report on C++ Library Extensions
+@@ -286,12 +291,12 @@
+ </p><p>
+ This page describes the TR1 support in mainline GCC SVN, not in any particular
+ release.
+-</p><div class="table"><a id="idp2271168"></a><p class="title"><strong>Table 1.3. C++ TR1 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.2.1</td><td align="left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.2</td><td align="left"><code class="code">reference_wrapper</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.3</td><td align="left"><code class="code">reference_wrapper</code> access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.4</td><td align="left"><code class="code">reference_wrapper</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.5</td><td align="left"><code class="code">reference_wrapper</code> helper functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.1</td><td align="left">Additions to header <code class="code">&lt;memory&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.2</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left"> </td><td align="left">
++</p><div class="table"><a id="idm270000018688"></a><p class="title"><strong>Table 1.3. C++ TR1 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.2.1</td><td align="left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.2</td><td align="left"><code class="code">reference_wrapper</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.3</td><td align="left"><code class="code">reference_wrapper</code> access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.4</td><td align="left"><code class="code">reference_wrapper</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.5</td><td align="left"><code class="code">reference_wrapper</code> helper functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.1</td><td align="left">Additions to header <code class="code">&lt;memory&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.2</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left"> </td><td align="left">
+ <p>
+ Uses code from
+ <a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">boost::shared_ptr</a>.
+ </p>
+- </td></tr><tr><td align="left">2.2.3.1</td><td align="left"><code class="code">shared_ptr</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.2</td><td align="left"><code class="code">shared_ptr</code> destructor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.3</td><td align="left"><code class="code">shared_ptr</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.4</td><td align="left"><code class="code">shared_ptr</code> modifiers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.5</td><td align="left"><code class="code">shared_ptr</code> observers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.6</td><td align="left"><code class="code">shared_ptr</code> comparison</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.7</td><td align="left"><code class="code">shared_ptr</code> I/O</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.8</td><td align="left"><code class="code">shared_ptr</code> specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.9</td><td align="left"><code class="code">shared_ptr</code> casts</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.10</td><td align="left"><code class="code">get_deleter</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4</td><td align="left">Class template <code class="code">weak_ptr</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.4.1</td><td align="left"><code class="code">weak_ptr</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.2</td><td align="left"><code class="code">weak_ptr</code> destructor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.3</td><td align="left"><code class="code">weak_ptr</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.4</td><td align="left"><code class="code">weak_ptr</code> modifiers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.5</td><td align="left"><code class="code">weak_ptr</code> observers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.6</td><td align="left"><code class="code">weak_ptr</code> comparison</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.7</td><td align="left"><code class="code">weak_ptr</code> specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.5</td><td align="left">Class template <code class="code">enable_shared_from_this</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>3</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Function Objects</em></span></td></tr><tr><td align="left">3.1</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.2</td><td align="left">Additions to <code class="code">&lt;functional&gt; synopsis</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.3</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.4</td><td align="left">Function return types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.5</td><td align="left">Function template <code class="code">mem_fn</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6</td><td align="left">Function object binders</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.6.1</td><td align="left">Class template <code class="code">is_bind_expression</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6.2</td><td align="left">Class template <code class="code">is_placeholder</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6.3</td><td align="left">Function template <code class="code">bind</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6.4</td><td align="left">Placeholders</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7</td><td align="left">Polymorphic function wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.7.1</td><td align="left">Class <code class="code">bad_function_call</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.1.1</td><td align="left"><code class="code">bad_function_call</code> constructor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2</td><td align="left">Class template <code class="code">function</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.7.2.1</td><td align="left"><code class="code">function</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.2</td><td align="left"><code class="code">function</code> modifiers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.3</td><td align="left"><code class="code">function</code> capacity</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.4</td><td align="left"><code class="code">function</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.5</td><td align="left"><code class="code">function</code> target access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.6</td><td align="left">undefined operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.7</td><td align="left">null pointer comparison operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.8</td><td align="left">specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>4</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Metaprogramming and type traits</em></span></td></tr><tr><td align="left">4.1</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.2</td><td align="left">Header <code class="code">&lt;type_traits&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.3</td><td align="left">Helper classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.4</td><td align="left">General Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.5</td><td align="left">Unary Type Traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">4.5.1</td><td align="left">Primary Type Categories</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.5.2</td><td align="left">Composite type traits</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.5.3</td><td align="left">Type properties</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.6</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7</td><td align="left">Transformations between types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">4.7.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7.3</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7.4</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.8</td><td align="left">Other transformations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.9</td><td align="left">Implementation requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>5</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Numerical Facilities</em></span></td></tr><tr><td align="left">5.1</td><td align="left">Random number generation</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">5.1.1</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.2</td><td align="left">Header <code class="code">&lt;random&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.3</td><td align="left">Class template <code class="code">variate_generator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4</td><td align="left">Random number engine class templates</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.1</td><td align="left">Class template <code class="code">linear_congruential</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.2</td><td align="left">Class template <code class="code">mersenne_twister</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.3</td><td align="left">Class template <code class="code">subtract_with_carry</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.4</td><td align="left">Class template <code class="code">subtract_with_carry_01</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.5</td><td align="left">Class template <code class="code">discard_block</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.6</td><td align="left">Class template <code class="code">xor_combine</code></td><td align="left">Y</td><td align="left">operator()() per N2079</td></tr><tr><td align="left">5.1.5</td><td align="left">Engines with predefined parameters</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.6</td><td align="left">Class <code class="code">random_device</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7</td><td align="left">Random distribution class templates</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.1</td><td align="left">Class template <code class="code">uniform_int</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.2</td><td align="left">Class <code class="code">bernoulli_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.3</td><td align="left">Class template <code class="code">geometric_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.4</td><td align="left">Class template <code class="code">poisson_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.5</td><td align="left">Class template <code class="code">binomial_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.6</td><td align="left">Class template <code class="code">uniform_real</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.7</td><td align="left">Class template <code class="code">exponential_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.8</td><td align="left">Class template <code class="code">normal_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.9</td><td align="left">Class template <code class="code">gamma_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2</td><td align="left">Mathematical special functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1</td><td align="left">Additions to header <code class="code">&lt;cmath&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.1</td><td align="left">associated Laguerre polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.2</td><td align="left">associated Legendre functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.3</td><td align="left">beta function</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.4</td><td align="left">(complete) elliptic integral of the first kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.5</td><td align="left">(complete) elliptic integral of the second kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.6</td><td align="left">(complete) elliptic integral of the third kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.7</td><td align="left">confluent hypergeometric functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.8</td><td align="left">regular modified cylindrical Bessel functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.9</td><td align="left">cylindrical Bessel functions (of the first kind)</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.10</td><td align="left">irregular modified cylindrical Bessel functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.11</td><td align="left">cylindrical Neumann functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.12</td><td align="left">(incomplete) elliptic integral of the first kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.13</td><td align="left">(incomplete) elliptic integral of the second kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.14</td><td align="left">(incomplete) elliptic integral of the third kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.15</td><td align="left">exponential integral</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.16</td><td align="left">Hermite polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.17</td><td align="left">hypergeometric functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.18</td><td align="left">Laguerre polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.19</td><td align="left">Legendre polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.20</td><td align="left">Riemann zeta function</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.21</td><td align="left">spherical Bessel functions (of the first kind)</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.22</td><td align="left">spherical associated Legendre functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.23</td><td align="left">spherical Neumann functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.2</td><td align="left">Additions to header <code class="code">&lt;math.h&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>6</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Containers</em></span></td></tr><tr><td align="left">6.1</td><td align="left">Tuple types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.1</td><td align="left">Header <code class="code">&lt;tuple&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.2</td><td align="left">Additions to header <code class="code">&lt;utility&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3</td><td align="left">Class template <code class="code">tuple</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.1</td><td align="left">Construction</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.2</td><td align="left">Tuple creation functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.3</td><td align="left">Tuple helper classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.4</td><td align="left">Element access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.5</td><td align="left">Relational operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.4</td><td align="left">Pairs</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2</td><td align="left">Fixed size array</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.1</td><td align="left">Header <code class="code">&lt;array&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2</td><td align="left">Class template <code class="code">array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.1</td><td align="left"><code class="code">array</code> constructors, copy, and assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.2</td><td align="left"><code class="code">array</code> specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.3</td><td align="left"><code class="code">array</code> size</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.4</td><td align="left">Zero sized <code class="code">array</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.5</td><td align="left">Tuple interface to class template <code class="code">array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3</td><td align="left">Unordered associative containers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.1</td><td align="left">Unordered associative container requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.1.1</td><td align="left">Exception safety guarantees</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.2</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.3</td><td align="left">Class template <code class="code">hash</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4</td><td align="left">Unordered associative container classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.1</td><td align="left">Header <code class="code">&lt;unordered_set&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.2</td><td align="left">Header <code class="code">&lt;unordered_map&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.3</td><td align="left">Class template <code class="code">unordered_set</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.3.1</td><td align="left"><code class="code">unordered_set</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.3.2</td><td align="left"><code class="code">unordered_set</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4</td><td align="left">Class template <code class="code">unordered_map</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4.1</td><td align="left"><code class="code">unordered_map</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4.2</td><td align="left"><code class="code">unordered_map</code> element access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4.3</td><td align="left"><code class="code">unordered_map</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.5</td><td align="left">Class template <code class="code">unordered_multiset</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.5.1</td><td align="left"><code class="code">unordered_multiset</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.5.2</td><td align="left"><code class="code">unordered_multiset</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.6</td><td align="left">Class template <code class="code">unordered_multimap</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.6.1</td><td align="left"><code class="code">unordered_multimap</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.6.2</td><td align="left"><code class="code">unordered_multimap</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>7</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Regular Expressions</em></span></td></tr><tr bgcolor="#C8B0B0"><td align="left">7.1</td><td align="left">Definitions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.2</td><td align="left">Requirements</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.3</td><td align="left">Regular expressions summary</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.4</td><td align="left">Header <code class="code">&lt;regex&gt;</code> synopsis</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5</td><td align="left">Namespace <code class="code">tr1::regex_constants</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5.1</td><td align="left">Bitmask Type <code class="code">syntax_option_type</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5.2</td><td align="left">Bitmask Type <code class="code">regex_constants::match_flag_type</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5.3</td><td align="left">Implementation defined <code class="code">error_type</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.6</td><td align="left">Class <code class="code">regex_error</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.7</td><td align="left">Class template <code class="code">regex_traits</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8</td><td align="left">Class template <code class="code">basic_regex</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.1</td><td align="left"><code class="code">basic_regex</code> constants</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.2</td><td align="left"><code class="code">basic_regex</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.3</td><td align="left"><code class="code">basic_regex</code> assign</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.4</td><td align="left"><code class="code">basic_regex</code> constant operations</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.5</td><td align="left"><code class="code">basic_regex</code> locale</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.6</td><td align="left"><code class="code">basic_regex</code> swap</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.7</td><td align="left"><code class="code">basic_regex</code> non-member functions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.7.1</td><td align="left"><code class="code">basic_regex</code> non-member swap</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.9</td><td align="left">Class template <code class="code">sub_match</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.9.1</td><td align="left"><code class="code">sub_match</code> members</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.9.2</td><td align="left"><code class="code">sub_match</code> non-member operators</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10</td><td align="left">Class template <code class="code">match_results</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.1</td><td align="left"><code class="code">match_results</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.2</td><td align="left"><code class="code">match_results</code> size</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.3</td><td align="left"><code class="code">match_results</code> element access</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.4</td><td align="left"><code class="code">match_results</code> formatting</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.5</td><td align="left"><code class="code">match_results</code> allocator</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.6</td><td align="left"><code class="code">match_results</code> swap</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11</td><td align="left">Regular expression algorithms</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.1</td><td align="left">exceptions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.2</td><td align="left"><code class="code">regex_match</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.3</td><td align="left"><code class="code">regex_search</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.4</td><td align="left"><code class="code">regex_replace</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12</td><td align="left">Regular expression Iterators</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1</td><td align="left">Class template <code class="code">regex_iterator</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.1</td><td align="left"><code class="code">regex_iterator</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.2</td><td align="left"><code class="code">regex_iterator</code> comparisons</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.3</td><td align="left"><code class="code">regex_iterator</code> dereference</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.4</td><td align="left"><code class="code">regex_iterator</code> increment</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2</td><td align="left">Class template <code class="code">regex_token_iterator</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.1</td><td align="left"><code class="code">regex_token_iterator</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.2</td><td align="left"><code class="code">regex_token_iterator</code> comparisons</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.3</td><td align="left"><code class="code">regex_token_iterator</code> dereference</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.4</td><td align="left"><code class="code">regex_token_iterator</code> increment</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.13</td><td align="left">Modified ECMAScript regular expression grammar</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>8</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>C Compatibility</em></span></td></tr><tr><td align="left">8.1</td><td align="left">Additions to header <code class="code">&lt;complex&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.2</td><td align="left">Function <code class="code">acos</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.3</td><td align="left">Function <code class="code">asin</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.4</td><td align="left">Function <code class="code">atan</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.5</td><td align="left">Function <code class="code">acosh</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.6</td><td align="left">Function <code class="code">asinh</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.7</td><td align="left">Function <code class="code">atanh</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.8</td><td align="left">Function <code class="code">fabs</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.9</td><td align="left">Additional Overloads</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.2</td><td align="left">Header <code class="code">&lt;ccomplex&gt;</code></td><td align="left">N</td><td align="left">DR 551</td></tr><tr bgcolor="#C8B0B0"><td align="left">8.3</td><td align="left">Header <code class="code">&lt;complex.h&gt;</code></td><td align="left">N</td><td align="left">DR 551</td></tr><tr><td align="left">8.4</td><td align="left">Additions to header <code class="code">&lt;cctype&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.4.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.4.2</td><td align="left">Function <code class="code">isblank</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.5</td><td align="left">Additions to header <code class="code">&lt;ctype.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.6</td><td align="left">Header <code class="code">&lt;cfenv&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.6.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.6.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.7</td><td align="left">Header <code class="code">&lt;fenv.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.8</td><td align="left">Additions to header <code class="code">&lt;cfloat&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.9</td><td align="left">Additions to header <code class="code">&lt;float.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.10</td><td align="left">Additions to header <code class="code">&lt;ios&gt;</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.10.1</td><td align="left">Synopsis</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.10.2</td><td align="left">Function <code class="code">hexfloat</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">8.11</td><td align="left">Header <code class="code">&lt;cinttypes&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.11.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left">DR 557</td></tr><tr><td align="left">8.11.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.12</td><td align="left">Header <code class="code">&lt;inttypes.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.13</td><td align="left">Additions to header <code class="code">&lt;climits&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.14</td><td align="left">Additions to header <code class="code">&lt;limits.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.15</td><td align="left">Additions to header <code class="code">&lt;locale&gt;</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">8.16</td><td align="left">Additions to header <code class="code">&lt;cmath&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.3</td><td align="left">Function template definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.4</td><td align="left">Additional overloads</td><td align="left">Y</td><td align="left">DR 568; DR 550</td></tr><tr><td align="left">8.17</td><td align="left">Additions to header <code class="code">&lt;math.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.18</td><td align="left">Additions to header <code class="code">&lt;cstdarg&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.19</td><td align="left">Additions to header <code class="code">&lt;stdarg.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.20</td><td align="left">The header <code class="code">&lt;cstdbool&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.21</td><td align="left">The header <code class="code">&lt;stdbool.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.22</td><td align="left">The header <code class="code">&lt;cstdint&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.22.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.22.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.23</td><td align="left">The header <code class="code">&lt;stdint.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24</td><td align="left">Additions to header <code class="code">&lt;cstdio&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24.3</td><td align="left">Additional format specifiers</td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">8.24.4</td><td align="left">Additions to header <code class="code">&lt;stdio.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25</td><td align="left">Additions to header <code class="code">&lt;cstdlib&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.3</td><td align="left">Function <code class="code">abs</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.4</td><td align="left">Function <code class="code">div</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.26</td><td align="left">Additions to header <code class="code">&lt;stdlib.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.27</td><td align="left">Header <code class="code">&lt;ctgmath&gt;</code></td><td align="left">Y</td><td align="left">DR 551</td></tr><tr><td align="left">8.28</td><td align="left">Header <code class="code">&lt;tgmath.h&gt;</code></td><td align="left">Y</td><td align="left">DR 551</td></tr><tr><td align="left">8.29</td><td align="left">Additions to header <code class="code">&lt;ctime&gt;</code></td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">8.30</td><td align="left">Additions to header <code class="code">&lt;cwchar&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.30.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.30.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.30.3</td><td align="left">Additional wide format specifiers</td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">8.31</td><td align="left">Additions to header <code class="code">&lt;wchar.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.32</td><td align="left">Additions to header <code class="code">&lt;cwctype&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.32.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.32.2</td><td align="left">Function <code class="code">iswblank</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.33</td><td align="left">Additions to header <code class="code">&lt;wctype.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><div class="section" title="Implementation Specific Behavior"><div class="titlepage"><div><div><h4 class="title"><a id="iso.tr1.specific"></a>Implementation Specific Behavior</h4></div></div></div><p>For behaviour which is specified by the 1998 and 2003 standards,
++ </td></tr><tr><td align="left">2.2.3.1</td><td align="left"><code class="code">shared_ptr</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.2</td><td align="left"><code class="code">shared_ptr</code> destructor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.3</td><td align="left"><code class="code">shared_ptr</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.4</td><td align="left"><code class="code">shared_ptr</code> modifiers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.5</td><td align="left"><code class="code">shared_ptr</code> observers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.6</td><td align="left"><code class="code">shared_ptr</code> comparison</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.7</td><td align="left"><code class="code">shared_ptr</code> I/O</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.8</td><td align="left"><code class="code">shared_ptr</code> specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.9</td><td align="left"><code class="code">shared_ptr</code> casts</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.10</td><td align="left"><code class="code">get_deleter</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4</td><td align="left">Class template <code class="code">weak_ptr</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.4.1</td><td align="left"><code class="code">weak_ptr</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.2</td><td align="left"><code class="code">weak_ptr</code> destructor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.3</td><td align="left"><code class="code">weak_ptr</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.4</td><td align="left"><code class="code">weak_ptr</code> modifiers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.5</td><td align="left"><code class="code">weak_ptr</code> observers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.6</td><td align="left"><code class="code">weak_ptr</code> comparison</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.7</td><td align="left"><code class="code">weak_ptr</code> specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.5</td><td align="left">Class template <code class="code">enable_shared_from_this</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>3</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Function Objects</em></span></td></tr><tr><td align="left">3.1</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.2</td><td align="left">Additions to <code class="code">&lt;functional&gt; synopsis</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.3</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.4</td><td align="left">Function return types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.5</td><td align="left">Function template <code class="code">mem_fn</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6</td><td align="left">Function object binders</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.6.1</td><td align="left">Class template <code class="code">is_bind_expression</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6.2</td><td align="left">Class template <code class="code">is_placeholder</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6.3</td><td align="left">Function template <code class="code">bind</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6.4</td><td align="left">Placeholders</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7</td><td align="left">Polymorphic function wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.7.1</td><td align="left">Class <code class="code">bad_function_call</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.1.1</td><td align="left"><code class="code">bad_function_call</code> constructor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2</td><td align="left">Class template <code class="code">function</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.7.2.1</td><td align="left"><code class="code">function</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.2</td><td align="left"><code class="code">function</code> modifiers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.3</td><td align="left"><code class="code">function</code> capacity</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.4</td><td align="left"><code class="code">function</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.5</td><td align="left"><code class="code">function</code> target access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.6</td><td align="left">undefined operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.7</td><td align="left">null pointer comparison operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.8</td><td align="left">specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>4</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Metaprogramming and type traits</em></span></td></tr><tr><td align="left">4.1</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.2</td><td align="left">Header <code class="code">&lt;type_traits&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.3</td><td align="left">Helper classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.4</td><td align="left">General Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.5</td><td align="left">Unary Type Traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">4.5.1</td><td align="left">Primary Type Categories</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.5.2</td><td align="left">Composite type traits</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.5.3</td><td align="left">Type properties</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.6</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7</td><td align="left">Transformations between types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">4.7.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7.3</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7.4</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.8</td><td align="left">Other transformations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.9</td><td align="left">Implementation requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>5</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Numerical Facilities</em></span></td></tr><tr><td align="left">5.1</td><td align="left">Random number generation</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">5.1.1</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.2</td><td align="left">Header <code class="code">&lt;random&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.3</td><td align="left">Class template <code class="code">variate_generator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4</td><td align="left">Random number engine class templates</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.1</td><td align="left">Class template <code class="code">linear_congruential</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.2</td><td align="left">Class template <code class="code">mersenne_twister</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.3</td><td align="left">Class template <code class="code">subtract_with_carry</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.4</td><td align="left">Class template <code class="code">subtract_with_carry_01</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.5</td><td align="left">Class template <code class="code">discard_block</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.6</td><td align="left">Class template <code class="code">xor_combine</code></td><td align="left">Y</td><td align="left">operator()() per N2079</td></tr><tr><td align="left">5.1.5</td><td align="left">Engines with predefined parameters</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.6</td><td align="left">Class <code class="code">random_device</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7</td><td align="left">Random distribution class templates</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.1</td><td align="left">Class template <code class="code">uniform_int</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.2</td><td align="left">Class <code class="code">bernoulli_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.3</td><td align="left">Class template <code class="code">geometric_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.4</td><td align="left">Class template <code class="code">poisson_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.5</td><td align="left">Class template <code class="code">binomial_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.6</td><td align="left">Class template <code class="code">uniform_real</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.7</td><td align="left">Class template <code class="code">exponential_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.8</td><td align="left">Class template <code class="code">normal_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.9</td><td align="left">Class template <code class="code">gamma_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2</td><td align="left">Mathematical special functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1</td><td align="left">Additions to header <code class="code">&lt;cmath&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.1</td><td align="left">associated Laguerre polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.2</td><td align="left">associated Legendre functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.3</td><td align="left">beta function</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.4</td><td align="left">(complete) elliptic integral of the first kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.5</td><td align="left">(complete) elliptic integral of the second kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.6</td><td align="left">(complete) elliptic integral of the third kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.7</td><td align="left">confluent hypergeometric functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.8</td><td align="left">regular modified cylindrical Bessel functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.9</td><td align="left">cylindrical Bessel functions (of the first kind)</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.10</td><td align="left">irregular modified cylindrical Bessel functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.11</td><td align="left">cylindrical Neumann functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.12</td><td align="left">(incomplete) elliptic integral of the first kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.13</td><td align="left">(incomplete) elliptic integral of the second kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.14</td><td align="left">(incomplete) elliptic integral of the third kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.15</td><td align="left">exponential integral</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.16</td><td align="left">Hermite polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.17</td><td align="left">hypergeometric functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.18</td><td align="left">Laguerre polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.19</td><td align="left">Legendre polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.20</td><td align="left">Riemann zeta function</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.21</td><td align="left">spherical Bessel functions (of the first kind)</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.22</td><td align="left">spherical associated Legendre functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.23</td><td align="left">spherical Neumann functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.2</td><td align="left">Additions to header <code class="code">&lt;math.h&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>6</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Containers</em></span></td></tr><tr><td align="left">6.1</td><td align="left">Tuple types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.1</td><td align="left">Header <code class="code">&lt;tuple&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.2</td><td align="left">Additions to header <code class="code">&lt;utility&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3</td><td align="left">Class template <code class="code">tuple</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.1</td><td align="left">Construction</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.2</td><td align="left">Tuple creation functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.3</td><td align="left">Tuple helper classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.4</td><td align="left">Element access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.5</td><td align="left">Relational operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.4</td><td align="left">Pairs</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2</td><td align="left">Fixed size array</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.1</td><td align="left">Header <code class="code">&lt;array&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2</td><td align="left">Class template <code class="code">array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.1</td><td align="left"><code class="code">array</code> constructors, copy, and assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.2</td><td align="left"><code class="code">array</code> specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.3</td><td align="left"><code class="code">array</code> size</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.4</td><td align="left">Zero sized <code class="code">array</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.5</td><td align="left">Tuple interface to class template <code class="code">array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3</td><td align="left">Unordered associative containers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.1</td><td align="left">Unordered associative container requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.1.1</td><td align="left">Exception safety guarantees</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.2</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.3</td><td align="left">Class template <code class="code">hash</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4</td><td align="left">Unordered associative container classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.1</td><td align="left">Header <code class="code">&lt;unordered_set&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.2</td><td align="left">Header <code class="code">&lt;unordered_map&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.3</td><td align="left">Class template <code class="code">unordered_set</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.3.1</td><td align="left"><code class="code">unordered_set</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.3.2</td><td align="left"><code class="code">unordered_set</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4</td><td align="left">Class template <code class="code">unordered_map</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4.1</td><td align="left"><code class="code">unordered_map</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4.2</td><td align="left"><code class="code">unordered_map</code> element access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4.3</td><td align="left"><code class="code">unordered_map</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.5</td><td align="left">Class template <code class="code">unordered_multiset</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.5.1</td><td align="left"><code class="code">unordered_multiset</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.5.2</td><td align="left"><code class="code">unordered_multiset</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.6</td><td align="left">Class template <code class="code">unordered_multimap</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.6.1</td><td align="left"><code class="code">unordered_multimap</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.6.2</td><td align="left"><code class="code">unordered_multimap</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>7</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Regular Expressions</em></span></td></tr><tr bgcolor="#C8B0B0"><td align="left">7.1</td><td align="left">Definitions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.2</td><td align="left">Requirements</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.3</td><td align="left">Regular expressions summary</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.4</td><td align="left">Header <code class="code">&lt;regex&gt;</code> synopsis</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5</td><td align="left">Namespace <code class="code">tr1::regex_constants</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5.1</td><td align="left">Bitmask Type <code class="code">syntax_option_type</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5.2</td><td align="left">Bitmask Type <code class="code">regex_constants::match_flag_type</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5.3</td><td align="left">Implementation defined <code class="code">error_type</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.6</td><td align="left">Class <code class="code">regex_error</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.7</td><td align="left">Class template <code class="code">regex_traits</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8</td><td align="left">Class template <code class="code">basic_regex</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.1</td><td align="left"><code class="code">basic_regex</code> constants</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.2</td><td align="left"><code class="code">basic_regex</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.3</td><td align="left"><code class="code">basic_regex</code> assign</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.4</td><td align="left"><code class="code">basic_regex</code> constant operations</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.5</td><td align="left"><code class="code">basic_regex</code> locale</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.6</td><td align="left"><code class="code">basic_regex</code> swap</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.7</td><td align="left"><code class="code">basic_regex</code> non-member functions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.7.1</td><td align="left"><code class="code">basic_regex</code> non-member swap</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.9</td><td align="left">Class template <code class="code">sub_match</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.9.1</td><td align="left"><code class="code">sub_match</code> members</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.9.2</td><td align="left"><code class="code">sub_match</code> non-member operators</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10</td><td align="left">Class template <code class="code">match_results</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.1</td><td align="left"><code class="code">match_results</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.2</td><td align="left"><code class="code">match_results</code> size</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.3</td><td align="left"><code class="code">match_results</code> element access</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.4</td><td align="left"><code class="code">match_results</code> formatting</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.5</td><td align="left"><code class="code">match_results</code> allocator</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.6</td><td align="left"><code class="code">match_results</code> swap</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11</td><td align="left">Regular expression algorithms</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.1</td><td align="left">exceptions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.2</td><td align="left"><code class="code">regex_match</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.3</td><td align="left"><code class="code">regex_search</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.4</td><td align="left"><code class="code">regex_replace</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12</td><td align="left">Regular expression Iterators</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1</td><td align="left">Class template <code class="code">regex_iterator</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.1</td><td align="left"><code class="code">regex_iterator</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.2</td><td align="left"><code class="code">regex_iterator</code> comparisons</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.3</td><td align="left"><code class="code">regex_iterator</code> dereference</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.4</td><td align="left"><code class="code">regex_iterator</code> increment</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2</td><td align="left">Class template <code class="code">regex_token_iterator</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.1</td><td align="left"><code class="code">regex_token_iterator</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.2</td><td align="left"><code class="code">regex_token_iterator</code> comparisons</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.3</td><td align="left"><code class="code">regex_token_iterator</code> dereference</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.4</td><td align="left"><code class="code">regex_token_iterator</code> increment</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.13</td><td align="left">Modified ECMAScript regular expression grammar</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>8</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>C Compatibility</em></span></td></tr><tr><td align="left">8.1</td><td align="left">Additions to header <code class="code">&lt;complex&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.2</td><td align="left">Function <code class="code">acos</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.3</td><td align="left">Function <code class="code">asin</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.4</td><td align="left">Function <code class="code">atan</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.5</td><td align="left">Function <code class="code">acosh</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.6</td><td align="left">Function <code class="code">asinh</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.7</td><td align="left">Function <code class="code">atanh</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.8</td><td align="left">Function <code class="code">fabs</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.9</td><td align="left">Additional Overloads</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.2</td><td align="left">Header <code class="code">&lt;ccomplex&gt;</code></td><td align="left">N</td><td align="left">DR 551</td></tr><tr bgcolor="#C8B0B0"><td align="left">8.3</td><td align="left">Header <code class="code">&lt;complex.h&gt;</code></td><td align="left">N</td><td align="left">DR 551</td></tr><tr><td align="left">8.4</td><td align="left">Additions to header <code class="code">&lt;cctype&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.4.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.4.2</td><td align="left">Function <code class="code">isblank</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.5</td><td align="left">Additions to header <code class="code">&lt;ctype.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.6</td><td align="left">Header <code class="code">&lt;cfenv&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.6.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.6.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.7</td><td align="left">Header <code class="code">&lt;fenv.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.8</td><td align="left">Additions to header <code class="code">&lt;cfloat&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.9</td><td align="left">Additions to header <code class="code">&lt;float.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.10</td><td align="left">Additions to header <code class="code">&lt;ios&gt;</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.10.1</td><td align="left">Synopsis</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.10.2</td><td align="left">Function <code class="code">hexfloat</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">8.11</td><td align="left">Header <code class="code">&lt;cinttypes&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.11.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left">DR 557</td></tr><tr><td align="left">8.11.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.12</td><td align="left">Header <code class="code">&lt;inttypes.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.13</td><td align="left">Additions to header <code class="code">&lt;climits&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.14</td><td align="left">Additions to header <code class="code">&lt;limits.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.15</td><td align="left">Additions to header <code class="code">&lt;locale&gt;</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">8.16</td><td align="left">Additions to header <code class="code">&lt;cmath&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.3</td><td align="left">Function template definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.4</td><td align="left">Additional overloads</td><td align="left">Y</td><td align="left">DR 568; DR 550</td></tr><tr><td align="left">8.17</td><td align="left">Additions to header <code class="code">&lt;math.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.18</td><td align="left">Additions to header <code class="code">&lt;cstdarg&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.19</td><td align="left">Additions to header <code class="code">&lt;stdarg.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.20</td><td align="left">The header <code class="code">&lt;cstdbool&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.21</td><td align="left">The header <code class="code">&lt;stdbool.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.22</td><td align="left">The header <code class="code">&lt;cstdint&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.22.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.22.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.23</td><td align="left">The header <code class="code">&lt;stdint.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24</td><td align="left">Additions to header <code class="code">&lt;cstdio&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24.3</td><td align="left">Additional format specifiers</td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">8.24.4</td><td align="left">Additions to header <code class="code">&lt;stdio.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25</td><td align="left">Additions to header <code class="code">&lt;cstdlib&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.3</td><td align="left">Function <code class="code">abs</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.4</td><td align="left">Function <code class="code">div</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.26</td><td align="left">Additions to header <code class="code">&lt;stdlib.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.27</td><td align="left">Header <code class="code">&lt;ctgmath&gt;</code></td><td align="left">Y</td><td align="left">DR 551</td></tr><tr><td align="left">8.28</td><td align="left">Header <code class="code">&lt;tgmath.h&gt;</code></td><td align="left">Y</td><td align="left">DR 551</td></tr><tr><td align="left">8.29</td><td align="left">Additions to header <code class="code">&lt;ctime&gt;</code></td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">8.30</td><td align="left">Additions to header <code class="code">&lt;cwchar&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.30.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.30.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.30.3</td><td align="left">Additional wide format specifiers</td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">8.31</td><td align="left">Additions to header <code class="code">&lt;wchar.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.32</td><td align="left">Additions to header <code class="code">&lt;cwctype&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.32.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.32.2</td><td align="left">Function <code class="code">iswblank</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.33</td><td align="left">Additions to header <code class="code">&lt;wctype.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="iso.tr1.specific"></a>Implementation Specific Behavior</h4></div></div></div><p>For behaviour which is specified by the 1998 and 2003 standards,
+ see <a class="link" href="status.html#iso.1998.specific" title="Implementation Specific Behavior">C++ 1998/2003 Implementation
+ Specific Behavior</a>. This section documents behaviour which
+ is required by TR1.
+@@ -299,7 +304,7 @@
+ <span class="emphasis"><em>3.6.4 [tr.func.bind.place]/1</em></span> There are 29
+ placeholders defined and the placeholder types are
+ <code class="literal">Assignable</code>.
+- </p></div></div><div class="section" title="C++ TR 24733"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.tr24733"></a>C++ TR 24733</h3></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.tr24733"></a>C++ TR 24733</h3></div></div></div><p>
+ This table is based on the table of contents of
+ ISO/IEC TR 24733 Date: 2009-08-28
+ Extension for the programming language C++ to support
+@@ -307,7 +312,7 @@
+ </p><p>
+ This page describes the TR 24733 support in mainline GCC SVN, not in any
+ particular release.
+-</p><div class="table"><a id="idp12526624"></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">
++</p><div class="table"><a id="idm269989661024"></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">
+ <span class="emphasis"><em>0</em></span>
+ </td><td colspan="3" align="left">
+ <span class="emphasis"><em>Introduction</em></span>
+@@ -330,4 +335,4 @@
+ </td></tr></tbody></table></div></div><br class="table-break" /></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="intro.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="license.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part I. 
+ Introduction
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> License</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> License</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/streambufs.html
++++ b/src/libstdc++-v3/doc/html/manual/streambufs.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Input and Output
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="stringstreams.html">Next</a></td></tr></table><hr /></div><div class="section" title="Stream Buffers"><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" title="Derived streambuf Classes"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.derived"></a>Derived streambuf Classes</h3></div></div></div><p>
++</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>
+ </p><p>Creating your own stream buffers for I/O can be remarkably easy.
+ If you are interested in doing so, we highly recommend two very
+ excellent books:
+@@ -57,7 +56,7 @@
+ <code class="code">include/ext/*_filebuf.h</code>, and in this article by James Kanze:
+ <a class="link" href="http://kanze.james.neuf.fr/articles/fltrsbf1.html" target="_top">Filtering
+ Streambufs</a>.
+- </p></div><div class="section" title="Buffering"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.buffering"></a>Buffering</h3></div></div></div><p>First, are you sure that you understand buffering? Particularly
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.buffering"></a>Buffering</h3></div></div></div><p>First, are you sure that you understand buffering? Particularly
+ the fact that C++ may not, in fact, have anything to do with it?
+ </p><p>The rules for buffering can be a little odd, but they aren't any
+ different from those of C. (Maybe that's why they can be a bit
+@@ -134,4 +133,4 @@
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="io.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="stringstreams.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 13. 
+ Input and Output
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Memory Based Streams</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Memory Based Streams</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/strings.html
++++ b/src/libstdc++-v3/doc/html/manual/strings.html
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
+ Strings
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="traits.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 7.  Strings"><div class="titlepage"><div><div><h2 class="title"><a id="std.strings"></a>Chapter 7. 
++ </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. 
+ Strings
+- <a id="idp15576144" class="indexterm"></a>
+-</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" title="String Classes"><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" title="Simple Transformations"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.simple"></a>Simple Transformations</h3></div></div></div><p>
++ <a id="idm269986623744" class="indexterm"></a>
++</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>
+ Here are Standard, simple, and portable ways to perform common
+ transformations on a <code class="code">string</code> instance, such as
+ "convert to all upper case." The word transformations
+@@ -89,7 +88,7 @@
+ str.erase(notwhite+1); </pre><p>Obviously, the calls to <code class="code">find</code> could be inserted directly
+ into the calls to <code class="code">erase</code>, in case your compiler does not
+ optimize named temporaries out of existence.
+- </p></div><div class="section" title="Case Sensitivity"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.case"></a>Case Sensitivity</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.case"></a>Case Sensitivity</h3></div></div></div><p>
+ </p><p>The well-known-and-if-it-isn't-well-known-it-ought-to-be
+ <a class="link" href="http://www.gotw.ca/gotw/" target="_top">Guru of the Week</a>
+ discussions held on Usenet covered this topic in January of 1998.
+@@ -126,7 +125,7 @@
+ <a class="link" href="http://www.unicode.org/reports/tr21/tr21-5.html" target="_top">Unicode
+ Technical Report discussing case handling</a>, which provides some
+ very good information.
+- </p></div><div class="section" title="Arbitrary Character Types"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.character_types"></a>Arbitrary Character Types</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.character_types"></a>Arbitrary Character Types</h3></div></div></div><p>
+ </p><p>The <code class="code">std::basic_string</code> is tantalizingly general, in that
+ it is parameterized on the type of the characters which it holds.
+ In theory, you could whip up a Unicode character class and instantiate
+@@ -180,7 +179,7 @@
+ nice-looking first attempt</a> turned out to <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00242.html" target="_top">not
+ be conforming C++</a>, due to the rule that CharT must be a POD.
+ (See how tricky this is?)
+- </p></div><div class="section" title="Tokenizing"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.token"></a>Tokenizing</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.token"></a>Tokenizing</h3></div></div></div><p>
+ </p><p>The Standard C (and C++) function <code class="code">strtok()</code> leaves a lot to
+ be desired in terms of user-friendliness. It's unintuitive, it
+ destroys the character string on which it operates, and it requires
+@@ -256,7 +255,7 @@
+ tokenizing as well. Build an istringstream from the input text,
+ and then use std::getline with varying delimiters (the three-argument
+ signature) to extract tokens into a string.
+- </p></div><div class="section" title="Shrink to Fit"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.shrink"></a>Shrink to Fit</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.shrink"></a>Shrink to Fit</h3></div></div></div><p>
+ </p><p>From GCC 3.4 calling <code class="code">s.reserve(res)</code> on a
+ <code class="code">string s</code> with <code class="code">res &lt; s.capacity()</code> will
+ reduce the string's capacity to <code class="code">std::max(s.size(), res)</code>.
+@@ -272,7 +271,7 @@
+ </p><p>In <a class="link" href="status.html#status.iso.2011" title="C++ 2011">C++11</a> mode you can call
+ <code class="code">s.shrink_to_fit()</code> to achieve the same effect as
+ <code class="code">s.reserve(s.size())</code>.
+- </p></div><div class="section" title="CString (MFC)"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.Cstring"></a>CString (MFC)</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.Cstring"></a>CString (MFC)</h3></div></div></div><p>
+ </p><p>A common lament seen in various newsgroups deals with the Standard
+ string class as opposed to the Microsoft Foundation Class called
+ CString. Often programmers realize that a standard portable
+@@ -282,7 +281,7 @@
+ </p><p>Things are not as bad as they seem. In
+ <a class="link" href="http://gcc.gnu.org/ml/gcc/1999-04n/msg00236.html" target="_top">this
+ message</a>, Joe Buck points out a few very important things:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>The Standard <code class="code">string</code> supports all the operations
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>The Standard <code class="code">string</code> supports all the operations
+ that CString does, with three exceptions.
+ </p></li><li class="listitem"><p>Two of those exceptions (whitespace trimming and case
+ conversion) are trivial to implement. In fact, we do so
+@@ -340,7 +339,7 @@
+ performance is O(n).
+ </pre><p>Joe Buck also pointed out some other things to keep in mind when
+ comparing CString and the Standard string class:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>CString permits access to its internal representation; coders
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>CString permits access to its internal representation; coders
+ who exploited that may have problems moving to <code class="code">string</code>.
+ </p></li><li class="listitem"><p>Microsoft ships the source to CString (in the files
+ MFC\SRC\Str{core,ex}.cpp), so you could fix the allocation
+@@ -363,4 +362,4 @@
+ </p></li></ul></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="traits.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Traits </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 8. 
+ Localization
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/stringstreams.html
++++ b/src/libstdc++-v3/doc/html/manual/stringstreams.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Input and Output
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr></table><hr /></div><div class="section" title="Memory Based Streams"><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" title="Compatibility With strstream"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.memstreams.compat"></a>Compatibility With strstream</h3></div></div></div><p>
++</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>
+ </p><p>Stringstreams (defined in the header <code class="code">&lt;sstream&gt;</code>)
+ are in this author's opinion one of the coolest things since
+ sliced time. An example of their use is in the Received Wisdom
+@@ -34,4 +33,4 @@
+ memory yourself. The strstreams have been officially deprecated,
+ which means that 1) future revisions of the C++ Standard won't
+ support them, and 2) if you use them, people will laugh at you.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Stream Buffers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> File Based Streams</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Stream Buffers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> File Based Streams</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/support.html
++++ b/src/libstdc++-v3/doc/html/manual/support.html
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="bk01pt02.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. 
+ Support
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt02.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 4.  Support"><div class="titlepage"><div><div><h2 class="title"><a id="std.support"></a>Chapter 4. 
++ </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. 
+ Support
+- <a id="idp13718496" class="indexterm"></a>
+-</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>
++ <a id="idm269988473456" class="indexterm"></a>
++</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>
+ This part deals with the functions called and objects created
+ automatically during the course of a program's existence.
+ </p><p>
+@@ -16,9 +15,9 @@
+ need to get your own copy from your nation's member body; see our
+ homepage for help), we can mention a couple of changes in what
+ kind of support a C++ program gets from the Standard Library.
+- </p><div class="section" title="Types"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.types"></a>Types</h2></div></div></div><div class="section" title="Fundamental Types"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.fundamental"></a>Fundamental Types</h3></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.types"></a>Types</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.fundamental"></a>Fundamental Types</h3></div></div></div><p>
+ C++ has the following builtin types:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ char
+ </p></li><li class="listitem"><p>
+ signed char
+@@ -53,7 +52,7 @@
+ </p><p>
+ Specializing parts of the library on these types is prohibited:
+ instead, use a POD.
+- </p></div><div class="section" title="Numeric Properties"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.numeric_limits"></a>Numeric Properties</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.numeric_limits"></a>Numeric Properties</h3></div></div></div><p>
+ The header <code class="filename">limits</code> defines
+ traits classes to give access to various implementation
+ defined-aspects of the fundamental types. The traits classes --
+@@ -99,7 +98,7 @@
+ static const bool tinyness_before;
+ static const float_round_style round_style;
+ };
+- </pre></div><div class="section" title="NULL"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.null"></a>NULL</h3></div></div></div><p>
++ </pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.null"></a>NULL</h3></div></div></div><p>
+ The only change that might affect people is the type of
+ <code class="constant">NULL</code>: while it is required to be a macro,
+ the definition of that macro is <span class="emphasis"><em>not</em></span> allowed
+@@ -127,4 +126,4 @@
+ Effective C++ CD example</a>
+ </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part II. 
+ Standard Contents
+-  </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Dynamic Memory</td></tr></table></div></body></html>
++  </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Dynamic Memory</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/termination.html
++++ b/src/libstdc++-v3/doc/html/manual/termination.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Support
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="diagnostics.html">Next</a></td></tr></table><hr /></div><div class="section" title="Termination"><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" title="Termination Handlers"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.handlers"></a>Termination Handlers</h3></div></div></div><p>
++</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>
+ Not many changes here to <code class="filename">cstdlib</code>. You should note that the
+ <code class="function">abort()</code> function does not call the
+ destructors of automatic nor static objects, so if you're
+@@ -45,7 +44,7 @@
+ functions, and the compiler/library might already be using some of
+ those slots. If you think you may run out, we recommend using
+ the <code class="function">xatexit</code>/<code class="function">xexit</code> combination from <code class="literal">libiberty</code>, which has no such limit.
+- </p></div><div class="section" title="Verbose Terminate Handler"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.verbose"></a>Verbose Terminate Handler</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.verbose"></a>Verbose Terminate Handler</h3></div></div></div><p>
+ If you are having difficulty with uncaught exceptions and want a
+ little bit of help debugging the causes of the core dumps, you can
+ make use of a GNU extension, the verbose terminate handler.
+@@ -121,4 +120,4 @@
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="support.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="diagnostics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Dynamic Memory </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 5. 
+ Diagnostics
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/test.html
++++ b/src/libstdc++-v3/doc/html/manual/test.html
+@@ -1,12 +1,11 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; test&#10; , &#10; testsuite&#10; , &#10; performance&#10; , &#10; conformance&#10; , &#10; ABI&#10; , &#10; exception safety&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; test&#10; , &#10; testsuite&#10; , &#10; performance&#10; , &#10; conformance&#10; , &#10; ABI&#10; , &#10; exception safety&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Porting and Maintenance
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr></table><hr /></div><div class="section" title="Test"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.test"></a>Test</h2></div></div></div><p>
++</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>
+ The libstdc++ testsuite includes testing for standard conformance,
+ regressions, ABI, and performance.
+-</p><div class="section" title="Organization"><div class="titlepage"><div><div><h3 class="title"><a id="test.organization"></a>Organization</h3></div></div></div><div class="section" title="Directory Layout"><div class="titlepage"><div><div><h4 class="title"><a id="test.organization.layout"></a>Directory Layout</h4></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="test.organization"></a>Organization</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="test.organization.layout"></a>Directory Layout</h4></div></div></div><p>
+ The directory <span class="emphasis"><em>libsrcdir/testsuite</em></span> contains the
+ individual test cases organized in sub-directories corresponding to
+ chapters of the C++ standard (detailed below), the dejagnu test
+@@ -77,11 +76,11 @@
+ </pre><p>
+ All new tests should be written with the policy of one test
+ case, one file in mind.
+- </p></div><div class="section" title="Naming Conventions"><div class="titlepage"><div><div><h4 class="title"><a id="test.organization.naming"></a>Naming Conventions</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="test.organization.naming"></a>Naming Conventions</h4></div></div></div><p>
+ In addition, there are some special names and suffixes that are
+ used within the testsuite to designate particular kinds of
+ tests.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <span class="emphasis"><em>_xin.cc</em></span>
+ </p><p>
+ This test case expects some kind of interactive input in order
+@@ -131,7 +130,7 @@
+ analyze runtime performance, for performance regression testing,
+ or for other optimization related analysis. At the moment, these
+ test cases are not run by default.
+- </p></li></ul></div></div></div><div class="section" title="Running the Testsuite"><div class="titlepage"><div><div><h3 class="title"><a id="test.run"></a>Running the Testsuite</h3></div></div></div><div class="section" title="Basic"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.basic"></a>Basic</h4></div></div></div><p>
++ </p></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="test.run"></a>Running the Testsuite</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.basic"></a>Basic</h4></div></div></div><p>
+ You can check the status of the build without installing it
+ using the dejagnu harness, much like the rest of the gcc
+ tools.</p><pre class="programlisting"> make check</pre><p>in the <span class="emphasis"><em>libbuilddir</em></span> directory.</p><p>or</p><pre class="programlisting"> make check-target-libstdc++-v3</pre><p>in the <span class="emphasis"><em>gccbuilddir</em></span> directory.
+@@ -151,7 +150,7 @@
+ archived on a daily basis on the <a class="link" href="http://gcc.gnu.org/ml/gcc-testresults/current" target="_top">gcc-testresults</a>
+ mailing list. Please check either of these places for a similar
+ combination of source version, operating system, and host CPU.
+- </p></div><div class="section" title="Variations"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.variations"></a>Variations</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.variations"></a>Variations</h4></div></div></div><p>
+ There are several options for running tests, including testing
+ the regression tests, testing a subset of the regression tests,
+ testing the performance tests, testing just compilation, testing
+@@ -222,7 +221,7 @@
+ </pre><p>
+ Five files are generated that determine what test files
+ are run. These files are:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <span class="emphasis"><em>testsuite_files</em></span>
+ </p><p>
+ This is a list of all the test cases that will be run. Each
+@@ -277,7 +276,7 @@
+ We are interested in any strange failures of the testsuite;
+ please email the main libstdc++ mailing list if you see
+ something odd or have questions.
+- </p></div><div class="section" title="Permutations"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.permutations"></a>Permutations</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.permutations"></a>Permutations</h4></div></div></div><p>
+ To run the libstdc++ test suite under the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>, edit
+ <code class="filename">libstdc++-v3/scripts/testsuite_flags</code> to add the
+ compile-time flag <code class="constant">-D_GLIBCXX_DEBUG</code> to the
+@@ -297,7 +296,7 @@
+ Or, just run the testsuites with <code class="constant">CXXFLAGS</code>
+ set to <code class="constant">-D_GLIBCXX_DEBUG</code> or
+ <code class="constant">-D_GLIBCXX_PARALLEL</code>.
+- </p></div></div><div class="section" title="Writing a new test case"><div class="titlepage"><div><div><h3 class="title"><a id="test.new_tests"></a>Writing a new test case</h3></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="test.new_tests"></a>Writing a new test case</h3></div></div></div><p>
+ The first step in making a new test case is to choose the correct
+ directory and file name, given the organization as previously
+ described.
+@@ -408,7 +407,7 @@
+ // { dg-options "-O0" { target *-*-* } }
+ </pre><p>
+ More examples can be found in the libstdc++-v3/testsuite/*/*.cc files.
+- </p></div><div class="section" title="Test Harness and Utilities"><div class="titlepage"><div><div><h3 class="title"><a id="test.harness"></a>Test Harness and Utilities</h3></div></div></div><div class="section" title="Dejagnu Harness Details"><div class="titlepage"><div><div><h4 class="title"><a id="test.harness.dejagnu"></a>Dejagnu Harness Details</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="test.harness"></a>Test Harness and Utilities</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="test.harness.dejagnu"></a>Dejagnu Harness Details</h4></div></div></div><p>
+ Underlying details of testing for conformance and regressions are
+ abstracted via the GNU Dejagnu package. This is similar to the
+ rest of GCC.
+@@ -435,7 +434,7 @@
+ </p><p>The <code class="code">config</code> directory is searched for any particular "target
+ board" information unique to this library. This is currently unused and sets
+ only default variables.
+-</p></div><div class="section" title="Utilities"><div class="titlepage"><div><div><h4 class="title"><a id="test.harness.utils"></a>Utilities</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="test.harness.utils"></a>Utilities</h4></div></div></div><p>
+ </p><p>
+ The testsuite directory also contains some files that implement
+ functionality that is intended to make writing test cases easier,
+@@ -447,7 +446,7 @@
+ during testing.
+ </p><p>
+ These files include the following functionality:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <span class="emphasis"><em>testsuite_abi.h</em></span>,
+ <span class="emphasis"><em>testsuite_abi.cc</em></span>,
+ <span class="emphasis"><em>testsuite_abi_check.cc</em></span>
+@@ -477,7 +476,7 @@
+ <span class="emphasis"><em>testsuite_hooks.cc</em></span>
+ </p><p>
+ A large number of utilities, including:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>VERIFY</p></li><li class="listitem"><p>set_memory_limits</p></li><li class="listitem"><p>verify_demangle</p></li><li class="listitem"><p>run_tests_wrapped_locale</p></li><li class="listitem"><p>run_tests_wrapped_env</p></li><li class="listitem"><p>try_named_locale</p></li><li class="listitem"><p>try_mkfifo</p></li><li class="listitem"><p>func_callback</p></li><li class="listitem"><p>counter</p></li><li class="listitem"><p>copy_tracker</p></li><li class="listitem"><p>copy_constructor</p></li><li class="listitem"><p>assignment_operator</p></li><li class="listitem"><p>destructor</p></li><li class="listitem"><p>pod_char, pod_int and associated char_traits specializations</p></li></ul></div></li><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>VERIFY</p></li><li class="listitem"><p>set_memory_limits</p></li><li class="listitem"><p>verify_demangle</p></li><li class="listitem"><p>run_tests_wrapped_locale</p></li><li class="listitem"><p>run_tests_wrapped_env</p></li><li class="listitem"><p>try_named_locale</p></li><li class="listitem"><p>try_mkfifo</p></li><li class="listitem"><p>func_callback</p></li><li class="listitem"><p>counter</p></li><li class="listitem"><p>copy_tracker</p></li><li class="listitem"><p>copy_constructor</p></li><li class="listitem"><p>assignment_operator</p></li><li class="listitem"><p>destructor</p></li><li class="listitem"><p>pod_char, pod_int and associated char_traits specializations</p></li></ul></div></li><li class="listitem"><p>
+ <span class="emphasis"><em>testsuite_io.h</em></span>
+ </p><p>
+ Error, exception, and constraint checking for
+@@ -491,10 +490,10 @@
+ </p><p>
+ A number of class abstractions for performance counters, and
+ reporting functions including:
+- </p><div class="itemizedlist"><ul class="itemizedlist" 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" title="Special Topics"><div class="titlepage"><div><div><h3 class="title"><a id="test.special"></a>Special Topics</h3></div></div></div><div class="section" title="Qualifying Exception Safety Guarantees"><div class="titlepage"><div><div><h4 class="title"><a id="test.exception.safety"></a>
++ </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>
+ Qualifying Exception Safety Guarantees
+- <a id="idp22593984" class="indexterm"></a>
+-</h4></div></div></div><div class="section" title="Overview"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.overview"></a>Overview</h5></div></div></div><p>
++ <a id="idm269979621504" class="indexterm"></a>
++</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>
+ Testing is composed of running a particular test sequence,
+ and looking at what happens to the surrounding code when
+ exceptions are thrown. Each test is composed of measuring
+@@ -524,9 +523,9 @@
+ completes without an exception being thrown, assume all
+ potential error paths have been exercised in a sequential
+ manner.
+- </p></div><div class="section" title="Existing tests"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.status"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.status"></a>
+ Existing tests
+-</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Ad Hoc
+ </p><p>
+ For example,
+@@ -563,9 +562,9 @@
+ instrumentation to <code class="classname">iterator</code>
+ and <code class="classname">const_iterator</code> types that throw
+ conditionally on iterator operations.
+- </p></li></ul></div></div><div class="section" title="C++11 Requirements Test Sequence Descriptions"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.containers"></a>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.containers"></a>
+ C++11 Requirements Test Sequence Descriptions
+-</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Basic
+ </p><p>
+ Basic consistency on exception propagation tests. For
+@@ -636,4 +635,4 @@
+ The general form demonstrated in
+ <code class="filename">testsuite/23_containers/list/requirements/exception/propagation_coherent.cc
+ </code>. The instantiating test object is <code class="classname">__gnu_test::propagation_coherent</code> and is detailed in <code class="filename">testsuite/util/exception/safety.h</code>.
+- </p></li></ul></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Porting to New Hardware or Operating Systems </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> ABI Policy and Guidelines</td></tr></table></div></body></html>
++ </p></li></ul></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Porting to New Hardware or Operating Systems </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> ABI Policy and Guidelines</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/traits.html
++++ b/src/libstdc++-v3/doc/html/manual/traits.html
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Utilities
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="strings.html">Next</a></td></tr></table><hr /></div><div class="section" title="Traits"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.traits"></a>Traits</h2></div></div></div><p>
++</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>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="memory.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="strings.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Memory </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 7. 
+ Strings
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/using.html
++++ b/src/libstdc++-v3/doc/html/manual/using.html
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Introduction
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 3. Using"><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" title="Command Options"><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>
++</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>
+ The set of features available in the GNU C++ library is shaped
+ by
+ several <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Invoking-GCC.html" target="_top">GCC
+@@ -11,5 +10,5 @@
+ enumerated and detailed in the table below.
+ </p><p>
+ 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.
+- </p><div class="table"><a id="idp13018432"></a><p class="title"><strong>Table 3.1. C++ Command Options</strong></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std=c++98</code></td><td align="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td align="left"><code class="literal">-std=gnu++98</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++11</code></td><td align="left">Use the 2011 ISO C++ standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++11</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-fexceptions</code></td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left"><code class="literal">-frtti</code></td><td align="left">As above, but RTTI-free dialect.</td></tr><tr><td align="left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td align="left">For ISO C++11 &lt;thread&gt;, &lt;future&gt;,
+- &lt;mutex&gt;, or &lt;condition_variable&gt;.</td></tr><tr><td align="left"><code class="literal">-fopenmp</code></td><td align="left">For <a class="link" href="parallel_mode.html" title="Chapter 18. Parallel Mode">parallel</a> mode.</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="intro.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Make </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Headers</td></tr></table></div></body></html>
++ </p><div class="table"><a id="idm269989171392"></a><p class="title"><strong>Table 3.1. C++ Command Options</strong></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std=c++98</code></td><td align="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td align="left"><code class="literal">-std=gnu++98</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++11</code></td><td align="left">Use the 2011 ISO C++ standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++11</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-fexceptions</code></td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left"><code class="literal">-frtti</code></td><td align="left">As above, but RTTI-free dialect.</td></tr><tr><td align="left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td align="left">For ISO C++11 &lt;thread&gt;, &lt;future&gt;,
++ &lt;mutex&gt;, or &lt;condition_variable&gt;.</td></tr><tr><td align="left"><code class="literal">-fopenmp</code></td><td align="left">For <a class="link" href="parallel_mode.html" title="Chapter 18. Parallel Mode">parallel</a> mode.</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="intro.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Make </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Headers</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/using_concurrency.html
++++ b/src/libstdc++-v3/doc/html/manual/using_concurrency.html
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Concurrency"><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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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
+ of multithreaded applications which use the Standard C++
+ library. This information is GCC-specific since the C++
+ standard does not address matters of multithreaded applications.
+- </p><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.prereq"></a>Prerequisites</h3></div></div></div><p>All normal disclaimers aside, multithreaded C++ application are
++ </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.prereq"></a>Prerequisites</h3></div></div></div><p>All normal disclaimers aside, multithreaded C++ application are
+ only supported when libstdc++ and all user code was built with
+ compilers which report (via <code class="code"> gcc/g++ -v </code>) the same thread
+ model and that model is not <span class="emphasis"><em>single</em></span>. As long as your
+@@ -33,7 +32,7 @@
+ -pthread is honored. Some other ports use other switches.
+ AFAIK, none of this is properly documented anywhere other than
+ in ``gcc -dumpspecs'' (look at lib and cpp entries).
+- </p></div><div class="section" title="Thread Safety"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.thread_safety"></a>Thread Safety</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.thread_safety"></a>Thread Safety</h3></div></div></div><p>
+ In the terms of the 2011 C++ standard a thread-safe program is one which
+ does not perform any conflicting non-atomic operations on memory locations
+ and so does not contain any data races.
+@@ -45,7 +44,7 @@
+ prior to the 2011 standard.
+ </p><p>The library strives to be thread-safe when all of the following
+ conditions are met:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>The system's libc is itself thread-safe,
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>The system's libc is itself thread-safe,
+ </p></li><li class="listitem"><p>
+ The compiler in use reports a thread model other than
+ 'single'. This can be tested via output from <code class="code">gcc
+@@ -156,9 +155,9 @@
+ <a class="link" href="http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/user-faq.html" target="_top">Threads
+ and memory model for C++</a> pages, particularly the <a class="link" href="http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/threadsintro.html" target="_top">introduction</a>
+ and <a class="link" href="http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/user-faq.html" target="_top">FAQ</a>.
+- </p></div><div class="section" title="Atomics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.atomics"></a>Atomics</h3></div></div></div><p>
+- </p></div><div class="section" title="IO"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.io"></a>IO</h3></div></div></div><p>This gets a bit tricky. Please read carefully, and bear with me.
+- </p><div class="section" title="Structure"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.structure"></a>Structure</h4></div></div></div><p>A wrapper
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.atomics"></a>Atomics</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.io"></a>IO</h3></div></div></div><p>This gets a bit tricky. Please read carefully, and bear with me.
++ </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.structure"></a>Structure</h4></div></div></div><p>A wrapper
+ type called <code class="code">__basic_file</code> provides our abstraction layer
+ for the <code class="code">std::filebuf</code> classes. Nearly all decisions dealing
+ with actual input and output must be made in <code class="code">__basic_file</code>.
+@@ -166,7 +165,7 @@
+ but is not used in the current code. Providing locking at any higher
+ level is akin to providing locking within containers, and is not done
+ for the same reasons (see the links above).
+- </p></div><div class="section" title="Defaults"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.defaults"></a>Defaults</h4></div></div></div><p>The __basic_file type is simply a collection of small wrappers around
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.defaults"></a>Defaults</h4></div></div></div><p>The __basic_file type is simply a collection of small wrappers around
+ the C stdio layer (again, see the link under Structure). We do no
+ locking ourselves, but simply pass through to calls to <code class="code">fopen</code>,
+ <code class="code">fwrite</code>, and so forth.
+@@ -188,7 +187,7 @@
+ contained in the stream formatting classes (e.g., setting up callbacks
+ inside an <code class="code">std::ofstream</code>), you need to guard such accesses
+ like any other critical shared resource.
+- </p></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.future"></a>Future</h4></div></div></div><p> A
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.future"></a>Future</h4></div></div></div><p> A
+ second choice may be available for I/O implementations: libio. This is
+ disabled by default, and in fact will not currently work due to other
+ issues. It will be revisited, however.
+@@ -213,10 +212,10 @@
+ version will see calls from libstdc++ directly into the glibc already
+ installed. For other platforms, a copy of the libio subsection will
+ be built and included in libstdc++.
+- </p></div><div class="section" title="Alternatives"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.alt"></a>Alternatives</h4></div></div></div><p>Don't forget that other cstdio implementations are possible. You could
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.alt"></a>Alternatives</h4></div></div></div><p>Don't forget that other cstdio implementations are possible. You could
+ easily write one to perform your own forms of locking, to solve your
+ "interesting" problems.
+- </p></div></div><div class="section" title="Containers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.containers"></a>Containers</h3></div></div></div><p>This section discusses issues surrounding the design of
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.containers"></a>Containers</h3></div></div></div><p>This section discusses issues surrounding the design of
+ multithreaded applications which use Standard C++ containers.
+ All information in this section is current as of the gcc 3.0
+ release and all later point releases. Although earlier gcc
+@@ -269,4 +268,4 @@
+ useful are details
+ on <a class="link" href="memory.html#std.util.memory.allocator" title="Allocators">allocator</a>
+ options and capabilities.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_exceptions.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Linking </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Exceptions</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_exceptions.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Linking </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Exceptions</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
++++ b/src/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Linking"><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" title="Almost Nothing"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.freestanding"></a>Almost Nothing</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ Or as close as it gets: freestanding. This is a minimal
+ configuration, with only partial support for the standard
+ library. Assume only the following header files can be used:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <code class="filename">cstdarg</code>
+ </p></li><li class="listitem"><p>
+ <code class="filename">cstddef</code>
+@@ -22,12 +21,12 @@
+ <code class="filename">typeinfo</code>
+ </p></li></ul></div><p>
+ In addition, throw in
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <code class="filename">cxxabi.h</code>.
+ </p></li></ul></div><p>
+ In the
+ C++11 <a class="link" href="using.html#manual.intro.using.flags" title="Command Options">dialect</a> add
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <code class="filename">initializer_list</code>
+ </p></li><li class="listitem"><p>
+ <code class="filename">type_traits</code>
+@@ -40,7 +39,7 @@
+ No attempt is made to verify that only the minimal subset
+ identified above is actually used at compile time. Violations
+ are diagnosed as undefined symbols at link time.
+- </p></div><div class="section" title="Finding Dynamic or Shared Libraries"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.dynamic"></a>Finding Dynamic or Shared Libraries</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.dynamic"></a>Finding Dynamic or Shared Libraries</h3></div></div></div><p>
+ If the only library built is the static library
+ (<code class="filename">libstdc++.a</code>), or if
+ specifying static linking, this section is can be skipped. But
+@@ -63,7 +62,7 @@
+ </p><p>
+ Methods vary for different platforms and different styles, and
+ are printed to the screen during installation. To summarize:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ At runtime set <code class="literal">LD_LIBRARY_PATH</code> in your
+ environment correctly, so that the shared library for
+ libstdc++ can be found and loaded. Be certain that you
+@@ -75,7 +74,7 @@
+ <span class="command"><strong>g++</strong></span>, which will in turn pass them on to
+ the linker. The exact format of the options is dependent on
+ which linker you use:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
+ GNU ld (default on GNU/Linux):
+ <code class="literal">-Wl,-rpath,</code><code class="filename">destdir/lib</code>
+ </p></li><li class="listitem"><p>
+@@ -106,4 +105,4 @@
+ also installed, for use with Libtool. If you use Libtool to
+ create your executables, these details are taken care of for
+ you.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_namespaces.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Namespaces </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Concurrency</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_namespaces.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Namespaces </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Concurrency</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/using_exceptions.html
++++ b/src/libstdc++-v3/doc/html/manual/using_exceptions.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; exception&#10; , &#10; error&#10; , &#10; exception neutrality&#10; , &#10; exception safety&#10; , &#10; exception propagation&#10; , &#10; -fno-exceptions&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Exceptions"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.exceptions"></a>Exceptions</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; exception&#10; , &#10; error&#10; , &#10; exception neutrality&#10; , &#10; exception safety&#10; , &#10; exception propagation&#10; , &#10; -fno-exceptions&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ The C++ language provides language support for stack unwinding
+ with <code class="literal">try</code> and <code class="literal">catch</code> blocks and
+ the <code class="literal">throw</code> keyword.
+@@ -12,7 +11,7 @@
+ </p><p>
+ Two general topics of discussion follow:
+ exception neutrality and exception safety.
+-</p><div class="section" title="Exception Safety"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.safety"></a>Exception Safety</h3></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.safety"></a>Exception Safety</h3></div></div></div><p>
+ What is exception-safe code?
+ </p><p>
+ Will define this as reasonable and well-defined behavior by classes
+@@ -27,7 +26,7 @@
+ Using the layered approach from Abrahams, can classify library
+ components as providing set levels of safety. These will be called
+ exception guarantees, and can be divided into three categories.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ One. Don't throw.
+ </p><p>
+ As specified in 23.2.1 general container requirements. Applicable
+@@ -51,7 +50,7 @@
+ Member functions <code class="function">insert</code> of a single
+ element, <code class="function">push_back</code>, <code class="function">push_front</code>,
+ and <code class="function">rehash</code>.
+- </p></li></ul></div></div><div class="section" title="Exception Neutrality"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.propagating"></a>Exception Neutrality</h3></div></div></div><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.propagating"></a>Exception Neutrality</h3></div></div></div><p>
+ Simply put, once thrown an exception object should continue in
+ flight unless handled explicitly. In practice, this means
+ propagating exceptions should not be swallowed in
+@@ -75,7 +74,7 @@
+ Unfortunately, this tends to be more of a guideline than a strict
+ rule as applied to the standard library. As such, the following is
+ a list of known problem areas where exceptions are not propagated.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Input/Output
+ </p><p>
+ The destructor <code class="function">ios_base::Init::~Init()</code>
+@@ -101,7 +100,7 @@
+ The constructors of <code class="classname">thread</code> that take a
+ callable function argument swallow all exceptions resulting from
+ executing the function argument.
+- </p></li></ul></div></div><div class="section" title="Doing without"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.no"></a>Doing without</h3></div></div></div><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.no"></a>Doing without</h3></div></div></div><p>
+ C++ is a language that strives to be as efficient as is possible
+ in delivering features. As such, considerable care is used by both
+ language implementer and designers to make sure unused features
+@@ -220,7 +219,7 @@
+ substitution of the C language keyword
+ <code class="literal">const</code> with the uglified
+ doppelganger <code class="literal">__const</code>.
+-</p></div><div class="section" title="Compatibility"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.compat"></a>Compatibility</h3></div></div></div><div class="section" title="With C"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.c"></a>With <code class="literal">C</code></h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.compat"></a>Compatibility</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.c"></a>With <code class="literal">C</code></h4></div></div></div><p>
+ C language code that is expecting to interoperate with C++ should be
+ compiled with <code class="literal">-fexceptions</code>. This will make
+ debugging a C language function called as part of C++-induced stack
+@@ -235,7 +234,7 @@
+ getting these details right. For GNU systems, all appropriate parts
+ of the GNU C library are already compiled
+ with <code class="literal">-fexceptions</code>.
+-</p></div><div class="section" title="With POSIX thread cancellation"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.posix"></a>With <code class="literal">POSIX</code> thread cancellation</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.posix"></a>With <code class="literal">POSIX</code> thread cancellation</h4></div></div></div><p>
+ GNU systems re-use some of the exception handling mechanisms to
+ track control flow for <code class="literal">POSIX</code> thread cancellation.
+ </p><p>
+@@ -266,7 +265,7 @@
+ }
+ catch(...)
+ { this-&gt;_M_setstate(ios_base::badbit); }
+-</pre></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry" title="System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)"><a id="idp13615600"></a><p><span class="title"><em>
++</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="idm269988575088"></a><p><span class="title"><em>
+ <a class="link" href="http://www.opengroup.org/austin" target="_top">
+ System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ </a>
+@@ -275,40 +274,40 @@
+ . </span><span class="copyright">Copyright © 2008
+ The Open Group/The Institute of Electrical and Electronics
+ Engineers, Inc.
+- . </span></p></div><div class="biblioentry" title="Error and Exception Handling"><a id="idp13619296"></a><p><span class="title"><em>
++ . </span></p></div><div class="biblioentry"><a id="idm269988571392"></a><p><span class="title"><em>
+ <a class="link" href="http://www.boost.org/community/error_handling.html" target="_top">
+ Error and Exception Handling
+ </a>
+ </em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams </span>. </span><span class="publisher"><span class="publishername">
+ Boost
+- . </span></span></p></div><div class="biblioentry" title="Exception-Safety in Generic Components"><a id="idp13622992"></a><p><span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="idm269988567696"></a><p><span class="title"><em>
+ <a class="link" href="http://www.boost.org/community/exception_safety.html" target="_top">
+ Exception-Safety in Generic Components
+ </a>
+ </em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams</span>. </span><span class="publisher"><span class="publishername">
+ Boost
+- . </span></span></p></div><div class="biblioentry" title="Standard Library Exception Policy"><a id="idp13626704"></a><p><span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="idm269988563984"></a><p><span class="title"><em>
+ <a class="link" href="www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf" target="_top">
+ Standard Library Exception Policy
+ </a>
+ </em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
+ WG21 N1077
+- . </span></span></p></div><div class="biblioentry" title="ia64 c++ abi exception handling"><a id="idp13630416"></a><p><span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="idm269988560272"></a><p><span class="title"><em>
+ <a class="link" href="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html" target="_top">
+ ia64 c++ abi exception handling
+ </a>
+ </em>. </span><span class="author"><span class="firstname">Richard</span> <span class="surname">Henderson</span>. </span><span class="publisher"><span class="publishername">
+ GNU
+- . </span></span></p></div><div class="biblioentry" title="Appendix E: Standard-Library Exception Safety"><a id="idp13634112"></a><p><span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="idm269988556576"></a><p><span class="title"><em>
+ <a class="link" href="http://www.research.att.com/~bs/3rd_safe.pdf" target="_top">
+ Appendix E: Standard-Library Exception Safety
+ </a>
+- </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span></p></div><div class="biblioentry"><a id="idp13636928"></a><p><span class="citetitle"><em class="citetitle">
++ </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span></p></div><div class="biblioentry"><a id="idm269988553760"></a><p><span class="citetitle"><em class="citetitle">
+ Exceptional C++
+ </em>. </span><span class="pagenums">
+ Exception-Safety Issues and Techniques
+- . </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry" title="GCC Bug 25191: exception_defines.h #defines try/catch"><a id="idp13639312"></a><p><span class="title"><em>
++ . </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry"><a id="idm269988551376"></a><p><span class="title"><em>
+ <a class="link" href="http://gcc.gnu.org/PR25191" target="_top">
+ GCC Bug 25191: exception_defines.h #defines try/catch
+ </a>
+- </em>. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Debugging Support</td></tr></table></div></body></html>
++ </em>. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Debugging Support</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/using_headers.html
++++ b/src/libstdc++-v3/doc/html/manual/using_headers.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Headers"><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" title="Header Files"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.all"></a>Header Files</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ The C++ standard specifies the entire set of header files that
+ must be available to all hosted implementations. Actually, the
+ word "files" is a misnomer, since the contents of the
+@@ -19,19 +18,19 @@
+ the 1998 standard as updated for 2003, and the current 2011 standard.
+ </p><p>
+ 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>.
+- </p><div class="table"><a id="idp13045856"></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="idp13082336"></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>
++ </p><div class="table"><a id="idm269989143968"></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="idm269989107488"></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>
+ C++11 include files. These are only available in C++11 compilation
+ mode, i.e. <code class="literal">-std=c++11</code> or <code class="literal">-std=gnu++11</code>.
+-</p><p></p><div class="table"><a id="idp13107072"></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="idp13158512"></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>
++</p><p></p><div class="table"><a id="idm269989082752"></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="idm269989031312"></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>
+ In addition, TR1 includes as:
+-</p><div class="table"><a id="idp13188400"></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="idp13205328"></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++
++</p><div class="table"><a id="idm269989001424"></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="idm269988984496"></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++
+ compiler supports scalar decimal floating-point types defined via
+ <code class="code">__attribute__((mode(SD|DD|LD)))</code>.
+-</p><div class="table"><a id="idp13226400"></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>
++</p><div class="table"><a id="idm269988963424"></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>
+ Also included are files for the C++ ABI interface:
+-</p><div class="table"><a id="idp13231920"></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>
++</p><div class="table"><a id="idm269988957904"></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>
+ And a large variety of extensions.
+-</p><div class="table"><a id="idp13238320"></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="idp13274048"></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="idp13288816"></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="idp13302192"></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" title="Mixing Headers"><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.
++</p><div class="table"><a id="idm269988951504"></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="idm269988915776"></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="idm269988901008"></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="idm269988887632"></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.
+ </p><p>First, mixing different dialects of the standard headers is not
+ possible. It's an all-or-nothing affair. Thus, code like
+ </p><pre class="programlisting">
+@@ -54,7 +53,7 @@
+ #include &lt;tr1/type_traits&gt;
+ #include &lt;type_traits&gt;
+ </pre><p> Several parts of C++11 diverge quite substantially from TR1 predecessors.
+-</p></div><div class="section" title="The C Headers and namespace std"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.cheaders"></a>The C Headers and <code class="code">namespace std</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.cheaders"></a>The C Headers and <code class="code">namespace std</code></h3></div></div></div><p>
+ The standard specifies that if one includes the C-style header
+ (&lt;math.h&gt; in this case), the symbols will be available
+ in the global namespace and perhaps in
+@@ -73,10 +72,10 @@
+ used uniformly, instead of a combination
+ of <code class="code">std::sinf</code>, <code class="code">std::sin</code>,
+ and <code class="code">std::sinl</code>.
+-</p></div><div class="section" title="Precompiled Headers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.pre"></a>Precompiled Headers</h3></div></div></div><p>There are three base header files that are provided. They can be
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.pre"></a>Precompiled Headers</h3></div></div></div><p>There are three base header files that are provided. They can be
+ used to precompile the standard headers and extensions into binary
+ files that may the be used to speed compiles that use these headers.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>stdc++.h</p><p>Includes all standard headers. Actual content varies depending on
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>stdc++.h</p><p>Includes all standard headers. Actual content varies depending on
+ language dialect.
+ </p></li><li class="listitem"><p>stdtr1c++.h</p><p>Includes all of &lt;stdc++.h&gt;, and adds all the TR1 headers.
+ </p></li><li class="listitem"><p>extc++.h</p><p>Includes all of &lt;stdtr1c++.h&gt;, and adds all the Extension headers.
+@@ -100,4 +99,4 @@
+ . /mnt/share/bld/H-x86-gcc.20071201/include/c++/4.3.0/iostream
+ . /mnt/share/bld/H-x86-gcc.20071201include/c++/4.3.0/string
+ </pre><p>The exclamation point to the left of the <code class="code">stdc++.h.gch</code> listing means that the generated PCH file was used, and thus the </p><p></p><p> Detailed information about creating precompiled header files can be found in the GCC <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html" target="_top">documentation</a>.
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_macros.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 3. Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Macros</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_macros.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 3. Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Macros</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/using_macros.html
++++ b/src/libstdc++-v3/doc/html/manual/using_macros.html
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Macros"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.macros"></a>Macros</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ All library macros begin with <code class="code">_GLIBCXX_</code>.
+ </p><p>
+ Furthermore, all pre-processor macros, switches, and
+@@ -18,7 +17,7 @@
+ those macros listed below are offered for consideration by the
+ general public.
+ </p><p>Below is the macro which users may check for library version
+- information. </p><div class="variablelist"><dl><dt><span class="term"><code class="code">__GLIBCXX__</code></span></dt><dd><p>The current version of
++ information. </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">__GLIBCXX__</code></span></dt><dd><p>The current version of
+ libstdc++ in compressed ISO date format, form of an unsigned
+ long. For details on the value of this particular macro for a
+ particular release, please consult this <a class="link" href="abi.html" title="ABI Policy and Guidelines">
+@@ -40,7 +39,7 @@
+ Experimenting with different values with the expectation of
+ consistent linkage requires changing the config headers before
+ building/installing the library.
+- </p><div class="variablelist"><dl><dt><span class="term"><code class="code">_GLIBCXX_USE_DEPRECATED</code></span></dt><dd><p>
++ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">_GLIBCXX_USE_DEPRECATED</code></span></dt><dd><p>
+ Defined by default. Not configurable. ABI-changing. Turning this off
+ removes older ARM-style iostreams code, and other anachronisms
+ from the API. This macro is dependent on the version of the
+@@ -74,4 +73,4 @@
+ </p></dd><dt><span class="term"><code class="code">_GLIBCXX_PROFILE</code></span></dt><dd><p>Undefined by default. When defined, compiles user code
+ using the <a class="link" href="profile_mode.html" title="Chapter 19. Profile Mode">profile
+ mode</a>.
+- </p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_namespaces.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Headers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Namespaces</td></tr></table></div></body></html>
++ </p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_namespaces.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Headers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Namespaces</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/using_namespaces.html
++++ b/src/libstdc++-v3/doc/html/manual/using_namespaces.html
+@@ -1,7 +1,6 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Namespaces"><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" title="Available Namespaces"><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.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>std</p><p>The ISO C++ standards specify that "all library entities are defined
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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.
++</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
+ within namespace std." This includes namespaces nested
+ within <code class="code">namespace std</code>, such as <code class="code">namespace
+ std::tr1</code>.
+@@ -12,11 +11,11 @@
+ include <code class="code">__gnu_cxx</code>, <code class="code">__gnu_debug</code>, <code class="code">__gnu_parallel</code>,
+ and <code class="code">__gnu_pbds</code>.
+ </p></li></ul></div><p> A complete list of implementation namespaces (including namespace contents) is available in the generated source <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html" target="_top">documentation</a>.
+-</p></div><div class="section" title="namespace std"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.std"></a>namespace std</h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.std"></a>namespace std</h3></div></div></div><p>
+ One standard requirement is that the library components are defined
+ in <code class="code">namespace std::</code>. Thus, in order to use these types or
+ functions, one must do one of two things:
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>put a kind of <span class="emphasis"><em>using-declaration</em></span> in your source
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>put a kind of <span class="emphasis"><em>using-declaration</em></span> in your source
+ (either <code class="code">using namespace std;</code> or i.e. <code class="code">using
+ std::string;</code>) This approach works well for individual source files, but
+ should not be used in a global context, like header files.
+@@ -25,7 +24,7 @@
+ (i.e. <code class="code">std::string</code>, <code class="code">std::cout</code>) Always can be
+ used, and usually enhanced, by strategic use of typedefs. (In the
+ cases where the qualified verbiage becomes unwieldy.)
+- </p></li></ul></div></div><div class="section" title="Using Namespace Composition"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.comp"></a>Using Namespace Composition</h3></div></div></div><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.comp"></a>Using Namespace Composition</h3></div></div></div><p>
+ Best practice in programming suggests sequestering new data or
+ functionality in a sanely-named, unique namespace whenever
+ possible. This is considered an advantage over dumping everything in
+@@ -58,4 +57,4 @@
+ std::string;</code> (depending on whether the system has
+ libstdc++ in <code class="code">std::</code> or not). (ideas from
+ Llewelly and Karl Nelson)
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_macros.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Macros </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Linking</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_macros.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Macros </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Linking</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/html/manual/utilities.html
++++ b/src/libstdc++-v3/doc/html/manual/utilities.html
+@@ -1,17 +1,16 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="bk01pt02ch05s02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="bk01pt02ch05s02.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. 
+ Utilities
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt02ch05s02.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 6.  Utilities"><div class="titlepage"><div><div><h2 class="title"><a id="std.util"></a>Chapter 6. 
++ </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. 
+ Utilities
+- <a id="idp13835728" class="indexterm"></a>
+-</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#idp13894640">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13898192">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13911488">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#idp15484560">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15507072">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15514368">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15528992">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#idp15545344">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15548928">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" title="Functors"><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
++ <a id="idm269988357376" class="indexterm"></a>
++</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#idm269988298944">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm269988295392">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269988282096">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#idm269986714912">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269986692400">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269986685104">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269986670480">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#idm269986654128">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269986650544">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
+ get slightly the wrong idea. In the interest of not reinventing
+ the wheel, we will refer you to the introduction to the functor
+ concept written by SGI as part of their STL, in
+ <a class="link" href="http://www.sgi.com/tech/stl/functors.html" target="_top">their
+ http://www.sgi.com/tech/stl/functors.html</a>.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt02ch05s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concept Checking </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Pairs</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt02ch05s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concept Checking </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Pairs</td></tr></table></div></body></html>
+\ No newline at end of file
+--- a/src/libstdc++-v3/doc/xml/manual/spine.xml
++++ b/src/libstdc++-v3/doc/xml/manual/spine.xml
+@@ -20,6 +20,7 @@
+ <year>2010</year>
+ <year>2011</year>
+ <year>2012</year>
++ <year>2013</year>
+ <holder>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org">FSF</link>
+ </holder>
+--- a/src/libstdc++-v3/doc/xml/manual/status_cxx2011.xml
++++ b/src/libstdc++-v3/doc/xml/manual/status_cxx2011.xml
+@@ -885,10 +885,11 @@
+ <entry/>
+ </row>
+ <row>
++ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>20.9.7.6</entry>
+ <entry>Other transformations</entry>
+- <entry>Y</entry>
+- <entry/>
++ <entry>Partial</entry>
++ <entry>Missing <code>aligned_union</code>.</entry>
+ </row>
+ <row>
+ <entry>20.10</entry>
+--- a/src/libstdc++-v3/include/bits/basic_string.h
++++ b/src/libstdc++-v3/include/bits/basic_string.h
+@@ -2764,10 +2764,9 @@
+ *
+ * Stores characters from @a __is into @a __str until @a __delim is
+ * found, the end of the stream is encountered, or str.max_size()
+- * is reached. If is.width() is non-zero, that is the limit on the
+- * number of characters stored into @a __str. Any previous
+- * contents of @a __str are erased. If @a __delim was encountered,
+- * it is extracted but not stored into @a __str.
++ * is reached. Any previous contents of @a __str are erased. If
++ * @a __delim is encountered, it is extracted but not stored into
++ * @a __str.
+ */
+ template<typename _CharT, typename _Traits, typename _Alloc>
+ basic_istream<_CharT, _Traits>&
+@@ -2782,10 +2781,9 @@
+ *
+ * Stores characters from is into @a __str until &apos;\n&apos; is
+ * found, the end of the stream is encountered, or str.max_size()
+- * is reached. If __is.width() is non-zero, that is the limit on
+- * the number of characters stored into @a __str. Any previous
+- * contents of @a __str are erased. If end of line was
+- * encountered, it is extracted but not stored into @a __str.
++ * is reached. Any previous contents of @a __str are erased. If
++ * end of line is encountered, it is extracted but not stored into
++ * @a __str.
+ */
+ template<typename _CharT, typename _Traits, typename _Alloc>
+ inline basic_istream<_CharT, _Traits>&
+--- a/src/libstdc++-v3/include/bits/random.tcc
++++ b/src/libstdc++-v3/include/bits/random.tcc
+@@ -1125,7 +1125,7 @@
+ operator()(_UniformRandomNumberGenerator& __urng,
+ const param_type& __p)
+ {
+- typedef typename std::gamma_distribution<result_type>::param_type
++ typedef typename std::gamma_distribution<double>::param_type
+ param_type;
+
+ const double __y =
+--- a/src/libstdc++-v3/include/bits/shared_ptr_base.h
++++ b/src/libstdc++-v3/include/bits/shared_ptr_base.h
+@@ -394,7 +394,7 @@
+ public:
+ template<typename... _Args>
+ _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
+- : _M_impl(__a), _M_storage()
++ : _M_impl(__a)
+ {
+ _M_impl._M_ptr = static_cast<_Tp*>(static_cast<void*>(&_M_storage));
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+--- a/src/libstdc++-v3/include/bits/stl_algo.h
++++ b/src/libstdc++-v3/include/bits/stl_algo.h
+@@ -74,10 +74,11 @@
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+- /// Swaps the median value of *__a, *__b and *__c to *__a
++ /// Swaps the median value of *__a, *__b and *__c to *__result
+ template<typename _Iterator>
+ void
+- __move_median_first(_Iterator __a, _Iterator __b, _Iterator __c)
++ __move_median_to_first(_Iterator __result, _Iterator __a,
++ _Iterator __b, _Iterator __c)
+ {
+ // concept requirements
+ __glibcxx_function_requires(_LessThanComparableConcept<
+@@ -86,23 +87,26 @@
+ if (*__a < *__b)
+ {
+ if (*__b < *__c)
+- std::iter_swap(__a, __b);
++ std::iter_swap(__result, __b);
+ else if (*__a < *__c)
+- std::iter_swap(__a, __c);
++ std::iter_swap(__result, __c);
++ else
++ std::iter_swap(__result, __a);
+ }
+ else if (*__a < *__c)
+- return;
++ std::iter_swap(__result, __a);
+ else if (*__b < *__c)
+- std::iter_swap(__a, __c);
++ std::iter_swap(__result, __c);
+ else
+- std::iter_swap(__a, __b);
++ std::iter_swap(__result, __b);
+ }
+
+- /// Swaps the median value of *__a, *__b and *__c under __comp to *__a
++ /// Swaps the median value of *__a, *__b and *__c under __comp to *__result
+ template<typename _Iterator, typename _Compare>
+ void
+- __move_median_first(_Iterator __a, _Iterator __b, _Iterator __c,
+- _Compare __comp)
++ __move_median_to_first(_Iterator __result, _Iterator __a,
++ _Iterator __b, _Iterator __c,
++ _Compare __comp)
+ {
+ // concept requirements
+ __glibcxx_function_requires(_BinaryFunctionConcept<_Compare, bool,
+@@ -112,16 +116,18 @@
+ if (__comp(*__a, *__b))
+ {
+ if (__comp(*__b, *__c))
+- std::iter_swap(__a, __b);
++ std::iter_swap(__result, __b);
+ else if (__comp(*__a, *__c))
+- std::iter_swap(__a, __c);
++ std::iter_swap(__result, __c);
++ else
++ std::iter_swap(__result, __a);
+ }
+ else if (__comp(*__a, *__c))
+- return;
++ std::iter_swap(__result, __a);
+ else if (__comp(*__b, *__c))
+- std::iter_swap(__a, __c);
++ std::iter_swap(__result, __c);
+ else
+- std::iter_swap(__a, __b);
++ std::iter_swap(__result, __b);
+ }
+
+ // for_each
+@@ -2305,7 +2311,7 @@
+ _RandomAccessIterator __last)
+ {
+ _RandomAccessIterator __mid = __first + (__last - __first) / 2;
+- std::__move_median_first(__first, __mid, (__last - 1));
++ std::__move_median_to_first(__first, __first + 1, __mid, __last - 1);
+ return std::__unguarded_partition(__first + 1, __last, *__first);
+ }
+
+@@ -2317,7 +2323,8 @@
+ _RandomAccessIterator __last, _Compare __comp)
+ {
+ _RandomAccessIterator __mid = __first + (__last - __first) / 2;
+- std::__move_median_first(__first, __mid, (__last - 1), __comp);
++ std::__move_median_to_first(__first, __first + 1, __mid, __last - 1,
++ __comp);
+ return std::__unguarded_partition(__first + 1, __last, *__first, __comp);
+ }
+
+--- a/src/libstdc++-v3/include/std/future
++++ b/src/libstdc++-v3/include/std/future
+@@ -1,6 +1,6 @@
+ // <future> -*- C++ -*-
+
+-// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
++// Copyright (C) 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+ // software; you can redistribute it and/or modify it under the
+@@ -456,7 +456,7 @@
+ __setter(promise<void>* __prom);
+
+ template<typename _Tp>
+- static bool
++ static void
+ _S_check(const shared_ptr<_Tp>& __p)
+ {
+ if (!static_cast<bool>(__p))
+--- a/src/libstdc++-v3/src/c++11/future.cc
++++ b/src/libstdc++-v3/src/c++11/future.cc
+@@ -60,7 +60,7 @@
+ const future_error_category&
+ __future_category_instance() noexcept
+ {
+- static const future_error_category __fec;
++ static const future_error_category __fec{};
+ return __fec;
+ }
+ }
+--- a/src/libstdc++-v3/src/c++11/system_error.cc
++++ b/src/libstdc++-v3/src/c++11/system_error.cc
+@@ -62,8 +62,8 @@
+ }
+ };
+
+- const generic_error_category generic_category_instance;
+- const system_error_category system_category_instance;
++ const generic_error_category generic_category_instance{};
++ const system_error_category system_category_instance{};
+ }
+
+ namespace std _GLIBCXX_VISIBILITY(default)
+--- a/src/libstdc++-v3/src/c++98/compatibility.cc
++++ b/src/libstdc++-v3/src/c++98/compatibility.cc
+@@ -518,14 +518,21 @@
+ extern __attribute__((used, weak)) const char _ZTSPe[3] = "Pe";
+ extern __attribute__((used, weak)) const char _ZTSPKe[4] = "PKe";
+ extern __attribute__((used, weak)) const void * const _ZTIe[2]
+- = { (void *) &_ZTVN10__cxxabiv123__fundamental_type_infoE[2],
+- (void *) _ZTSe };
++ = { reinterpret_cast<const void *>
++ (&_ZTVN10__cxxabiv123__fundamental_type_infoE[2]),
++ reinterpret_cast<const void *>(_ZTSe) };
+ extern __attribute__((used, weak)) const void * const _ZTIPe[4]
+- = { (void *) &_ZTVN10__cxxabiv119__pointer_type_infoE[2],
+- (void *) _ZTSPe, (void *) 0L, (void *) _ZTIe };
++ = { reinterpret_cast<const void *>
++ (&_ZTVN10__cxxabiv119__pointer_type_infoE[2]),
++ reinterpret_cast<const void *>(_ZTSPe),
++ reinterpret_cast<const void *>(0L),
++ reinterpret_cast<const void *>(_ZTIe) };
+ extern __attribute__((used, weak)) const void * const _ZTIPKe[4]
+- = { (void *) &_ZTVN10__cxxabiv119__pointer_type_infoE[2],
+- (void *) _ZTSPKe, (void *) 1L, (void *) _ZTIe };
++ = { reinterpret_cast<const void *>
++ (&_ZTVN10__cxxabiv119__pointer_type_infoE[2]),
++ reinterpret_cast<const void *>(_ZTSPKe),
++ reinterpret_cast<const void *>(1L),
++ reinterpret_cast<const void *>(_ZTIe) };
+ #endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+
+ #ifdef _GLIBCXX_SYMVER_DARWIN
+--- a/src/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc
++++ b/src/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc
+@@ -0,0 +1,52 @@
++// Copyright (C) 2013 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++
++// 25.3.2 [lib.alg.nth.element]
++
++// { dg-options "-std=gnu++11" }
++
++#include <algorithm>
++#include <testsuite_hooks.h>
++#include <testsuite_iterators.h>
++
++using __gnu_test::test_container;
++using __gnu_test::random_access_iterator_wrapper;
++
++typedef test_container<int, random_access_iterator_wrapper> Container;
++
++void test01()
++{
++ std::vector<int> v = {
++ 207089,
++ 202585,
++ 180067,
++ 157549,
++ 211592,
++ 216096,
++ 207089
++ };
++
++ Container con(v.data(), v.data() + 7);
++
++ std::nth_element(con.begin(), con.begin() + 3, con.end());
++}
++
++int main()
++{
++ test01();
++ return 0;
++}
+--- a/src/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/58302.cc
++++ b/src/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/58302.cc
+@@ -0,0 +1,34 @@
++// { dg-do compile }
++// { dg-options "-std=gnu++11" }
++// { dg-require-cstdint "" }
++//
++// Copyright (C) 2013 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++
++#include <random>
++
++void test01()
++{
++ typedef std::negative_binomial_distribution<> dist_type;
++
++ std::default_random_engine engine;
++
++ dist_type dist;
++ dist_type::param_type param(3, 0.5);
++
++ dist(engine, param); // compile error!
++}
--- a/src/libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc
+++ b/src/libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc
@@ -1,5 +1,5 @@
@@ -79968,3 +94526,215 @@ Binary files gcc-4.7.3/libcpp/po/zh_TW.gmo and gcc-linaro-4.7-2013.05/libcpp/po/
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
+--- a/src/libstdc++-v3/testsuite/performance/25_algorithms/sort.cc
++++ b/src/libstdc++-v3/testsuite/performance/25_algorithms/sort.cc
+@@ -0,0 +1,65 @@
++// Copyright (C) 2013 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++
++#include <vector>
++#include <algorithm>
++#include <testsuite_performance.h>
++
++int main()
++{
++ using namespace __gnu_test;
++
++ time_counter time;
++ resource_counter resource;
++
++ const int max_size = 10000000;
++
++ std::vector<int> v(max_size);
++
++ for (int i = 0; i < max_size; ++i)
++ v[i] = -i;
++
++ start_counters(time, resource);
++ std::sort(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "reverse", time, resource);
++ clear_counters(time, resource);
++
++ for (int i = 0; i < max_size; ++i)
++ v[i] = i;
++
++ start_counters(time, resource);
++ std::sort(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "forwards", time, resource);
++ clear_counters(time, resource);
++
++ // a simple psuedo-random series which does not rely on rand() and friends
++ v[0] = 0;
++ for (int i = 1; i < max_size; ++i)
++ v[i] = (v[i-1] + 110211473) * 745988807;
++
++ start_counters(time, resource);
++ std::sort(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "random", time, resource);
++
++ return 0;
++}
+--- a/src/libstdc++-v3/testsuite/performance/25_algorithms/sort_heap.cc
++++ b/src/libstdc++-v3/testsuite/performance/25_algorithms/sort_heap.cc
+@@ -0,0 +1,73 @@
++// Copyright (C) 2013 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++
++#include <vector>
++#include <algorithm>
++#include <testsuite_performance.h>
++
++int main()
++{
++ using namespace __gnu_test;
++
++ time_counter time;
++ resource_counter resource;
++
++ const int max_size = 10000000;
++
++ std::vector<int> v(max_size);
++
++ for (int i = 0; i < max_size; ++i)
++ v[i] = -i;
++
++ start_counters(time, resource);
++ std::make_heap(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "make_heap_reverse", time, resource);
++ clear_counters(time, resource);
++
++ for (int i = 0; i < max_size; ++i)
++ v[i] = i;
++
++ start_counters(time, resource);
++ std::make_heap(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "make_heap_forwards", time, resource);
++ clear_counters(time, resource);
++
++ // a simple psuedo-random series which does not rely on rand() and friends
++ v[0] = 0;
++ for (int i = 1; i < max_size; ++i)
++ v[i] = (v[i-1] + 110211473) * 745988807;
++
++ start_counters(time, resource);
++ std::make_heap(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "make_heap_random", time, resource);
++
++
++ start_counters(time, resource);
++ std::sort_heap(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "sort_heap", time, resource);
++ clear_counters(time, resource);
++
++ return 0;
++}
+--- a/src/libstdc++-v3/testsuite/performance/25_algorithms/stable_sort.cc
++++ b/src/libstdc++-v3/testsuite/performance/25_algorithms/stable_sort.cc
+@@ -0,0 +1,65 @@
++// Copyright (C) 2013 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++
++#include <vector>
++#include <algorithm>
++#include <testsuite_performance.h>
++
++int main()
++{
++ using namespace __gnu_test;
++
++ time_counter time;
++ resource_counter resource;
++
++ const int max_size = 10000000;
++
++ std::vector<int> v(max_size);
++
++ for (int i = 0; i < max_size; ++i)
++ v[i] = -i;
++
++ start_counters(time, resource);
++ std::stable_sort(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "reverse", time, resource);
++ clear_counters(time, resource);
++
++ for (int i = 0; i < max_size; ++i)
++ v[i] = i;
++
++ start_counters(time, resource);
++ std::stable_sort(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "forwards", time, resource);
++ clear_counters(time, resource);
++
++ // a simple psuedo-random series which does not rely on rand() and friends
++ v[0] = 0;
++ for (int i = 1; i < max_size; ++i)
++ v[i] = (v[i-1] + 110211473) * 745988807;
++
++ start_counters(time, resource);
++ std::stable_sort(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "random", time, resource);
++
++ return 0;
++}
diff --git a/debian/patches/gcc-multiarch.diff b/debian/patches/gcc-multiarch.diff
index 3e28b71..31e30d3 100644
--- a/debian/patches/gcc-multiarch.diff
+++ b/debian/patches/gcc-multiarch.diff
@@ -4,7 +4,7 @@ Index: b/src/libstdc++-v3/python/hook.in
===================================================================
--- a/src/libstdc++-v3/python/hook.in
+++ b/src/libstdc++-v3/python/hook.in
-@@ -47,7 +47,10 @@
+@@ -47,14 +47,18 @@
libdir = libdir[len (prefix):]
# Compute the ".."s needed to get from libdir to the prefix.
@@ -16,6 +16,17 @@ Index: b/src/libstdc++-v3/python/hook.in
objfile = gdb.current_objfile ().filename
dir_ = os.path.join (os.path.dirname (objfile), dotdots, pythondir)
+
+- if not dir_ in sys.path:
++ if not objfile.startswith('/usr/lib/debug/') and not dir_ in sys.path:
+ sys.path.insert(0, dir_)
+
+ # Load the pretty-printers.
+-from libstdcxx.v6.printers import register_libstdcxx_printers
+-register_libstdcxx_printers (gdb.current_objfile ())
++if gdb.current_objfile () is None or not gdb.current_objfile ().filename.startswith ('/usr/lib/debug/'):
++ from libstdcxx.v6.printers import register_libstdcxx_printers
++ register_libstdcxx_printers (gdb.current_objfile ())
Index: b/src/gcc/config/sh/t-linux
===================================================================
--- a/src/gcc/config/sh/t-linux
@@ -42,7 +53,7 @@ Index: b/src/gcc/config.gcc
===================================================================
--- a/src/gcc/config.gcc
+++ b/src/gcc/config.gcc
-@@ -1829,6 +1829,8 @@
+@@ -1828,6 +1828,8 @@
if test x$enable_targets = xall; then
tm_file="${tm_file} mips/gnu-user64.h mips/linux64.h"
tmake_file="${tmake_file} mips/t-linux64"
@@ -51,7 +62,7 @@ Index: b/src/gcc/config.gcc
fi
case ${target} in
mipsisa32r2*)
-@@ -2228,6 +2235,8 @@
+@@ -2227,6 +2229,8 @@
tm_file="s390/s390.h dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h s390/linux.h"
if test x$enable_targets = xall; then
tmake_file="${tmake_file} s390/t-linux64"
diff --git a/debian/patches/hjl-x32-gcc-4_7-branch-doc.diff b/debian/patches/hjl-x32-gcc-4_7-branch-doc.diff
index 6df6040..0a22d1d 100644
--- a/debian/patches/hjl-x32-gcc-4_7-branch-doc.diff
+++ b/debian/patches/hjl-x32-gcc-4_7-branch-doc.diff
@@ -1,5 +1,5 @@
-diff --git a/src/gcc/doc/invoke.texi b/src/gcc/doc/invoke.texi
-index 221a435..e0dd198 100644
+# DP: Updates from the x32 gcc-4.7 branch (documentation)
+
--- a/src/gcc/doc/invoke.texi
+++ b/src/gcc/doc/invoke.texi
@@ -637,7 +637,7 @@ Objective-C and Objective-C++ Dialects}.
@@ -11,7 +11,7 @@ index 221a435..e0dd198 100644
-m32 -m64 -mx32 -mlarge-data-threshold=@var{num} @gol
-msse2avx -mfentry -m8bit-idiv @gol
-mavx256-split-unaligned-load -mavx256-split-unaligned-store}
-@@ -13568,6 +13568,12 @@ Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
+@@ -13579,6 +13579,12 @@ Attempt to keep the stack boundary aligned to a 2 raised to @var{num}
byte boundary. If @option{-mpreferred-stack-boundary} is not specified,
the default is 4 (16 bytes or 128 bits).
@@ -24,7 +24,7 @@ index 221a435..e0dd198 100644
@item -mincoming-stack-boundary=@var{num}
@opindex mincoming-stack-boundary
Assume the incoming stack is aligned to a 2 raised to @var{num} byte
-@@ -13966,6 +13972,18 @@ be statically or dynamically linked.
+@@ -13977,6 +13983,18 @@ be statically or dynamically linked.
@opindex mcmodel=large
Generate code for the large model: This model makes no assumptions
about addresses and sizes of sections.
@@ -43,8 +43,6 @@ index 221a435..e0dd198 100644
@end table
@node i386 and x86-64 Windows Options
-diff --git a/src/gcc/doc/options.texi b/src/gcc/doc/options.texi
-index 0a54183..08b8b79 100644
--- a/src/gcc/doc/options.texi
+++ b/src/gcc/doc/options.texi
@@ -346,8 +346,6 @@ the value 1 when the option is active and 0 otherwise. If you use @code{Var}
diff --git a/debian/patches/hjl-x32-gcc-4_7-branch.diff b/debian/patches/hjl-x32-gcc-4_7-branch.diff
index 347a8df..637c26e 100644
--- a/debian/patches/hjl-x32-gcc-4_7-branch.diff
+++ b/debian/patches/hjl-x32-gcc-4_7-branch.diff
@@ -1,16 +1,14 @@
-Index: gcc-47/src/ChangeLog.x32
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/ChangeLog.x32 2013-05-20 00:19:40.960055147 +0400
+# DP: Updates from the x32 gcc-4.7 branch
+
+--- /dev/null
++++ b/src/ChangeLog.x32
@@ -0,0 +1,4 @@
+2012-05-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ Merge upstream change
+ * libtool.m4 (_LT_ENABLE_LOCK): Support x32.
-Index: gcc-47/src/boehm-gc/ChangeLog.x32
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/boehm-gc/ChangeLog.x32 2013-05-20 00:19:40.962138326 +0400
+--- /dev/null
++++ b/src/boehm-gc/ChangeLog.x32
@@ -0,0 +1,9 @@
+2012-05-16 H.J. Lu <hongjiu.lu@intel.com>
+
@@ -21,11 +19,9 @@ Index: gcc-47/src/boehm-gc/ChangeLog.x32
+ Merge upstream changes
+ * include/private/gcconfig.h: (ALIGNMENT): Set to 4 for x32.
+ (CPP_WORDSZ): Set to 32 for x32.
-Index: gcc-47/src/boehm-gc/configure
-===================================================================
---- gcc-47.orig/src/boehm-gc/configure 2013-05-20 00:16:08.398063278 +0400
-+++ gcc-47/src/boehm-gc/configure 2013-05-20 00:19:40.981629766 +0400
-@@ -6786,7 +6786,14 @@
+--- a/src/boehm-gc/configure
++++ b/src/boehm-gc/configure
+@@ -6786,7 +6786,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
@@ -41,10 +37,26 @@ Index: gcc-47/src/boehm-gc/configure
;;
ppc64-*linux*|powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
-Index: gcc-47/src/boehm-gc/include/private/gcconfig.h
-===================================================================
---- gcc-47.orig/src/boehm-gc/include/private/gcconfig.h 2013-05-20 00:16:08.398082099 +0400
-+++ gcc-47/src/boehm-gc/include/private/gcconfig.h 2013-05-20 00:19:40.986563747 +0400
+@@ -11304,7 +11311,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11307 "configure"
++#line 11314 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11410,7 +11417,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11413 "configure"
++#line 11420 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+--- a/src/boehm-gc/include/private/gcconfig.h
++++ b/src/boehm-gc/include/private/gcconfig.h
@@ -1974,8 +1974,13 @@
# ifdef X86_64
@@ -61,10 +73,8 @@ Index: gcc-47/src/boehm-gc/include/private/gcconfig.h
# ifndef HBLKSIZE
# define HBLKSIZE 4096
# endif
-Index: gcc-47/src/gcc/ChangeLog.pr53383
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/gcc/ChangeLog.pr53383 2013-05-20 00:19:40.988661407 +0400
+--- /dev/null
++++ b/src/gcc/ChangeLog.pr53383
@@ -0,0 +1,10 @@
+2012-05-25 H.J. Lu <hongjiu.lu@intel.com>
+
@@ -76,11 +86,18 @@ Index: gcc-47/src/gcc/ChangeLog.pr53383
+
+ * config/i386/i386.h (MIN_STACK_BOUNDARY): Set to 64 for 64-bit
+ if SSE is disenabled.
-Index: gcc-47/src/gcc/ChangeLog.x32
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/gcc/ChangeLog.x32 2013-05-20 00:19:40.990304321 +0400
-@@ -0,0 +1,343 @@
+--- /dev/null
++++ b/src/gcc/ChangeLog.x32
+@@ -0,0 +1,352 @@
++2014-01-24 H.J. Lu <hongjiu.lu@intel.com>
++
++ Backport from mainline
++ 2014-01-23 H.J. Lu <hongjiu.lu@intel.com>
++
++ PR target/59929
++ * config/i386/i386.md (pushsf splitter): Get stack adjustment
++ from push operand if code of push isn't PRE_DEC.
++
+2012-08-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR debug/52857
@@ -424,10 +441,8 @@ Index: gcc-47/src/gcc/ChangeLog.x32
+
+ * config/i386/i386.c (ix86_expand_prologue): Check Pmode to set
+ adjust_stack_insn.
-Index: gcc-47/src/gcc/ada/ChangeLog.x32
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/gcc/ada/ChangeLog.x32 2013-05-20 00:19:40.992276188 +0400
+--- /dev/null
++++ b/src/gcc/ada/ChangeLog.x32
@@ -0,0 +1,10 @@
+2012-03-03 H.J. Lu <hongjiu.lu@intel.com>
+
@@ -439,11 +454,9 @@ Index: gcc-47/src/gcc/ada/ChangeLog.x32
+ * gcc-interface/Makefile.in (arch): Set to x32 if MULTISUBDIR
+ is /x32.
+ Support x32.
-Index: gcc-47/src/gcc/ada/gcc-interface/Makefile.in
-===================================================================
---- gcc-47.orig/src/gcc/ada/gcc-interface/Makefile.in 2013-05-20 00:16:08.397812262 +0400
-+++ gcc-47/src/gcc/ada/gcc-interface/Makefile.in 2013-05-20 00:19:40.996473779 +0400
-@@ -350,6 +350,10 @@
+--- a/src/gcc/ada/gcc-interface/Makefile.in
++++ b/src/gcc/ada/gcc-interface/Makefile.in
+@@ -350,6 +350,10 @@ GNATMAKE_OBJS = a-except.o ali.o ali-util.o aspects.o s-casuti.o alloc.o \
ifeq ($(strip $(filter-out %x86_64, $(arch))),)
ifeq ($(strip $(MULTISUBDIR)),/32)
arch:=i686
@@ -454,21 +467,10 @@ Index: gcc-47/src/gcc/ada/gcc-interface/Makefile.in
endif
endif
-@@ -2120,6 +2124,43 @@
+@@ -2131,6 +2135,43 @@ ifeq ($(strip $(filter-out %x86_64 linux%,$(arch) $(osys))),)
+ LIBRARY_VERSION := $(LIB_VERSION)
+ endif
- TOOLS_TARGET_PAIRS = \
- mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
-+ indepsw.adb<indepsw-gnu.adb
-+
-+ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o
-+ EXTRA_GNATRTL_TASKING_OBJS=s-linux.o a-exetim.o
-+ EH_MECHANISM=-gcc
-+ THREADSLIB=-lpthread -lrt
-+ GNATLIB_SHARED=gnatlib-shared-dual
-+ GMEM_LIB = gmemlib
-+ LIBRARY_VERSION := $(LIB_VERSION)
-+endif
-+
+ifeq ($(strip $(filter-out %x32 linux%,$(arch) $(osys))),)
+ LIBGNAT_TARGET_PAIRS = \
+ a-exetim.adb<a-exetim-posix.adb \
@@ -495,14 +497,23 @@ Index: gcc-47/src/gcc/ada/gcc-interface/Makefile.in
+
+ TOOLS_TARGET_PAIRS = \
+ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
- indepsw.adb<indepsw-gnu.adb
-
- EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o
-Index: gcc-47/src/gcc/ada/init.c
-===================================================================
---- gcc-47.orig/src/gcc/ada/init.c 2013-05-20 00:16:08.397845688 +0400
-+++ gcc-47/src/gcc/ada/init.c 2013-05-20 00:19:40.999623395 +0400
-@@ -615,9 +615,13 @@
++ indepsw.adb<indepsw-gnu.adb
++
++ EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o
++ EXTRA_GNATRTL_TASKING_OBJS=s-linux.o a-exetim.o
++ EH_MECHANISM=-gcc
++ THREADSLIB=-lpthread -lrt
++ GNATLIB_SHARED=gnatlib-shared-dual
++ GMEM_LIB = gmemlib
++ LIBRARY_VERSION := $(LIB_VERSION)
++endif
++
+ ifeq ($(strip $(filter-out darwin%,$(osys))),)
+ SO_OPTS = -shared-libgcc
+ LIBGNAT_TARGET_PAIRS = \
+--- a/src/gcc/ada/init.c
++++ b/src/gcc/ada/init.c
+@@ -615,9 +615,13 @@ __gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED, void *ucontext)
if (signo == SIGSEGV && pc && *pc == 0x00240c83)
mcontext->gregs[REG_ESP] += 4096 + 4 * sizeof (unsigned long);
#elif defined (__x86_64__)
@@ -519,11 +530,9 @@ Index: gcc-47/src/gcc/ada/init.c
mcontext->gregs[REG_RSP] += 4096 + 4 * sizeof (unsigned long);
#elif defined (__ia64__)
/* ??? The IA-64 unwinder doesn't compensate for signals. */
-Index: gcc-47/src/gcc/ada/link.c
-===================================================================
---- gcc-47.orig/src/gcc/ada/link.c 2013-05-20 00:16:08.397878867 +0400
-+++ gcc-47/src/gcc/ada/link.c 2013-05-20 00:19:41.003793933 +0400
-@@ -165,7 +165,11 @@
+--- a/src/gcc/ada/link.c
++++ b/src/gcc/ada/link.c
+@@ -165,7 +165,11 @@ unsigned char __gnat_objlist_file_supported = 1;
const char *__gnat_object_library_extension = ".a";
unsigned char __gnat_separate_run_path_options = 0;
#if defined (__x86_64)
@@ -535,11 +544,9 @@ Index: gcc-47/src/gcc/ada/link.c
#else
const char *__gnat_default_libgcc_subdir = "lib";
#endif
-Index: gcc-47/src/gcc/config.gcc
-===================================================================
---- gcc-47.orig/src/gcc/config.gcc 2013-05-20 00:16:08.396982643 +0400
-+++ gcc-47/src/gcc/config.gcc 2013-05-20 00:19:41.007918554 +0400
-@@ -494,6 +494,10 @@
+--- a/src/gcc/config.gcc
++++ b/src/gcc/config.gcc
+@@ -494,6 +494,10 @@ fi
case ${target} in
i[34567]86-*-*)
@@ -550,7 +557,7 @@ Index: gcc-47/src/gcc/config.gcc
if test "x$enable_cld" = xyes; then
tm_defines="${tm_defines} USE_IX86_CLD=1"
fi
-@@ -503,7 +507,24 @@
+@@ -503,7 +507,24 @@ i[34567]86-*-*)
tm_file="vxworks-dummy.h ${tm_file}"
;;
x86_64-*-*)
@@ -576,7 +583,7 @@ Index: gcc-47/src/gcc/config.gcc
if test "x$enable_cld" = xyes; then
tm_defines="${tm_defines} USE_IX86_CLD=1"
fi
-@@ -1326,7 +1347,14 @@
+@@ -1325,7 +1346,14 @@ x86_64-*-linux* | x86_64-*-kfreebsd*-gnu | x86_64-*-knetbsd*-gnu)
tmake_file="${tmake_file} i386/t-linux64"
x86_multilibs="${with_multilib_list}"
if test "$x86_multilibs" = "default"; then
@@ -592,7 +599,7 @@ Index: gcc-47/src/gcc/config.gcc
fi
x86_multilibs=`echo $x86_multilibs | sed -e 's/,/ /g'`
for x86_multilib in ${x86_multilibs}; do
-@@ -3245,7 +3273,7 @@
+@@ -3244,7 +3272,7 @@ case "${target}" in
;;
i[34567]86-*-* | x86_64-*-*)
@@ -601,11 +608,9 @@ Index: gcc-47/src/gcc/config.gcc
for which in arch arch_32 arch_64 cpu cpu_32 cpu_64 tune tune_32 tune_64; do
eval "val=\$with_$which"
case ${val} in
-Index: gcc-47/src/gcc/config/arm/arm.opt
-===================================================================
---- gcc-47.orig/src/gcc/config/arm/arm.opt 2013-05-20 00:16:08.397255379 +0400
-+++ gcc-47/src/gcc/config/arm/arm.opt 2013-05-20 00:19:41.011297091 +0400
-@@ -59,7 +59,7 @@
+--- a/src/gcc/config/arm/arm.opt
++++ b/src/gcc/config/arm/arm.opt
+@@ -59,7 +59,7 @@ Target Report Mask(ABORT_NORETURN)
Generate a call to abort if a noreturn function returns
mapcs
@@ -614,11 +619,9 @@ Index: gcc-47/src/gcc/config/arm/arm.opt
mapcs-float
Target Report Mask(APCS_FLOAT)
-Index: gcc-47/src/gcc/config/cris/linux.opt
-===================================================================
---- gcc-47.orig/src/gcc/config/cris/linux.opt 2013-05-20 00:16:08.397677877 +0400
-+++ gcc-47/src/gcc/config/cris/linux.opt 2013-05-20 00:19:41.013097392 +0400
-@@ -23,7 +23,7 @@
+--- a/src/gcc/config/cris/linux.opt
++++ b/src/gcc/config/cris/linux.opt
+@@ -23,7 +23,7 @@ mlinux
Target Report RejectNegative Undocumented
mno-gotplt
@@ -627,10 +630,8 @@ Index: gcc-47/src/gcc/config/cris/linux.opt
Together with -fpic and -fPIC, do not use GOTPLT references
; There's a small added setup cost with using GOTPLT references
-Index: gcc-47/src/gcc/config/host-linux.c
-===================================================================
---- gcc-47.orig/src/gcc/config/host-linux.c 2013-05-20 00:16:08.397056369 +0400
-+++ gcc-47/src/gcc/config/host-linux.c 2013-05-20 00:19:41.014659568 +0400
+--- a/src/gcc/config/host-linux.c
++++ b/src/gcc/config/host-linux.c
@@ -68,8 +68,10 @@
# define TRY_EMPTY_VM_SPACE 0x10000000000
#elif defined(__ia64)
@@ -643,21 +644,17 @@ Index: gcc-47/src/gcc/config/host-linux.c
#elif defined(__i386)
# define TRY_EMPTY_VM_SPACE 0x60000000
#elif defined(__powerpc__)
-Index: gcc-47/src/gcc/config/i386/biarch64.h
-===================================================================
---- gcc-47.orig/src/gcc/config/i386/biarch64.h 2013-05-20 00:16:08.397559963 +0400
-+++ gcc-47/src/gcc/config/i386/biarch64.h 2013-05-20 00:19:41.016368291 +0400
-@@ -25,5 +25,5 @@
+--- a/src/gcc/config/i386/biarch64.h
++++ b/src/gcc/config/i386/biarch64.h
+@@ -25,5 +25,5 @@ a copy of the GCC Runtime Library Exception along with this program;
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
<http://www.gnu.org/licenses/>. */
-#define TARGET_64BIT_DEFAULT OPTION_MASK_ISA_64BIT
+#define TARGET_64BIT_DEFAULT (OPTION_MASK_ISA_64BIT | OPTION_MASK_ABI_64)
#define TARGET_BI_ARCH 1
-Index: gcc-47/src/gcc/config/i386/biarchx32.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/gcc/config/i386/biarchx32.h 2013-05-20 00:19:41.017392200 +0400
+--- /dev/null
++++ b/src/gcc/config/i386/biarchx32.h
@@ -0,0 +1,28 @@
+/* Make configure files to produce biarch compiler defaulting to x32 mode.
+ This file must be included very first, while the OS specific file later
@@ -687,10 +684,8 @@ Index: gcc-47/src/gcc/config/i386/biarchx32.h
+
+#define TARGET_64BIT_DEFAULT (OPTION_MASK_ISA_64BIT | OPTION_MASK_ABI_X32)
+#define TARGET_BI_ARCH 2
-Index: gcc-47/src/gcc/config/i386/constraints.md
-===================================================================
---- gcc-47.orig/src/gcc/config/i386/constraints.md 2013-05-20 00:16:08.397372306 +0400
-+++ gcc-47/src/gcc/config/i386/constraints.md 2013-05-20 00:19:41.018864773 +0400
+--- a/src/gcc/config/i386/constraints.md
++++ b/src/gcc/config/i386/constraints.md
@@ -18,7 +18,7 @@
;; <http://www.gnu.org/licenses/>.
@@ -717,11 +712,9 @@ Index: gcc-47/src/gcc/config/i386/constraints.md
(define_constraint "Z"
"32-bit unsigned integer constant, or a symbolic reference known
to fit that range (for immediate operands in zero-extending x86-64
-Index: gcc-47/src/gcc/config/i386/gnu-user64.h
-===================================================================
---- gcc-47.orig/src/gcc/config/i386/gnu-user64.h 2013-05-20 00:16:08.397474689 +0400
-+++ gcc-47/src/gcc/config/i386/gnu-user64.h 2013-05-20 00:19:41.020573377 +0400
-@@ -58,8 +58,13 @@
+--- a/src/gcc/config/i386/gnu-user64.h
++++ b/src/gcc/config/i386/gnu-user64.h
+@@ -58,8 +58,13 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#if TARGET_64BIT_DEFAULT
#define SPEC_32 "m32"
@@ -735,7 +728,7 @@ Index: gcc-47/src/gcc/config/i386/gnu-user64.h
#else
#define SPEC_32 "m64|mx32:;"
#define SPEC_64 "m64"
-@@ -95,7 +100,11 @@
+@@ -95,7 +100,11 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
%{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s"
#if TARGET_64BIT_DEFAULT
@@ -747,18 +740,16 @@ Index: gcc-47/src/gcc/config/i386/gnu-user64.h
#else
#define MULTILIB_DEFAULTS { "m32" }
#endif
-@@ -130,3 +139,6 @@
+@@ -130,3 +139,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#define TARGET_THREAD_SPLIT_STACK_OFFSET \
(TARGET_64BIT ? (TARGET_X32 ? 0x40 : 0x70) : 0x30)
#endif
+
+#undef WCHAR_TYPE
+#define WCHAR_TYPE (TARGET_LP64 ? "int" : "long int")
-Index: gcc-47/src/gcc/config/i386/i386-opts.h
-===================================================================
---- gcc-47.orig/src/gcc/config/i386/i386-opts.h 2013-05-20 00:16:08.397400406 +0400
-+++ gcc-47/src/gcc/config/i386/i386-opts.h 2013-05-20 00:19:41.021746374 +0400
-@@ -71,6 +71,11 @@
+--- a/src/gcc/config/i386/i386-opts.h
++++ b/src/gcc/config/i386/i386-opts.h
+@@ -71,6 +71,11 @@ enum cmodel {
CM_LARGE_PIC /* No assumptions. */
};
@@ -770,11 +761,9 @@ Index: gcc-47/src/gcc/config/i386/i386-opts.h
enum asm_dialect {
ASM_ATT,
ASM_INTEL
-Index: gcc-47/src/gcc/config/i386/i386.c
-===================================================================
---- gcc-47.orig/src/gcc/config/i386/i386.c 2013-05-20 00:16:08.397584345 +0400
-+++ gcc-47/src/gcc/config/i386/i386.c 2013-05-20 00:19:41.060328385 +0400
-@@ -2448,6 +2448,8 @@
+--- a/src/gcc/config/i386/i386.c
++++ b/src/gcc/config/i386/i386.c
+@@ -2448,6 +2448,8 @@ static rtx (*ix86_gen_andsp) (rtx, rtx, rtx);
static rtx (*ix86_gen_allocate_stack_worker) (rtx, rtx);
static rtx (*ix86_gen_adjust_stack_and_probe) (rtx, rtx, rtx);
static rtx (*ix86_gen_probe_stack_range) (rtx, rtx, rtx);
@@ -783,7 +772,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
/* Preferred alignment for stack boundary in bits. */
unsigned int ix86_preferred_stack_boundary;
-@@ -2658,7 +2660,6 @@
+@@ -2658,7 +2660,6 @@ ix86_target_string (HOST_WIDE_INT isa, int flags, const char *arch,
preceding options while match those first. */
static struct ix86_target_opts isa_opts[] =
{
@@ -791,7 +780,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
{ "-mfma4", OPTION_MASK_ISA_FMA4 },
{ "-mfma", OPTION_MASK_ISA_FMA },
{ "-mxop", OPTION_MASK_ISA_XOP },
-@@ -2730,6 +2731,7 @@
+@@ -2730,6 +2731,7 @@ ix86_target_string (HOST_WIDE_INT isa, int flags, const char *arch,
size_t len;
size_t line_len;
size_t sep_len;
@@ -799,7 +788,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
memset (opts, '\0', sizeof (opts));
-@@ -2747,6 +2749,21 @@
+@@ -2747,6 +2749,21 @@ ix86_target_string (HOST_WIDE_INT isa, int flags, const char *arch,
opts[num++][1] = tune;
}
@@ -821,7 +810,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
/* Pick out the options in isa options. */
for (i = 0; i < ARRAY_SIZE (isa_opts); i++)
{
-@@ -3095,6 +3112,46 @@
+@@ -3095,6 +3112,46 @@ ix86_option_override_internal (bool main_args_p)
sw = "attribute";
}
@@ -868,7 +857,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
#ifdef SUBTARGET_OVERRIDE_OPTIONS
SUBTARGET_OVERRIDE_OPTIONS;
#endif
-@@ -3103,9 +3160,6 @@
+@@ -3103,9 +3160,6 @@ ix86_option_override_internal (bool main_args_p)
SUBSUBTARGET_OVERRIDE_OPTIONS;
#endif
@@ -878,7 +867,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
/* -fPIC is the default for x86_64. */
if (TARGET_MACHO && TARGET_64BIT)
flag_pic = 2;
-@@ -3174,6 +3228,17 @@
+@@ -3174,6 +3228,17 @@ ix86_option_override_internal (bool main_args_p)
else
ix86_arch_specified = 1;
@@ -896,7 +885,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
if (!global_options_set.x_ix86_abi)
ix86_abi = DEFAULT_ABI;
-@@ -3587,7 +3652,7 @@
+@@ -3587,7 +3652,7 @@ ix86_option_override_internal (bool main_args_p)
ix86_preferred_stack_boundary = PREFERRED_STACK_BOUNDARY_DEFAULT;
if (global_options_set.x_ix86_preferred_stack_boundary_arg)
{
@@ -905,7 +894,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
int max = (TARGET_SEH ? 4 : 12);
if (ix86_preferred_stack_boundary_arg < min
-@@ -3750,11 +3815,33 @@
+@@ -3750,11 +3815,33 @@ ix86_option_override_internal (bool main_args_p)
if (TARGET_64BIT)
{
ix86_gen_leave = gen_leave_rex64;
@@ -940,7 +929,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
ix86_gen_andsp = gen_anddi3;
ix86_gen_allocate_stack_worker = gen_allocate_stack_worker_probe_di;
ix86_gen_adjust_stack_and_probe = gen_adjust_stack_and_probedi;
-@@ -3762,12 +3849,10 @@
+@@ -3762,12 +3849,10 @@ ix86_option_override_internal (bool main_args_p)
}
else
{
@@ -953,7 +942,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
ix86_gen_andsp = gen_andsi3;
ix86_gen_allocate_stack_worker = gen_allocate_stack_worker_probe_si;
ix86_gen_adjust_stack_and_probe = gen_adjust_stack_and_probesi;
-@@ -7239,8 +7324,8 @@
+@@ -7250,8 +7335,8 @@ function_value_64 (enum machine_mode orig_mode, enum machine_mode mode,
}
else if (POINTER_TYPE_P (valtype))
{
@@ -964,7 +953,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
}
ret = construct_container (mode, orig_mode, valtype, 1,
-@@ -7311,7 +7396,8 @@
+@@ -7322,7 +7407,8 @@ ix86_function_value (const_tree valtype, const_tree fntype_or_decl,
return ix86_function_value_1 (valtype, fntype_or_decl, orig_mode, mode);
}
@@ -974,7 +963,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
static enum machine_mode
ix86_promote_function_mode (const_tree type, enum machine_mode mode,
-@@ -7321,7 +7407,7 @@
+@@ -7332,7 +7418,7 @@ ix86_promote_function_mode (const_tree type, enum machine_mode mode,
if (type != NULL_TREE && POINTER_TYPE_P (type))
{
*punsignedp = POINTERS_EXTEND_UNSIGNED;
@@ -983,7 +972,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
}
return default_promote_function_mode (type, mode, punsignedp, fntype,
for_return);
-@@ -7599,12 +7685,13 @@
+@@ -7610,12 +7696,13 @@ setup_incoming_varargs_64 (CUMULATIVE_ARGS *cum)
for (i = cum->regno; i < max; i++)
{
@@ -1000,7 +989,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
}
if (ix86_varargs_fpr_size)
-@@ -8664,8 +8751,11 @@
+@@ -8676,8 +8763,11 @@ gen_push (rtx arg)
m->fs.cfa_offset += UNITS_PER_WORD;
m->fs.sp_offset += UNITS_PER_WORD;
@@ -1013,7 +1002,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
gen_rtx_PRE_DEC (Pmode,
stack_pointer_rtx)),
arg);
-@@ -8676,9 +8766,12 @@
+@@ -8688,9 +8778,12 @@ gen_push (rtx arg)
static rtx
gen_pop (rtx arg)
{
@@ -1027,7 +1016,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
gen_rtx_POST_INC (Pmode,
stack_pointer_rtx)));
}
-@@ -9153,7 +9246,7 @@
+@@ -9166,7 +9259,7 @@ ix86_emit_save_regs (void)
for (regno = FIRST_PSEUDO_REGISTER - 1; regno-- > 0; )
if (!SSE_REGNO_P (regno) && ix86_save_reg (regno, true))
{
@@ -1036,7 +1025,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
RTX_FRAME_RELATED_P (insn) = 1;
}
}
-@@ -9233,7 +9326,7 @@
+@@ -9246,7 +9339,7 @@ ix86_emit_save_regs_using_mov (HOST_WIDE_INT cfa_offset)
for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
if (!SSE_REGNO_P (regno) && ix86_save_reg (regno, true))
{
@@ -1045,7 +1034,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
cfa_offset -= UNITS_PER_WORD;
}
}
-@@ -9308,7 +9401,7 @@
+@@ -9321,7 +9414,7 @@ pro_epilogue_adjust_stack (rtx dest, rtx src, rtx offset,
rtx insn;
bool add_frame_related_expr = false;
@@ -1054,7 +1043,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
insn = gen_pro_epilogue_adjust_stack_si_add (dest, src, offset);
else if (x86_64_immediate_operand (offset, DImode))
insn = gen_pro_epilogue_adjust_stack_di_add (dest, src, offset);
-@@ -10180,7 +10273,7 @@
+@@ -10193,7 +10286,7 @@ ix86_expand_prologue (void)
to implement macro RETURN_ADDR_RTX and intrinsic function
expand_builtin_return_addr etc. */
t = plus_constant (crtl->drap_reg, -UNITS_PER_WORD);
@@ -1063,7 +1052,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
insn = emit_insn (gen_push (t));
RTX_FRAME_RELATED_P (insn) = 1;
-@@ -10400,7 +10493,7 @@
+@@ -10413,7 +10506,7 @@ ix86_expand_prologue (void)
emit_insn (ix86_gen_allocate_stack_worker (eax, eax));
/* Use the fact that AX still contains ALLOCATE. */
@@ -1072,21 +1061,21 @@ Index: gcc-47/src/gcc/config/i386/i386.c
? gen_pro_epilogue_adjust_stack_di_sub
: gen_pro_epilogue_adjust_stack_si_sub);
-@@ -10422,14 +10515,18 @@
+@@ -10435,14 +10528,18 @@ ix86_expand_prologue (void)
if (r10_live && eax_live)
{
- t = choose_baseaddr (m->fs.sp_offset - allocate);
+ t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax);
- emit_move_insn (r10, gen_frame_mem (Pmode, t));
+ emit_move_insn (gen_rtx_REG (word_mode, R10_REG),
+ gen_frame_mem (word_mode, t));
- t = choose_baseaddr (m->fs.sp_offset - allocate - UNITS_PER_WORD);
+ t = plus_constant (t, UNITS_PER_WORD);
- emit_move_insn (eax, gen_frame_mem (Pmode, t));
+ emit_move_insn (gen_rtx_REG (word_mode, AX_REG),
+ gen_frame_mem (word_mode, t));
}
else if (eax_live || r10_live)
{
- t = choose_baseaddr (m->fs.sp_offset - allocate);
+ t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax);
- emit_move_insn ((eax_live ? eax : r10), gen_frame_mem (Pmode, t));
+ emit_move_insn (gen_rtx_REG (word_mode,
+ (eax_live ? AX_REG : R10_REG)),
@@ -1094,7 +1083,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
}
}
gcc_assert (m->fs.sp_offset == frame.stack_pointer_offset);
-@@ -10599,7 +10696,7 @@
+@@ -10612,7 +10709,7 @@ ix86_emit_restore_regs_using_pop (void)
for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
if (!SSE_REGNO_P (regno) && ix86_save_reg (regno, false))
@@ -1103,7 +1092,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
}
/* Emit code and notes for the LEAVE instruction. */
-@@ -10642,11 +10739,11 @@
+@@ -10655,11 +10752,11 @@ ix86_emit_restore_regs_using_mov (HOST_WIDE_INT cfa_offset,
for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
if (!SSE_REGNO_P (regno) && ix86_save_reg (regno, maybe_eh_return))
{
@@ -1117,7 +1106,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
insn = emit_move_insn (reg, mem);
if (m->fs.cfa_reg == crtl->drap_reg && regno == REGNO (crtl->drap_reg))
-@@ -11265,8 +11362,8 @@
+@@ -11278,8 +11375,8 @@ ix86_expand_split_stack_prologue (void)
{
rtx rax;
@@ -1128,7 +1117,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
use_reg (&call_fusage, rax);
}
-@@ -11345,8 +11442,8 @@
+@@ -11358,8 +11455,8 @@ ix86_expand_split_stack_prologue (void)
/* If we are in 64-bit mode and this function uses a static chain,
we saved %r10 in %rax before calling _morestack. */
if (TARGET_64BIT && DECL_STATIC_CHAIN (cfun->decl))
@@ -1139,7 +1128,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
/* If this function calls va_start, we need to store a pointer to
the arguments on the old stack, because they may not have been
-@@ -11560,6 +11657,12 @@
+@@ -11549,6 +11646,12 @@ ix86_decompose_address (rtx addr, struct ix86_address *out)
scale = 1 << scale;
break;
@@ -1152,7 +1141,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
case UNSPEC:
if (XINT (op, 1) == UNSPEC_TP
&& TARGET_TLS_DIRECT_SEG_REFS
-@@ -11642,6 +11745,12 @@
+@@ -11618,6 +11721,12 @@ ix86_decompose_address (rtx addr, struct ix86_address *out)
return 0;
}
@@ -1165,7 +1154,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
/* Extract the integral value of scale. */
if (scale_rtx)
{
-@@ -12599,15 +12708,20 @@
+@@ -12612,15 +12721,20 @@ legitimize_pic_address (rtx orig, rtx reg)
/* Load the thread pointer. If TO_REG is true, force it into a register. */
static rtx
@@ -1190,7 +1179,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
return tp;
}
-@@ -12659,6 +12773,7 @@
+@@ -12672,6 +12786,7 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov)
{
rtx dest, base, off;
rtx pic = NULL_RTX, tp = NULL_RTX;
@@ -1198,7 +1187,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
int type;
switch (model)
-@@ -12684,7 +12799,7 @@
+@@ -12697,7 +12812,7 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov)
else
emit_insn (gen_tls_dynamic_gnu2_32 (dest, x, pic));
@@ -1207,7 +1196,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
dest = force_reg (Pmode, gen_rtx_PLUS (Pmode, tp, dest));
if (GET_MODE (x) != Pmode)
-@@ -12702,7 +12817,8 @@
+@@ -12715,7 +12830,8 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov)
rtx insns;
start_sequence ();
@@ -1217,7 +1206,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
insns = get_insns ();
end_sequence ();
-@@ -12740,7 +12856,7 @@
+@@ -12753,7 +12869,7 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov)
else
emit_insn (gen_tls_dynamic_gnu2_32 (base, tmp, pic));
@@ -1226,7 +1215,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
set_unique_reg_note (get_last_insn (), REG_EQUAL,
gen_rtx_MINUS (Pmode, tmp, tp));
}
-@@ -12754,7 +12870,8 @@
+@@ -12767,7 +12883,8 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov)
rtx insns, eqv;
start_sequence ();
@@ -1236,7 +1225,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
insns = get_insns ();
end_sequence ();
-@@ -12800,6 +12917,9 @@
+@@ -12813,6 +12930,9 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov)
return dest;
}
@@ -1246,7 +1235,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
pic = NULL;
type = UNSPEC_GOTNTPOFF;
}
-@@ -12822,22 +12942,23 @@
+@@ -12835,22 +12955,23 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov)
type = UNSPEC_INDNTPOFF;
}
@@ -1278,7 +1267,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
dest = gen_reg_rtx (Pmode);
emit_insn (gen_subsi3 (dest, base, off));
}
-@@ -12851,12 +12972,13 @@
+@@ -12864,12 +12985,13 @@ legitimize_tls_address (rtx x, enum tls_model model, bool for_mov)
if (TARGET_64BIT || TARGET_ANY_GNU_TLS)
{
@@ -1294,7 +1283,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
dest = gen_reg_rtx (Pmode);
emit_insn (gen_subsi3 (dest, base, off));
}
-@@ -13937,6 +14059,7 @@
+@@ -13952,6 +14074,7 @@ get_some_local_dynamic_name (void)
; -- print a semicolon (after prefixes due to bug in older gas).
~ -- print "i" if TARGET_AVX2, "f" otherwise.
@ -- print a segment register of thread base pointer load
@@ -1302,7 +1291,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
*/
void
-@@ -14447,6 +14570,11 @@
+@@ -14462,6 +14585,11 @@ ix86_print_operand (FILE *file, rtx x, int code)
putc (TARGET_AVX2 ? 'i' : 'f', file);
return;
@@ -1314,7 +1303,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
default:
output_operand_lossage ("invalid operand code '%c'", code);
}
-@@ -14587,8 +14715,8 @@
+@@ -14602,8 +14730,8 @@ ix86_print_operand (FILE *file, rtx x, int code)
static bool
ix86_print_operand_punct_valid_p (unsigned char code)
{
@@ -1325,7 +1314,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
}
/* Print a memory operand whose address is ADDR. */
-@@ -20552,7 +20680,7 @@
+@@ -20569,7 +20697,7 @@ ix86_split_to_parts (rtx operand, rtx *parts, enum machine_mode mode)
gcc_assert (ok);
operand = copy_rtx (operand);
@@ -1334,7 +1323,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
parts[0] = parts[1] = parts[2] = parts[3] = operand;
return size;
}
-@@ -20705,7 +20833,7 @@
+@@ -20722,7 +20850,7 @@ ix86_split_long_move (rtx operands[])
if (push_operand (operands[0], VOIDmode))
{
operands[0] = copy_rtx (operands[0]);
@@ -1343,7 +1332,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
}
else
operands[0] = gen_lowpart (DImode, operands[0]);
-@@ -21260,14 +21388,9 @@
+@@ -21277,14 +21405,9 @@ ix86_adjust_counter (rtx countreg, HOST_WIDE_INT value)
rtx
ix86_zero_extend_to_Pmode (rtx exp)
{
@@ -1361,7 +1350,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
}
/* Divide COUNTREG by SCALE. */
-@@ -22295,11 +22418,11 @@
+@@ -22312,11 +22435,11 @@ ix86_expand_movmem (rtx dst, rtx src, rtx count_exp, rtx align_exp,
gcc_unreachable ();
case loop:
need_zero_guard = true;
@@ -1375,7 +1364,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
break;
case rep_prefix_8_byte:
size_needed = 8;
-@@ -22465,13 +22588,13 @@
+@@ -22482,13 +22605,13 @@ ix86_expand_movmem (rtx dst, rtx src, rtx count_exp, rtx align_exp,
break;
case loop:
expand_set_or_movmem_via_loop (dst, src, destreg, srcreg, NULL,
@@ -1391,7 +1380,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
expected_size);
break;
case rep_prefix_8_byte:
-@@ -22683,11 +22806,11 @@
+@@ -22700,11 +22823,11 @@ ix86_expand_setmem (rtx dst, rtx count_exp, rtx val_exp, rtx align_exp,
gcc_unreachable ();
case loop:
need_zero_guard = true;
@@ -1405,7 +1394,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
break;
case rep_prefix_8_byte:
size_needed = 8;
-@@ -22858,11 +22981,11 @@
+@@ -22875,11 +22998,11 @@ ix86_expand_setmem (rtx dst, rtx count_exp, rtx val_exp, rtx align_exp,
break;
case loop:
expand_set_or_movmem_via_loop (dst, NULL, destreg, NULL, promoted_val,
@@ -1419,7 +1408,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
break;
case rep_prefix_8_byte:
expand_setmem_via_rep_stos (dst, destreg, promoted_val, count_exp,
-@@ -23225,13 +23348,13 @@
+@@ -23242,13 +23365,13 @@ ix86_expand_call (rtx retval, rtx fnaddr, rtx callarg1,
&& !local_symbolic_operand (XEXP (fnaddr, 0), VOIDmode))
fnaddr = gen_rtx_MEM (QImode, construct_plt_address (XEXP (fnaddr, 0)));
else if (sibcall
@@ -1438,7 +1427,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
}
vec_len = 0;
-@@ -24547,10 +24670,13 @@
+@@ -24565,10 +24688,13 @@ ix86_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
/* Load the function address to r11. Try to load address using
the shorter movl instead of movabs. We may want to support
movq for kernel mode, but kernel does not use trampolines at
@@ -1455,7 +1444,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
mem = adjust_address (m_tramp, HImode, offset);
emit_move_insn (mem, gen_int_mode (0xbb41, HImode));
-@@ -24569,9 +24695,9 @@
+@@ -24587,9 +24713,9 @@ ix86_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
offset += 10;
}
@@ -1468,7 +1457,7 @@ Index: gcc-47/src/gcc/config/i386/i386.c
{
opcode = 0xba41;
size = 6;
-@@ -32215,7 +32341,7 @@
+@@ -32235,7 +32361,7 @@ x86_this_parameter (tree function)
parm_regs = x86_64_ms_abi_int_parameter_registers;
else
parm_regs = x86_64_int_parameter_registers;
@@ -1477,11 +1466,9 @@ Index: gcc-47/src/gcc/config/i386/i386.c
}
nregs = ix86_function_regparm (type, function);
-Index: gcc-47/src/gcc/config/i386/i386.h
-===================================================================
---- gcc-47.orig/src/gcc/config/i386/i386.h 2013-05-20 00:16:08.397456390 +0400
-+++ gcc-47/src/gcc/config/i386/i386.h 2013-05-20 00:19:41.065129618 +0400
-@@ -42,7 +42,6 @@
+--- a/src/gcc/config/i386/i386.h
++++ b/src/gcc/config/i386/i386.h
+@@ -42,7 +42,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
/* Redefines for option macros. */
#define TARGET_64BIT OPTION_ISA_64BIT
@@ -1489,7 +1476,7 @@ Index: gcc-47/src/gcc/config/i386/i386.h
#define TARGET_MMX OPTION_ISA_MMX
#define TARGET_3DNOW OPTION_ISA_3DNOW
#define TARGET_3DNOW_A OPTION_ISA_3DNOW_A
-@@ -76,7 +75,8 @@
+@@ -76,7 +75,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#define TARGET_RDRND OPTION_ISA_RDRND
#define TARGET_F16C OPTION_ISA_F16C
@@ -1499,7 +1486,7 @@ Index: gcc-47/src/gcc/config/i386/i386.h
/* SSE4.1 defines round instructions */
#define OPTION_MASK_ISA_ROUND OPTION_MASK_ISA_SSE4_1
-@@ -705,7 +705,7 @@
+@@ -705,7 +705,7 @@ enum target_cpu_default
#define MAIN_STACK_BOUNDARY (TARGET_64BIT ? 128 : 32)
/* Minimum stack boundary. */
@@ -1508,7 +1495,7 @@ Index: gcc-47/src/gcc/config/i386/i386.h
/* Boundary (in *bits*) on which the stack pointer prefers to be
aligned; the compiler cannot rely on having this alignment. */
-@@ -1780,7 +1780,7 @@
+@@ -1780,7 +1780,7 @@ do { \
/* Specify the machine mode that pointers have.
After generation of rtl, the compiler makes no further distinction
between pointers and any other objects of this machine mode. */
@@ -1517,10 +1504,8 @@ Index: gcc-47/src/gcc/config/i386/i386.h
/* A C expression whose value is zero if pointers that need to be extended
from being `POINTER_SIZE' bits wide to `Pmode' are sign-extended and
-Index: gcc-47/src/gcc/config/i386/i386.md
-===================================================================
---- gcc-47.orig/src/gcc/config/i386/i386.md 2013-05-20 00:16:08.397500480 +0400
-+++ gcc-47/src/gcc/config/i386/i386.md 2013-05-20 00:21:18.852109020 +0400
+--- a/src/gcc/config/i386/i386.md
++++ b/src/gcc/config/i386/i386.md
@@ -61,7 +61,9 @@
;; Y -- print condition for XOP pcom* instruction.
;; + -- print a branch hint as 'cs' or 'ds' prefix
@@ -1531,7 +1516,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
(define_c_enum "unspec" [
;; Relocation specifiers
-@@ -896,6 +898,11 @@
+@@ -899,6 +901,11 @@
;; pointer-sized quantities. Exactly one of the two alternatives will match.
(define_mode_iterator P [(SI "Pmode == SImode") (DI "Pmode == DImode")])
@@ -1543,7 +1528,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
;; This mode iterator allows :PTR to be used for patterns that operate on
;; ptr_mode sized quantities.
(define_mode_iterator PTR
-@@ -1704,8 +1711,8 @@
+@@ -1707,8 +1714,8 @@
(set_attr "mode" "SI")])
(define_insn "*push<mode>2_prologue"
@@ -1554,7 +1539,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
(clobber (mem:BLK (scratch)))]
""
"push{<imodesuffix>}\t%1"
-@@ -1713,16 +1720,16 @@
+@@ -1716,16 +1723,16 @@
(set_attr "mode" "<MODE>")])
(define_insn "*pop<mode>1"
@@ -1575,7 +1560,41 @@ Index: gcc-47/src/gcc/config/i386/i386.md
(clobber (mem:BLK (scratch)))]
""
"pop{<imodesuffix>}\t%0"
-@@ -11130,10 +11137,15 @@
+@@ -2729,7 +2736,20 @@
+ "reload_completed"
+ [(set (reg:P SP_REG) (plus:P (reg:P SP_REG) (match_dup 2)))
+ (set (mem:SF (reg:P SP_REG)) (match_dup 1))]
+- "operands[2] = GEN_INT (-GET_MODE_SIZE (<P:MODE>mode));")
++{
++ rtx op = XEXP (operands[0], 0);
++ if (GET_CODE (op) == PRE_DEC)
++ {
++ gcc_assert (!TARGET_64BIT);
++ op = GEN_INT (-4);
++ }
++ else
++ {
++ op = XEXP (XEXP (op, 1), 1);
++ gcc_assert (CONST_INT_P (op));
++ }
++ operands[2] = op;
++})
+
+ (define_split
+ [(set (match_operand:SF 0 "push_operand" "")
+@@ -3446,9 +3466,9 @@
+ })
+
+ (define_insn "*zero_extendsidi2_rex64"
+- [(set (match_operand:DI 0 "nonimmediate_operand" "=r,o,?*Ym,?!*y,?*Yi,*x")
++ [(set (match_operand:DI 0 "nonimmediate_operand" "=r ,o,?*Ym,?!*y,?*Yi,*x")
+ (zero_extend:DI
+- (match_operand:SI 1 "nonimmediate_operand" "rm,0,r ,m ,r ,m")))]
++ (match_operand:SI 1 "x86_64_zext_general_operand" "rmWz,0,r ,m ,r ,m")))]
+ "TARGET_64BIT"
+ "@
+ mov{l}\t{%1, %k0|%k0, %1}
+@@ -11119,10 +11139,15 @@
(set_attr "modrm" "0")])
(define_expand "indirect_jump"
@@ -1593,7 +1612,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
""
"jmp\t%A0"
[(set_attr "type" "ibr")
-@@ -11175,12 +11187,13 @@
+@@ -11164,12 +11189,13 @@
operands[0] = expand_simple_binop (Pmode, code, op0, op1, NULL_RTX, 0,
OPTAB_DIRECT);
}
@@ -1610,7 +1629,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
(use (label_ref (match_operand 1 "" "")))]
""
"jmp\t%A0"
-@@ -11268,7 +11281,7 @@
+@@ -11257,7 +11283,7 @@
})
(define_insn_and_split "*call_vzeroupper"
@@ -1619,7 +1638,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
(match_operand 1 "" ""))
(unspec [(match_operand 2 "const_int_operand" "")]
UNSPEC_CALL_NEEDS_VZEROUPPER)]
-@@ -11280,7 +11293,7 @@
+@@ -11269,7 +11295,7 @@
[(set_attr "type" "call")])
(define_insn "*call"
@@ -1628,7 +1647,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
(match_operand 1 "" ""))]
"!SIBLING_CALL_P (insn)"
"* return ix86_output_call_insn (insn, operands[0]);"
-@@ -11332,7 +11345,7 @@
+@@ -11321,7 +11347,7 @@
[(set_attr "type" "call")])
(define_insn_and_split "*sibcall_vzeroupper"
@@ -1637,7 +1656,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
(match_operand 1 "" ""))
(unspec [(match_operand 2 "const_int_operand" "")]
UNSPEC_CALL_NEEDS_VZEROUPPER)]
-@@ -11344,7 +11357,7 @@
+@@ -11333,7 +11359,7 @@
[(set_attr "type" "call")])
(define_insn "*sibcall"
@@ -1646,7 +1665,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
(match_operand 1 "" ""))]
"SIBLING_CALL_P (insn)"
"* return ix86_output_call_insn (insn, operands[0]);"
-@@ -11441,7 +11454,7 @@
+@@ -11430,7 +11456,7 @@
(define_insn_and_split "*call_value_vzeroupper"
[(set (match_operand 0 "" "")
@@ -1655,7 +1674,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
(match_operand 2 "" "")))
(unspec [(match_operand 3 "const_int_operand" "")]
UNSPEC_CALL_NEEDS_VZEROUPPER)]
-@@ -11454,7 +11467,7 @@
+@@ -11443,7 +11469,7 @@
(define_insn "*call_value"
[(set (match_operand 0 "" "")
@@ -1664,7 +1683,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
(match_operand 2 "" "")))]
"!SIBLING_CALL_P (insn)"
"* return ix86_output_call_insn (insn, operands[1]);"
-@@ -11462,7 +11475,7 @@
+@@ -11451,7 +11477,7 @@
(define_insn_and_split "*sibcall_value_vzeroupper"
[(set (match_operand 0 "" "")
@@ -1673,7 +1692,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
(match_operand 2 "" "")))
(unspec [(match_operand 3 "const_int_operand" "")]
UNSPEC_CALL_NEEDS_VZEROUPPER)]
-@@ -11475,7 +11488,7 @@
+@@ -11464,7 +11490,7 @@
(define_insn "*sibcall_value"
[(set (match_operand 0 "" "")
@@ -1682,7 +1701,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
(match_operand 2 "" "")))]
"SIBLING_CALL_P (insn)"
"* return ix86_output_call_insn (insn, operands[1]);"
-@@ -12580,7 +12593,7 @@
+@@ -12569,7 +12595,7 @@
[(set (match_operand:SI 0 "register_operand" "=a")
(unspec:SI
[(match_operand:SI 1 "register_operand" "b")
@@ -1691,7 +1710,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
(match_operand:SI 3 "constant_call_address_operand" "z")]
UNSPEC_TLS_GD))
(clobber (match_scratch:SI 4 "=d"))
-@@ -12605,20 +12618,20 @@
+@@ -12594,20 +12620,20 @@
[(parallel
[(set (match_operand:SI 0 "register_operand" "")
(unspec:SI [(match_operand:SI 2 "register_operand" "")
@@ -1720,7 +1739,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
"TARGET_64BIT"
{
if (!TARGET_X32)
-@@ -12635,14 +12648,15 @@
+@@ -12624,14 +12650,15 @@
(set (attr "length")
(symbol_ref "TARGET_X32 ? 15 : 16"))])
@@ -1742,7 +1761,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
(define_insn "*tls_local_dynamic_base_32_gnu"
[(set (match_operand:SI 0 "register_operand" "=a")
-@@ -12679,12 +12693,12 @@
+@@ -12668,12 +12695,12 @@
(clobber (match_scratch:SI 4 ""))
(clobber (reg:CC FLAGS_REG))])])
@@ -1761,7 +1780,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
"TARGET_64BIT"
{
output_asm_insn
-@@ -12696,13 +12710,14 @@
+@@ -12685,13 +12712,14 @@
[(set_attr "type" "multi")
(set_attr "length" "12")])
@@ -1781,7 +1800,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
;; Local dynamic of a single variable is a lose. Show combine how
;; to convert that back to global dynamic.
-@@ -12714,7 +12729,7 @@
+@@ -12703,7 +12731,7 @@
(match_operand:SI 2 "constant_call_address_operand" "z")]
UNSPEC_TLS_LD_BASE)
(const:SI (unspec:SI
@@ -1790,7 +1809,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
UNSPEC_DTPOFF))))
(clobber (match_scratch:SI 4 "=d"))
(clobber (match_scratch:SI 5 "=c"))
-@@ -12812,7 +12827,7 @@
+@@ -12801,7 +12829,7 @@
(define_insn "tls_initial_exec_64_sun"
[(set (match_operand:DI 0 "register_operand" "=a")
(unspec:DI
@@ -1799,7 +1818,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
UNSPEC_TLS_IE_SUN))
(clobber (reg:CC FLAGS_REG))]
"TARGET_64BIT && TARGET_SUN_TLS"
-@@ -12829,7 +12844,7 @@
+@@ -12818,7 +12846,7 @@
[(set (match_dup 3)
(plus:SI (match_operand:SI 2 "register_operand" "")
(const:SI
@@ -1808,7 +1827,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
UNSPEC_TLSDESC))))
(parallel
[(set (match_operand:SI 0 "register_operand" "")
-@@ -12847,7 +12862,7 @@
+@@ -12836,7 +12864,7 @@
[(set (match_operand:SI 0 "register_operand" "=r")
(plus:SI (match_operand:SI 1 "register_operand" "b")
(const:SI
@@ -1817,7 +1836,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
UNSPEC_TLSDESC))))]
"!TARGET_64BIT && TARGET_GNU2_TLS"
"lea{l}\t{%E2@TLSDESC(%1), %0|%0, %E2@TLSDESC[%1]}"
-@@ -12858,7 +12873,7 @@
+@@ -12847,7 +12875,7 @@
(define_insn "*tls_dynamic_gnu2_call_32"
[(set (match_operand:SI 0 "register_operand" "=a")
@@ -1826,7 +1845,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
(match_operand:SI 2 "register_operand" "0")
;; we have to make sure %ebx still points to the GOT
(match_operand:SI 3 "register_operand" "b")
-@@ -12874,13 +12889,13 @@
+@@ -12863,13 +12891,13 @@
(define_insn_and_split "*tls_dynamic_gnu2_combine_32"
[(set (match_operand:SI 0 "register_operand" "=&a")
(plus:SI
@@ -1842,7 +1861,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
UNSPEC_DTPOFF))))
(clobber (reg:CC FLAGS_REG))]
"!TARGET_64BIT && TARGET_GNU2_TLS"
-@@ -12934,7 +12949,7 @@
+@@ -12923,7 +12951,7 @@
(define_insn_and_split "*tls_dynamic_gnu2_combine_64"
[(set (match_operand:DI 0 "register_operand" "=&a")
(plus:DI
@@ -1851,7 +1870,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
(match_operand:DI 3 "" "")
(reg:DI SP_REG)]
UNSPEC_TLSDESC)
-@@ -15730,17 +15745,17 @@
+@@ -15719,17 +15747,17 @@
"ix86_current_function_needs_cld = 1;")
(define_insn "*strmovdi_rex_1"
@@ -1878,7 +1897,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
[(set_attr "type" "str")
(set_attr "memory" "both")
(set_attr "mode" "DI")])
-@@ -15755,7 +15770,7 @@
+@@ -15744,7 +15772,7 @@
(plus:P (match_dup 3)
(const_int 4)))]
"!(fixed_regs[SI_REG] || fixed_regs[DI_REG])"
@@ -1887,7 +1906,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
[(set_attr "type" "str")
(set_attr "memory" "both")
(set_attr "mode" "SI")])
-@@ -15770,7 +15785,7 @@
+@@ -15759,7 +15787,7 @@
(plus:P (match_dup 3)
(const_int 2)))]
"!(fixed_regs[SI_REG] || fixed_regs[DI_REG])"
@@ -1896,7 +1915,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
[(set_attr "type" "str")
(set_attr "memory" "both")
(set_attr "mode" "HI")])
-@@ -15785,7 +15800,7 @@
+@@ -15774,7 +15802,7 @@
(plus:P (match_dup 3)
(const_int 1)))]
"!(fixed_regs[SI_REG] || fixed_regs[DI_REG])"
@@ -1905,7 +1924,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
[(set_attr "type" "str")
(set_attr "memory" "both")
(set (attr "prefix_rex")
-@@ -15808,20 +15823,20 @@
+@@ -15797,20 +15825,20 @@
"ix86_current_function_needs_cld = 1;")
(define_insn "*rep_movdi_rex64"
@@ -1935,7 +1954,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
[(set_attr "type" "str")
(set_attr "prefix_rep" "1")
(set_attr "memory" "both")
-@@ -15840,7 +15855,7 @@
+@@ -15829,7 +15857,7 @@
(mem:BLK (match_dup 4)))
(use (match_dup 5))]
"!(fixed_regs[CX_REG] || fixed_regs[SI_REG] || fixed_regs[DI_REG])"
@@ -1944,7 +1963,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
[(set_attr "type" "str")
(set_attr "prefix_rep" "1")
(set_attr "memory" "both")
-@@ -15857,7 +15872,7 @@
+@@ -15846,7 +15874,7 @@
(mem:BLK (match_dup 4)))
(use (match_dup 5))]
"!(fixed_regs[CX_REG] || fixed_regs[SI_REG] || fixed_regs[DI_REG])"
@@ -1953,7 +1972,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
[(set_attr "type" "str")
(set_attr "prefix_rep" "1")
(set_attr "memory" "both")
-@@ -15919,15 +15934,15 @@
+@@ -15908,15 +15936,15 @@
"ix86_current_function_needs_cld = 1;")
(define_insn "*strsetdi_rex_1"
@@ -1962,9 +1981,10 @@ Index: gcc-47/src/gcc/config/i386/i386.md
(match_operand:DI 2 "register_operand" "a"))
- (set (match_operand:DI 0 "register_operand" "=D")
- (plus:DI (match_dup 1)
+- (const_int 8)))
+ (set (match_operand:P 0 "register_operand" "=D")
+ (plus:P (match_dup 1)
- (const_int 8)))
++ (const_int 8)))
(unspec [(const_int 0)] UNSPEC_STOS)]
"TARGET_64BIT
&& !(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
@@ -1973,7 +1993,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
[(set_attr "type" "str")
(set_attr "memory" "store")
(set_attr "mode" "DI")])
-@@ -15940,7 +15955,7 @@
+@@ -15929,7 +15957,7 @@
(const_int 4)))
(unspec [(const_int 0)] UNSPEC_STOS)]
"!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
@@ -1982,7 +2002,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
[(set_attr "type" "str")
(set_attr "memory" "store")
(set_attr "mode" "SI")])
-@@ -15953,7 +15968,7 @@
+@@ -15942,7 +15970,7 @@
(const_int 2)))
(unspec [(const_int 0)] UNSPEC_STOS)]
"!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
@@ -1991,7 +2011,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
[(set_attr "type" "str")
(set_attr "memory" "store")
(set_attr "mode" "HI")])
-@@ -15966,7 +15981,7 @@
+@@ -15955,7 +15983,7 @@
(const_int 1)))
(unspec [(const_int 0)] UNSPEC_STOS)]
"!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
@@ -2000,7 +2020,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
[(set_attr "type" "str")
(set_attr "memory" "store")
(set (attr "prefix_rex")
-@@ -15987,18 +16002,18 @@
+@@ -15976,18 +16004,18 @@
"ix86_current_function_needs_cld = 1;")
(define_insn "*rep_stosdi_rex64"
@@ -2025,7 +2045,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
[(set_attr "type" "str")
(set_attr "prefix_rep" "1")
(set_attr "memory" "store")
-@@ -16015,7 +16030,7 @@
+@@ -16004,7 +16032,7 @@
(use (match_operand:SI 2 "register_operand" "a"))
(use (match_dup 4))]
"!(fixed_regs[AX_REG] || fixed_regs[CX_REG] || fixed_regs[DI_REG])"
@@ -2034,7 +2054,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
[(set_attr "type" "str")
(set_attr "prefix_rep" "1")
(set_attr "memory" "store")
-@@ -16031,7 +16046,7 @@
+@@ -16020,7 +16048,7 @@
(use (match_operand:QI 2 "register_operand" "a"))
(use (match_dup 4))]
"!(fixed_regs[AX_REG] || fixed_regs[CX_REG] || fixed_regs[DI_REG])"
@@ -2043,7 +2063,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
[(set_attr "type" "str")
(set_attr "prefix_rep" "1")
(set_attr "memory" "store")
-@@ -16152,7 +16167,7 @@
+@@ -16141,7 +16169,7 @@
(clobber (match_operand:P 1 "register_operand" "=D"))
(clobber (match_operand:P 2 "register_operand" "=c"))]
"!(fixed_regs[CX_REG] || fixed_regs[SI_REG] || fixed_regs[DI_REG])"
@@ -2052,7 +2072,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
[(set_attr "type" "str")
(set_attr "mode" "QI")
(set (attr "prefix_rex")
-@@ -16192,7 +16207,7 @@
+@@ -16181,7 +16209,7 @@
(clobber (match_operand:P 1 "register_operand" "=D"))
(clobber (match_operand:P 2 "register_operand" "=c"))]
"!(fixed_regs[CX_REG] || fixed_regs[SI_REG] || fixed_regs[DI_REG])"
@@ -2061,7 +2081,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
[(set_attr "type" "str")
(set_attr "mode" "QI")
(set (attr "prefix_rex")
-@@ -16233,7 +16248,7 @@
+@@ -16222,7 +16250,7 @@
(clobber (match_operand:P 1 "register_operand" "=D"))
(clobber (reg:CC FLAGS_REG))]
"!(fixed_regs[AX_REG] || fixed_regs[CX_REG] || fixed_regs[DI_REG])"
@@ -2070,7 +2090,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
[(set_attr "type" "str")
(set_attr "mode" "QI")
(set (attr "prefix_rex")
-@@ -17378,131 +17393,131 @@
+@@ -17399,131 +17427,131 @@
;; alternative when no register is available later.
(define_peephole2
@@ -2240,7 +2260,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
;; Convert compares with 1 to shorter inc/dec operations when CF is not
;; required and register dies. Similarly for 128 to -128.
-@@ -17613,7 +17628,7 @@
+@@ -17634,7 +17662,7 @@
;; leal (%edx,%eax,4), %eax
(define_peephole2
@@ -2249,7 +2269,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
(parallel [(set (match_operand 0 "register_operand" "")
(ashift (match_operand 1 "register_operand" "")
(match_operand 2 "const_int_operand" "")))
-@@ -17639,16 +17654,16 @@
+@@ -17660,16 +17688,16 @@
enum machine_mode op1mode = GET_MODE (operands[1]);
enum machine_mode mode = op1mode == DImode ? DImode : SImode;
int scale = 1 << INTVAL (operands[2]);
@@ -2272,7 +2292,7 @@ Index: gcc-47/src/gcc/config/i386/i386.md
operands[5] = gen_rtx_SUBREG (op1mode, operands[5], 0);
operands[0] = dest;
})
-@@ -18039,7 +18054,7 @@
+@@ -18060,7 +18088,7 @@
{
rtx (*insn)(rtx);
@@ -2281,11 +2301,9 @@ Index: gcc-47/src/gcc/config/i386/i386.md
? gen_lwp_slwpcbdi
: gen_lwp_slwpcbsi);
-Index: gcc-47/src/gcc/config/i386/i386.opt
-===================================================================
---- gcc-47.orig/src/gcc/config/i386/i386.opt 2013-05-20 00:16:08.397337116 +0400
-+++ gcc-47/src/gcc/config/i386/i386.opt 2013-05-20 00:19:41.087187505 +0400
-@@ -159,6 +159,20 @@
+--- a/src/gcc/config/i386/i386.opt
++++ b/src/gcc/config/i386/i386.opt
+@@ -159,6 +159,20 @@ Enum(cmodel) String(32) Value(CM_32)
EnumValue
Enum(cmodel) String(kernel) Value(CM_KERNEL)
@@ -2306,7 +2324,7 @@ Index: gcc-47/src/gcc/config/i386/i386.opt
mcpu=
Target RejectNegative Joined Undocumented Alias(mtune=) Warn(%<-mcpu=%> is deprecated; use %<-mtune=%> or %<-march=%> instead)
-@@ -204,7 +218,7 @@
+@@ -204,7 +218,7 @@ EnumValue
Enum(fpmath_unit) String(both) Value({(enum fpmath_unit) (FPMATH_SSE | FPMATH_387)})
mhard-float
@@ -2315,7 +2333,7 @@ Index: gcc-47/src/gcc/config/i386/i386.opt
Use hardware fp
mieee-fp
-@@ -411,11 +425,11 @@
+@@ -411,11 +425,11 @@ Target RejectNegative Negative(m64) Report InverseMask(ISA_64BIT) Var(ix86_isa_f
Generate 32bit i386 code
m64
@@ -2329,7 +2347,7 @@ Index: gcc-47/src/gcc/config/i386/i386.opt
Generate 32bit x86-64 code
mmmx
-@@ -455,11 +469,11 @@
+@@ -455,11 +469,11 @@ Target Report Mask(ISA_SSE4_2) Var(ix86_isa_flags) Save
Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 and SSE4.2 built-in functions and code generation
msse4
@@ -2343,10 +2361,8 @@ Index: gcc-47/src/gcc/config/i386/i386.opt
Do not support SSE4.1 and SSE4.2 built-in functions and code generation
msse5
-Index: gcc-47/src/gcc/config/i386/predicates.md
-===================================================================
---- gcc-47.orig/src/gcc/config/i386/predicates.md 2013-05-20 00:16:08.397430212 +0400
-+++ gcc-47/src/gcc/config/i386/predicates.md 2013-05-20 00:19:41.089084061 +0400
+--- a/src/gcc/config/i386/predicates.md
++++ b/src/gcc/config/i386/predicates.md
@@ -1,5 +1,5 @@
;; Predicate definitions for IA-32 and x86-64.
-;; Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
@@ -2416,10 +2432,8 @@ Index: gcc-47/src/gcc/config/i386/predicates.md
(match_operand 0 "register_no_elim_operand")))
;; Match exactly zero.
-Index: gcc-47/src/gcc/config/i386/sse.md
-===================================================================
---- gcc-47.orig/src/gcc/config/i386/sse.md 2013-05-20 00:16:08.397534107 +0400
-+++ gcc-47/src/gcc/config/i386/sse.md 2013-05-20 00:19:41.097670960 +0400
+--- a/src/gcc/config/i386/sse.md
++++ b/src/gcc/config/i386/sse.md
@@ -8083,8 +8083,8 @@
"monitor\t%0, %1, %2"
[(set_attr "length" "3")])
@@ -2431,11 +2445,9 @@ Index: gcc-47/src/gcc/config/i386/sse.md
(match_operand:SI 1 "register_operand" "c")
(match_operand:SI 2 "register_operand" "d")]
UNSPECV_MONITOR)]
-Index: gcc-47/src/gcc/config/m68k/m68k.opt
-===================================================================
---- gcc-47.orig/src/gcc/config/m68k/m68k.opt 2013-05-20 00:16:08.397787101 +0400
-+++ gcc-47/src/gcc/config/m68k/m68k.opt 2013-05-20 00:19:41.099511158 +0400
-@@ -136,7 +136,7 @@
+--- a/src/gcc/config/m68k/m68k.opt
++++ b/src/gcc/config/m68k/m68k.opt
+@@ -136,7 +136,7 @@ Target RejectNegative
Generate code for a Fido A
mhard-float
@@ -2444,11 +2456,9 @@ Index: gcc-47/src/gcc/config/m68k/m68k.opt
Generate code which uses hardware floating point instructions
mid-shared-library
-Index: gcc-47/src/gcc/config/mep/mep.opt
-===================================================================
---- gcc-47.orig/src/gcc/config/mep/mep.opt 2013-05-20 00:16:08.397630849 +0400
-+++ gcc-47/src/gcc/config/mep/mep.opt 2013-05-20 00:19:41.101114930 +0400
-@@ -55,7 +55,7 @@
+--- a/src/gcc/config/mep/mep.opt
++++ b/src/gcc/config/mep/mep.opt
+@@ -55,7 +55,7 @@ Target Mask(COP)
Enable MeP Coprocessor
mcop32
@@ -2457,11 +2467,9 @@ Index: gcc-47/src/gcc/config/mep/mep.opt
Enable MeP Coprocessor with 32-bit registers
mcop64
-Index: gcc-47/src/gcc/config/pa/pa-hpux.opt
-===================================================================
---- gcc-47.orig/src/gcc/config/pa/pa-hpux.opt 2013-05-20 00:16:08.397275268 +0400
-+++ gcc-47/src/gcc/config/pa/pa-hpux.opt 2013-05-20 00:19:41.102350052 +0400
-@@ -23,7 +23,7 @@
+--- a/src/gcc/config/pa/pa-hpux.opt
++++ b/src/gcc/config/pa/pa-hpux.opt
+@@ -23,7 +23,7 @@ Variable
int flag_pa_unix = TARGET_HPUX_11_31 ? 2003 : TARGET_HPUX_11_11 ? 1998 : TARGET_HPUX_10_10 ? 1995 : 1993
msio
@@ -2470,10 +2478,8 @@ Index: gcc-47/src/gcc/config/pa/pa-hpux.opt
Generate cpp defines for server IO
munix=93
-Index: gcc-47/src/gcc/config/pa/pa64-hpux.opt
-===================================================================
---- gcc-47.orig/src/gcc/config/pa/pa64-hpux.opt 2013-05-20 00:16:08.397300639 +0400
-+++ gcc-47/src/gcc/config/pa/pa64-hpux.opt 2013-05-20 00:19:41.103356552 +0400
+--- a/src/gcc/config/pa/pa64-hpux.opt
++++ b/src/gcc/config/pa/pa64-hpux.opt
@@ -19,7 +19,7 @@
; <http://www.gnu.org/licenses/>.
@@ -2483,21 +2489,17 @@ Index: gcc-47/src/gcc/config/pa/pa64-hpux.opt
Assume code will be linked by GNU ld
mhp-ld
-Index: gcc-47/src/gcc/config/picochip/picochip.opt
-===================================================================
---- gcc-47.orig/src/gcc/config/picochip/picochip.opt 2013-05-20 00:16:08.397025288 +0400
-+++ gcc-47/src/gcc/config/picochip/picochip.opt 2013-05-20 00:19:41.104566196 +0400
-@@ -43,4 +43,4 @@
+--- a/src/gcc/config/picochip/picochip.opt
++++ b/src/gcc/config/picochip/picochip.opt
+@@ -43,4 +43,4 @@ Target Mask(INEFFICIENT_WARNINGS)
Generate warnings when inefficient code is known to be generated.
minefficient
-Target Mask(INEFFICIENT_WARNINGS) MaskExists Undocumented
+Target Mask(INEFFICIENT_WARNINGS) Undocumented
-Index: gcc-47/src/gcc/config/rs6000/sysv4.opt
-===================================================================
---- gcc-47.orig/src/gcc/config/rs6000/sysv4.opt 2013-05-20 00:16:08.397727424 +0400
-+++ gcc-47/src/gcc/config/rs6000/sysv4.opt 2013-05-20 00:19:41.105847536 +0400
-@@ -66,7 +66,7 @@
+--- a/src/gcc/config/rs6000/sysv4.opt
++++ b/src/gcc/config/rs6000/sysv4.opt
+@@ -66,7 +66,7 @@ Target Report RejectNegative Mask(LITTLE_ENDIAN)
Produce little endian code
mlittle
@@ -2506,11 +2508,9 @@ Index: gcc-47/src/gcc/config/rs6000/sysv4.opt
Produce little endian code
mbig-endian
-Index: gcc-47/src/gcc/config/sh/sh.opt
-===================================================================
---- gcc-47.orig/src/gcc/config/sh/sh.opt 2013-05-20 00:16:08.397755069 +0400
-+++ gcc-47/src/gcc/config/sh/sh.opt 2013-05-20 00:19:41.107354572 +0400
-@@ -320,7 +320,7 @@
+--- a/src/gcc/config/sh/sh.opt
++++ b/src/gcc/config/sh/sh.opt
+@@ -320,7 +320,7 @@ Target Report RejectNegative Mask(RELAX)
Shorten address references during linking
mrenesas
@@ -2519,10 +2519,8 @@ Index: gcc-47/src/gcc/config/sh/sh.opt
Follow Renesas (formerly Hitachi) / SuperH calling conventions
msoft-atomic
-Index: gcc-47/src/gcc/config/sparc/long-double-switch.opt
-===================================================================
---- gcc-47.orig/src/gcc/config/sparc/long-double-switch.opt 2013-05-20 00:16:08.397113917 +0400
-+++ gcc-47/src/gcc/config/sparc/long-double-switch.opt 2013-05-20 00:19:41.108592197 +0400
+--- a/src/gcc/config/sparc/long-double-switch.opt
++++ b/src/gcc/config/sparc/long-double-switch.opt
@@ -19,7 +19,7 @@
; <http://www.gnu.org/licenses/>.
@@ -2532,11 +2530,9 @@ Index: gcc-47/src/gcc/config/sparc/long-double-switch.opt
Use 128-bit long double
mlong-double-64
-Index: gcc-47/src/gcc/config/sparc/sparc.opt
-===================================================================
---- gcc-47.orig/src/gcc/config/sparc/sparc.opt 2013-05-20 00:16:08.397095116 +0400
-+++ gcc-47/src/gcc/config/sparc/sparc.opt 2013-05-20 00:19:41.109584447 +0400
-@@ -30,7 +30,7 @@
+--- a/src/gcc/config/sparc/sparc.opt
++++ b/src/gcc/config/sparc/sparc.opt
+@@ -30,7 +30,7 @@ Target Report Mask(FPU)
Use hardware FP
mhard-float
@@ -2545,11 +2541,9 @@ Index: gcc-47/src/gcc/config/sparc/sparc.opt
Use hardware FP
msoft-float
-Index: gcc-47/src/gcc/config/v850/v850.opt
-===================================================================
---- gcc-47.orig/src/gcc/config/v850/v850.opt 2013-05-20 00:16:08.397699511 +0400
-+++ gcc-47/src/gcc/config/v850/v850.opt 2013-05-20 00:19:41.111531563 +0400
-@@ -102,7 +102,7 @@
+--- a/src/gcc/config/v850/v850.opt
++++ b/src/gcc/config/v850/v850.opt
+@@ -102,7 +102,7 @@ Target RejectNegative Mask(V850E1)
Compile for the v850e1 processor
mv850es
@@ -2558,11 +2552,9 @@ Index: gcc-47/src/gcc/config/v850/v850.opt
Compile for the v850es variant of the v850e1
mv850e2
-Index: gcc-47/src/gcc/config/vax/vax.opt
-===================================================================
---- gcc-47.orig/src/gcc/config/vax/vax.opt 2013-05-20 00:16:08.397140301 +0400
-+++ gcc-47/src/gcc/config/vax/vax.opt 2013-05-20 00:19:41.112846403 +0400
-@@ -31,7 +31,7 @@
+--- a/src/gcc/config/vax/vax.opt
++++ b/src/gcc/config/vax/vax.opt
+@@ -31,7 +31,7 @@ Target RejectNegative Mask(G_FLOAT)
Generate GFLOAT double precision code
mg-float
@@ -2571,11 +2563,9 @@ Index: gcc-47/src/gcc/config/vax/vax.opt
Generate GFLOAT double precision code
mgnu
-Index: gcc-47/src/gcc/configure
-===================================================================
---- gcc-47.orig/src/gcc/configure 2013-05-20 00:16:08.396769890 +0400
-+++ gcc-47/src/gcc/configure 2013-05-20 00:19:41.128414308 +0400
-@@ -13832,7 +13832,14 @@
+--- a/src/gcc/configure
++++ b/src/gcc/configure
+@@ -13832,7 +13832,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
@@ -2591,11 +2581,9 @@ Index: gcc-47/src/gcc/configure
;;
ppc64-*linux*|powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
-Index: gcc-47/src/gcc/dwarf2out.c
-===================================================================
---- gcc-47.orig/src/gcc/dwarf2out.c 2013-05-20 00:16:08.396740818 +0400
-+++ gcc-47/src/gcc/dwarf2out.c 2013-05-20 00:19:41.142847209 +0400
-@@ -10183,7 +10183,9 @@
+--- a/src/gcc/dwarf2out.c
++++ b/src/gcc/dwarf2out.c
+@@ -10183,7 +10183,9 @@ dbx_reg_number (const_rtx rtl)
}
#endif
@@ -2606,7 +2594,7 @@ Index: gcc-47/src/gcc/dwarf2out.c
}
/* Optionally add a DW_OP_piece term to a location description expression.
-@@ -11680,6 +11682,8 @@
+@@ -11680,6 +11682,8 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode,
case REG:
if (GET_MODE_CLASS (mode) != MODE_INT
|| (GET_MODE_SIZE (mode) > DWARF2_ADDR_SIZE
@@ -2615,7 +2603,7 @@ Index: gcc-47/src/gcc/dwarf2out.c
#ifdef POINTERS_EXTEND_UNSIGNED
&& (mode != Pmode || mem_mode == VOIDmode)
#endif
-@@ -11952,7 +11956,9 @@
+@@ -11952,7 +11956,9 @@ mem_loc_descriptor (rtx rtl, enum machine_mode mode,
case PLUS:
plus:
if (is_based_loc (rtl)
@@ -2626,11 +2614,9 @@ Index: gcc-47/src/gcc/dwarf2out.c
&& GET_MODE_CLASS (mode) == MODE_INT)
mem_loc_result = based_loc_descr (XEXP (rtl, 0),
INTVAL (XEXP (rtl, 1)),
-Index: gcc-47/src/gcc/emit-rtl.c
-===================================================================
---- gcc-47.orig/src/gcc/emit-rtl.c 2013-05-20 00:16:08.396787582 +0400
-+++ gcc-47/src/gcc/emit-rtl.c 2013-05-20 00:19:41.147875998 +0400
-@@ -964,6 +964,22 @@
+--- a/src/gcc/emit-rtl.c
++++ b/src/gcc/emit-rtl.c
+@@ -964,6 +964,22 @@ void
set_reg_attrs_from_value (rtx reg, rtx x)
{
int offset;
@@ -2653,7 +2639,7 @@ Index: gcc-47/src/gcc/emit-rtl.c
/* Hard registers can be reused for multiple purposes within the same
function, so setting REG_ATTRS, REG_POINTER and REG_POINTER_ALIGN
-@@ -977,14 +993,14 @@
+@@ -977,14 +993,14 @@ set_reg_attrs_from_value (rtx reg, rtx x)
if (MEM_OFFSET_KNOWN_P (x))
REG_ATTRS (reg) = get_reg_attrs (MEM_EXPR (x),
MEM_OFFSET (x) + offset);
@@ -2670,11 +2656,9 @@ Index: gcc-47/src/gcc/emit-rtl.c
mark_reg_pointer (reg, REGNO_POINTER_ALIGN (REGNO (x)));
}
}
-Index: gcc-47/src/gcc/opth-gen.awk
-===================================================================
---- gcc-47.orig/src/gcc/opth-gen.awk 2013-05-20 00:16:08.396694854 +0400
-+++ gcc-47/src/gcc/opth-gen.awk 2013-05-20 00:19:41.149322275 +0400
-@@ -298,16 +298,25 @@
+--- a/src/gcc/opth-gen.awk
++++ b/src/gcc/opth-gen.awk
+@@ -298,16 +298,25 @@ print "";
for (i = 0; i < n_opts; i++) {
name = opt_args("Mask", flags[i])
@@ -2708,7 +2692,7 @@ Index: gcc-47/src/gcc/opth-gen.awk
}
for (i = 0; i < n_extra_masks; i++) {
print "#define MASK_" extra_masks[i] " (1 << " masknum[""]++ ")"
-@@ -330,17 +339,26 @@
+@@ -330,17 +339,26 @@ print ""
for (i = 0; i < n_opts; i++) {
name = opt_args("Mask", flags[i])
@@ -2743,11 +2727,9 @@ Index: gcc-47/src/gcc/opth-gen.awk
}
for (i = 0; i < n_extra_masks; i++) {
print "#define TARGET_" extra_masks[i] \
-Index: gcc-47/src/gcc/reginfo.c
-===================================================================
---- gcc-47.orig/src/gcc/reginfo.c 2013-05-20 00:16:08.396723036 +0400
-+++ gcc-47/src/gcc/reginfo.c 2013-05-20 00:19:41.151346602 +0400
-@@ -1222,17 +1222,7 @@
+--- a/src/gcc/reginfo.c
++++ b/src/gcc/reginfo.c
+@@ -1222,17 +1222,7 @@ reg_scan_mark_refs (rtx x, rtx insn)
/* If this is setting a register from a register or from a simple
conversion of a register, propagate REG_EXPR. */
if (REG_P (dest) && !REG_ATTRS (dest))
@@ -2766,11 +2748,33 @@ Index: gcc-47/src/gcc/reginfo.c
/* ... fall through ... */
-Index: gcc-47/src/gcc/testsuite/ChangeLog.x32
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/gcc/testsuite/ChangeLog.x32 2013-05-20 00:19:41.152788732 +0400
-@@ -0,0 +1,34 @@
+--- /dev/null
++++ b/src/gcc/testsuite/ChangeLog.x32
+@@ -0,0 +1,58 @@
++2014-01-24 H.J. Lu <hongjiu.lu@intel.com>
++
++ Backport from mainline.
++ 2014-01-23 H.J. Lu <hongjiu.lu@intel.com>
++
++ PR target/59929
++ * gcc.target/i386/pr59929.c: New test.
++
++2012-12-09 H.J. Lu <hjl.tools@gmail.com>
++
++ * gcc.target/i386/pr55597.c: Compile with -maddress-mode=long.
++
++2012-11-24 H.J. Lu <hjl.tools@gmail.com>
++
++ * gcc.target/i386/pr55142-1.c: Require maybe_x32 target. Compile
++ with -maddress-mode=long.
++ * gcc.target/i386/pr55142-2.c: Likewise.
++
++2012-11-03 H.J. Lu <hjl.tools@gmail.com>
++ Jack Howarth <howarth@bromo.med.uc.edu>
++
++ * lib/target-supports.exp (check_effective_target_maybe_x32): New
++ proc.
++
+2012-08-24 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR debug/52857
@@ -2805,10 +2809,8 @@ Index: gcc-47/src/gcc/testsuite/ChangeLog.x32
+
+ PR target/52146
+ * gcc.target/i386/pr52146.c: Update final-scan to allow $-18874240.
-Index: gcc-47/src/gcc/testsuite/gcc.dg/torture/pr52530.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/gcc/testsuite/gcc.dg/torture/pr52530.c 2013-05-20 00:19:41.154476812 +0400
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.dg/torture/pr52530.c
@@ -0,0 +1,30 @@
+/* { dg-do run } */
+
@@ -2840,20 +2842,16 @@ Index: gcc-47/src/gcc/testsuite/gcc.dg/torture/pr52530.c
+
+ return 0;
+}
-Index: gcc-47/src/gcc/testsuite/gcc.target/i386/pr52146.c
-===================================================================
---- gcc-47.orig/src/gcc/testsuite/gcc.target/i386/pr52146.c 2013-05-20 00:16:08.396830830 +0400
-+++ gcc-47/src/gcc/testsuite/gcc.target/i386/pr52146.c 2013-05-20 00:19:41.156051752 +0400
-@@ -15,4 +15,4 @@
+--- a/src/gcc/testsuite/gcc.target/i386/pr52146.c
++++ b/src/gcc/testsuite/gcc.target/i386/pr52146.c
+@@ -15,4 +15,4 @@ test2 (void)
*apic_tpr_addr = 0;
}
-/* { dg-final { scan-assembler-not "-18874240" } } */
+/* { dg-final { scan-assembler-not "\[,\\t \]+-18874240" } } */
-Index: gcc-47/src/gcc/testsuite/gcc.target/i386/pr52857-1.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/gcc/testsuite/gcc.target/i386/pr52857-1.c 2013-05-20 00:19:41.156926280 +0400
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/i386/pr52857-1.c
@@ -0,0 +1,10 @@
+/* { dg-do compile { target { ! { ia32 } } } } */
+/* { dg-options "-g -O -mx32 -maddress-mode=long" } */
@@ -2865,10 +2863,8 @@ Index: gcc-47/src/gcc/testsuite/gcc.target/i386/pr52857-1.c
+ int res;
+ get_BID128 (&res);
+}
-Index: gcc-47/src/gcc/testsuite/gcc.target/i386/pr52857-2.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/gcc/testsuite/gcc.target/i386/pr52857-2.c 2013-05-20 00:19:41.157823510 +0400
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/i386/pr52857-2.c
@@ -0,0 +1,8 @@
+/* { dg-do compile { target { ! { ia32 } } } } */
+/* { dg-options "-g -O -mx32 -maddress-mode=long" } */
@@ -2878,10 +2874,8 @@ Index: gcc-47/src/gcc/testsuite/gcc.target/i386/pr52857-2.c
+{
+ uw_init_context_1 (__builtin_dwarf_cfa ());
+}
-Index: gcc-47/src/gcc/testsuite/gcc.target/i386/pr52876.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/gcc/testsuite/gcc.target/i386/pr52876.c 2013-05-20 00:19:41.158540337 +0400
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/i386/pr52876.c
@@ -0,0 +1,25 @@
+/* { dg-do run { target { x32 } } } */
+/* { dg-options "-O2 -mx32 -maddress-mode=long" } */
@@ -2908,10 +2902,8 @@ Index: gcc-47/src/gcc/testsuite/gcc.target/i386/pr52876.c
+
+ return 0;
+}
-Index: gcc-47/src/gcc/testsuite/gcc.target/i386/pr52882.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/gcc/testsuite/gcc.target/i386/pr52882.c 2013-05-20 00:19:41.159228945 +0400
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/i386/pr52882.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+/* { dg-options "-O" } */
@@ -2932,10 +2924,8 @@ Index: gcc-47/src/gcc/testsuite/gcc.target/i386/pr52882.c
+ for (; a.f1;) {
+ }
+}
-Index: gcc-47/src/gcc/testsuite/gcc.target/i386/pr52883.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/gcc/testsuite/gcc.target/i386/pr52883.c 2013-05-20 00:19:41.159914953 +0400
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/i386/pr52883.c
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+/* { dg-options "-O" } */
@@ -2962,10 +2952,8 @@ Index: gcc-47/src/gcc/testsuite/gcc.target/i386/pr52883.c
+ } else
+ i = g[c];
+}
-Index: gcc-47/src/gcc/testsuite/gcc.target/i386/pr54157.c
-===================================================================
---- gcc-47.orig/src/gcc/testsuite/gcc.target/i386/pr54157.c 2013-05-20 00:16:08.396945878 +0400
-+++ gcc-47/src/gcc/testsuite/gcc.target/i386/pr54157.c 2013-05-20 00:19:41.160931138 +0400
+--- a/src/gcc/testsuite/gcc.target/i386/pr54157.c
++++ b/src/gcc/testsuite/gcc.target/i386/pr54157.c
@@ -1,5 +1,5 @@
/* { dg-do compile { target { ! { ia32 } } } } */
-/* { dg-options "-O2 -mx32 -ftree-vectorize" } */
@@ -2973,10 +2961,115 @@ Index: gcc-47/src/gcc/testsuite/gcc.target/i386/pr54157.c
struct s2{
int n[24 -1][24 -1][24 -1];
-Index: gcc-47/src/libffi/ChangeLog.x32
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/libffi/ChangeLog.x32 2013-05-20 00:19:41.162050821 +0400
+--- a/src/gcc/testsuite/gcc.target/i386/pr55142-1.c
++++ b/src/gcc/testsuite/gcc.target/i386/pr55142-1.c
+@@ -1,6 +1,7 @@
+ /* { dg-do compile { target { ! { ia32 } } } } */
++/* { dg-require-effective-target maybe_x32 } */
+ /* { dg-require-effective-target fpic } */
+-/* { dg-options "-O2 -mx32 -fpic" } */
++/* { dg-options "-O2 -mx32 -maddress-mode=long -fpic" } */
+
+ typedef int int32_t;
+ typedef unsigned int uint32_t;
+--- a/src/gcc/testsuite/gcc.target/i386/pr55142-2.c
++++ b/src/gcc/testsuite/gcc.target/i386/pr55142-2.c
+@@ -1,6 +1,7 @@
+ /* { dg-do compile { target { ! { ia32 } } } } */
++/* { dg-require-effective-target maybe_x32 } */
+ /* { dg-require-effective-target fpic } */
+-/* { dg-options "-O3 -mx32 -fpic" } */
++/* { dg-options "-O3 -mx32 -maddress-mode=long -fpic" } */
+ /* { dg-final { scan-assembler-not "movl\[\\t \]*%.*,\[\\t \]*-1073742592\\(%r(.x|.i|.p|\[1-9\]*)\\)" } } */
+
+ typedef int int32_t;
+--- a/src/gcc/testsuite/gcc.target/i386/pr55597.c
++++ b/src/gcc/testsuite/gcc.target/i386/pr55597.c
+@@ -1,6 +1,6 @@
+ /* { dg-do compile { target { ! { ia32 } } } } */
+ /* { dg-require-effective-target fpic } */
+-/* { dg-options "-O2 -fPIC -mx32" } */
++/* { dg-options "-O2 -fPIC -mx32 -maddress-mode=long" } */
+
+ struct initial_sp
+ {
+--- /dev/null
++++ b/src/gcc/testsuite/gcc.target/i386/pr59929.c
+@@ -0,0 +1,55 @@
++/* { dg-do run } */
++/* { dg-options "-O0 -mno-accumulate-outgoing-args" } */
++/* { dg-options "-O0 -mno-accumulate-outgoing-args -mx32 -maddress-mode=short" { target x32 } } */
++
++void
++__attribute__ ((noinline))
++test (float x1, float x2, float x3, float x4, float x5, float x6,
++ float x7, float x8, float x9, float x10, float x11, float x12,
++ float x13, float x14, float x15, float x16)
++{
++ if (x1 != 91
++ || x2 != 92
++ || x3 != 93
++ || x4 != 94
++ || x5 != 95
++ || x6 != 96
++ || x7 != 97
++ || x8 != 98
++ || x9 != 99
++ || x10 != 100
++ || x11 != 101
++ || x12 != 102
++ || x13 != 103
++ || x14 != 104
++ || x15 != 105
++ || x16 != 106)
++ __builtin_abort ();
++}
++
++float x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13,
++ x14, x15, x16;
++
++int
++main ()
++{
++ x1 = 91;
++ x2 = 92;
++ x3 = 93;
++ x4 = 94;
++ x5 = 95;
++ x6 = 96;
++ x7 = 97;
++ x8 = 98;
++ x9 = 99;
++ x10 = 100;
++ x11 = 101;
++ x12 = 102;
++ x13 = 103;
++ x14 = 104;
++ x15 = 105;
++ x16 = 106;
++ test (x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13,
++ x14, x15, x16);
++ return 0;
++}
+--- a/src/gcc/testsuite/lib/target-supports.exp
++++ b/src/gcc/testsuite/lib/target-supports.exp
+@@ -4458,6 +4458,14 @@ proc check_effective_target_lto { } {
+ return [info exists ENABLE_LTO]
+ }
+
++# Return 1 if -mx32 -maddress-mode=short can compile, 0 otherwise.
++
++proc check_effective_target_maybe_x32 { } {
++ return [check_no_compiler_messages maybe_x32 object {
++ void foo (void) {}
++ } "-mx32 -maddress-mode=short"]
++}
++
+ # Return 1 if this target supports the -fsplit-stack option, 0
+ # otherwise.
+
+--- /dev/null
++++ b/src/libffi/ChangeLog.x32
@@ -0,0 +1,27 @@
+2012-07-18 H.J. Lu <hongjiu.lu@intel.com>
+
@@ -3005,11 +3098,9 @@ Index: gcc-47/src/libffi/ChangeLog.x32
+2012-05-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure: Regenerated.
-Index: gcc-47/src/libffi/configure
-===================================================================
---- gcc-47.orig/src/libffi/configure 2013-05-20 00:16:08.398175691 +0400
-+++ gcc-47/src/libffi/configure 2013-05-20 00:19:41.171040453 +0400
-@@ -6282,7 +6282,14 @@
+--- a/src/libffi/configure
++++ b/src/libffi/configure
+@@ -6282,7 +6282,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
@@ -3025,11 +3116,27 @@ Index: gcc-47/src/libffi/configure
;;
ppc64-*linux*|powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
-Index: gcc-47/src/libffi/src/x86/ffi64.c
-===================================================================
---- gcc-47.orig/src/libffi/src/x86/ffi64.c 2013-05-20 00:16:08.398213732 +0400
-+++ gcc-47/src/libffi/src/x86/ffi64.c 2013-05-20 00:19:41.173165174 +0400
-@@ -426,7 +426,7 @@
+@@ -10766,7 +10773,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 10769 "configure"
++#line 10776 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -10872,7 +10879,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 10875 "configure"
++#line 10882 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+--- a/src/libffi/src/x86/ffi64.c
++++ b/src/libffi/src/x86/ffi64.c
+@@ -426,7 +426,7 @@ ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
/* If the return value is passed in memory, add the pointer as the
first integer argument. */
if (ret_in_memory)
@@ -3038,7 +3145,7 @@ Index: gcc-47/src/libffi/src/x86/ffi64.c
avn = cif->nargs;
arg_types = cif->arg_types;
-@@ -501,9 +501,11 @@
+@@ -501,9 +501,11 @@ ffi_prep_closure_loc (ffi_closure* closure,
tramp = (volatile unsigned short *) &closure->tramp[0];
tramp[0] = 0xbb49; /* mov <code>, %r11 */
@@ -3052,7 +3159,7 @@ Index: gcc-47/src/libffi/src/x86/ffi64.c
/* Set the carry bit iff the function uses any sse registers.
This is clc or stc, together with the first byte of the jmp. */
-@@ -542,7 +544,7 @@
+@@ -542,7 +544,7 @@ ffi_closure_unix64_inner(ffi_closure *closure, void *rvalue,
{
/* The return value goes in memory. Arrange for the closure
return value to go directly back to the original caller. */
@@ -3061,11 +3168,9 @@ Index: gcc-47/src/libffi/src/x86/ffi64.c
/* We don't have to do anything in asm for the return. */
ret = FFI_TYPE_VOID;
}
-Index: gcc-47/src/libffi/src/x86/ffitarget.h
-===================================================================
---- gcc-47.orig/src/libffi/src/x86/ffitarget.h 2013-05-20 00:16:08.398194488 +0400
-+++ gcc-47/src/libffi/src/x86/ffitarget.h 2013-05-20 00:19:41.174046890 +0400
-@@ -53,9 +53,16 @@
+--- a/src/libffi/src/x86/ffitarget.h
++++ b/src/libffi/src/x86/ffitarget.h
+@@ -53,9 +53,16 @@ typedef unsigned long long ffi_arg;
typedef long long ffi_sarg;
#endif
#else
@@ -3082,20 +3187,66 @@ Index: gcc-47/src/libffi/src/x86/ffitarget.h
typedef enum ffi_abi {
FFI_FIRST_ABI = 0,
-Index: gcc-47/src/libgcc/ChangeLog.x32
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/libgcc/ChangeLog.x32 2013-05-20 00:19:41.175023017 +0400
-@@ -0,0 +1,4 @@
+--- /dev/null
++++ b/src/libgcc/ChangeLog.x32
+@@ -0,0 +1,9 @@
++2012-03-29 H.J. Lu <hongjiu.lu@intel.com>
++
++ * config/i386/linux-unwind.h (x86_64_fallback_frame_state): Define
++ only for glibc.
++
+2012-03-13 H.J. Lu <hongjiu.lu@intel.com>
+
+ * unwind-dw2.c (_Unwind_SetGRValue): Assert DWARF register size
+ <= saved reg size.
-Index: gcc-47/src/libgcc/unwind-dw2.c
-===================================================================
---- gcc-47.orig/src/libgcc/unwind-dw2.c 2013-05-20 00:16:08.396582913 +0400
-+++ gcc-47/src/libgcc/unwind-dw2.c 2013-05-20 00:19:41.176755342 +0400
-@@ -294,7 +294,8 @@
+--- a/src/libgcc/config/i386/linux-unwind.h
++++ b/src/libgcc/config/i386/linux-unwind.h
+@@ -29,11 +29,17 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+
+ #ifndef inhibit_libc
+
+-#ifdef __x86_64__
++/* There's no sys/ucontext.h for glibc 2.0, so no
++ signal-turned-exceptions for them. There's also no configure-run for
++ the target, so we can't check on (e.g.) HAVE_SYS_UCONTEXT_H. Using the
++ target libc version macro should be enough. */
++#if defined __GLIBC__ && !(__GLIBC__ == 2 && __GLIBC_MINOR__ == 0)
+
+ #include <signal.h>
+ #include <sys/ucontext.h>
+
++#ifdef __x86_64__
++
+ #define MD_FALLBACK_FRAME_STATE_FOR x86_64_fallback_frame_state
+
+ static _Unwind_Reason_Code
+@@ -108,15 +114,6 @@ x86_64_fallback_frame_state (struct _Unwind_Context *context,
+
+ #else /* ifdef __x86_64__ */
+
+-/* There's no sys/ucontext.h for glibc 2.0, so no
+- signal-turned-exceptions for them. There's also no configure-run for
+- the target, so we can't check on (e.g.) HAVE_SYS_UCONTEXT_H. Using the
+- target libc version macro should be enough. */
+-#if defined __GLIBC__ && !(__GLIBC__ == 2 && __GLIBC_MINOR__ == 0)
+-
+-#include <signal.h>
+-#include <sys/ucontext.h>
+-
+ #define MD_FALLBACK_FRAME_STATE_FOR x86_fallback_frame_state
+
+ static _Unwind_Reason_Code
+@@ -197,6 +194,6 @@ x86_frob_update_context (struct _Unwind_Context *context,
+ _Unwind_SetSignalFrame (context, 1);
+ }
+
+-#endif /* not glibc 2.0 */
+ #endif /* ifdef __x86_64__ */
++#endif /* not glibc 2.0 */
+ #endif /* ifdef inhibit_libc */
+--- a/src/libgcc/unwind-dw2.c
++++ b/src/libgcc/unwind-dw2.c
+@@ -294,7 +294,8 @@ _Unwind_SetGRValue (struct _Unwind_Context *context, int index,
{
index = DWARF_REG_TO_UNWIND_COLUMN (index);
gcc_assert (index < (int) sizeof(dwarf_reg_size_table));
@@ -3105,19 +3256,15 @@ Index: gcc-47/src/libgcc/unwind-dw2.c
context->by_value[index] = 1;
context->reg[index] = _Unwind_Get_Unwind_Context_Reg_Val (val);
-Index: gcc-47/src/libgfortran/ChangeLog.x32
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/libgfortran/ChangeLog.x32 2013-05-20 00:19:41.177807854 +0400
+--- /dev/null
++++ b/src/libgfortran/ChangeLog.x32
@@ -0,0 +1,3 @@
+2012-05-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure: Regenerated.
-Index: gcc-47/src/libgfortran/configure
-===================================================================
---- gcc-47.orig/src/libgfortran/configure 2013-05-20 00:16:08.396653572 +0400
-+++ gcc-47/src/libgfortran/configure 2013-05-20 00:19:41.202610220 +0400
-@@ -8071,7 +8071,14 @@
+--- a/src/libgfortran/configure
++++ b/src/libgfortran/configure
+@@ -8071,7 +8071,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
@@ -3133,10 +3280,26 @@ Index: gcc-47/src/libgfortran/configure
;;
ppc64-*linux*|powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
-Index: gcc-47/src/libgomp/ChangeLog.x32
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/libgomp/ChangeLog.x32 2013-05-20 00:19:41.205487108 +0400
+@@ -12318,7 +12325,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 12321 "configure"
++#line 12328 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -12424,7 +12431,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 12427 "configure"
++#line 12434 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+--- /dev/null
++++ b/src/libgomp/ChangeLog.x32
@@ -0,0 +1,8 @@
+2012-03-31 H.J. Lu <hongjiu.lu@intel.com>
+
@@ -3146,11 +3309,9 @@ Index: gcc-47/src/libgomp/ChangeLog.x32
+2012-05-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure: Regenerated.
-Index: gcc-47/src/libgomp/configure
-===================================================================
---- gcc-47.orig/src/libgomp/configure 2013-05-20 00:16:08.398018504 +0400
-+++ gcc-47/src/libgomp/configure 2013-05-20 00:19:41.217680463 +0400
-@@ -6596,7 +6596,14 @@
+--- a/src/libgomp/configure
++++ b/src/libgomp/configure
+@@ -6596,7 +6596,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
@@ -3166,11 +3327,27 @@ Index: gcc-47/src/libgomp/configure
;;
ppc64-*linux*|powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
-Index: gcc-47/src/libgomp/configure.tgt
-===================================================================
---- gcc-47.orig/src/libgomp/configure.tgt 2013-05-20 00:16:08.398045265 +0400
-+++ gcc-47/src/libgomp/configure.tgt 2013-05-20 00:19:41.220364412 +0400
-@@ -59,7 +59,7 @@
+@@ -11080,7 +11087,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11083 "configure"
++#line 11090 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11186,7 +11193,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11189 "configure"
++#line 11196 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+--- a/src/libgomp/configure.tgt
++++ b/src/libgomp/configure.tgt
+@@ -59,7 +59,7 @@ if test $enable_linux_futex = yes; then
i[456]86-*-linux*)
config_path="linux/x86 linux posix"
case " ${CC} ${CFLAGS} " in
@@ -3179,10 +3356,8 @@ Index: gcc-47/src/libgomp/configure.tgt
;;
*)
if test -z "$with_arch"; then
-Index: gcc-47/src/libitm/ChangeLog.x32
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/libitm/ChangeLog.x32 2013-05-20 00:19:41.222540298 +0400
+--- /dev/null
++++ b/src/libitm/ChangeLog.x32
@@ -0,0 +1,8 @@
+2012-03-31 H.J. Lu <hongjiu.lu@intel.com>
+
@@ -3192,11 +3367,9 @@ Index: gcc-47/src/libitm/ChangeLog.x32
+2012-05-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure: Regenerated.
-Index: gcc-47/src/libitm/configure
-===================================================================
---- gcc-47.orig/src/libitm/configure 2013-05-20 00:16:08.398145965 +0400
-+++ gcc-47/src/libitm/configure 2013-05-20 00:19:41.234906958 +0400
-@@ -7286,7 +7286,14 @@
+--- a/src/libitm/configure
++++ b/src/libitm/configure
+@@ -7286,7 +7286,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
@@ -3212,11 +3385,27 @@ Index: gcc-47/src/libitm/configure
;;
ppc64-*linux*|powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
-Index: gcc-47/src/libitm/configure.tgt
-===================================================================
---- gcc-47.orig/src/libitm/configure.tgt 2013-05-20 00:16:08.398110425 +0400
-+++ gcc-47/src/libitm/configure.tgt 2013-05-20 00:19:41.237406170 +0400
-@@ -53,7 +53,7 @@
+@@ -11771,7 +11778,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11774 "configure"
++#line 11781 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11877,7 +11884,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11880 "configure"
++#line 11887 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+--- a/src/libitm/configure.tgt
++++ b/src/libitm/configure.tgt
+@@ -53,7 +53,7 @@ case "${target_cpu}" in
i[3456]86)
case " ${CC} ${CFLAGS} " in
@@ -3225,10 +3414,8 @@ Index: gcc-47/src/libitm/configure.tgt
;;
*)
if test -z "$with_arch"; then
-Index: gcc-47/src/libjava/ChangeLog.x32
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/libjava/ChangeLog.x32 2013-05-20 00:19:41.239539005 +0400
+--- /dev/null
++++ b/src/libjava/ChangeLog.x32
@@ -0,0 +1,12 @@
+2012-07-18 H.J. Lu <hongjiu.lu@intel.com>
+
@@ -3242,19 +3429,15 @@ Index: gcc-47/src/libjava/ChangeLog.x32
+2012-05-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure: Regenerated.
-Index: gcc-47/src/libjava/classpath/ChangeLog.x32
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/libjava/classpath/ChangeLog.x32 2013-05-20 00:19:41.241882002 +0400
+--- /dev/null
++++ b/src/libjava/classpath/ChangeLog.x32
@@ -0,0 +1,3 @@
+2012-05-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure: Regenerated.
-Index: gcc-47/src/libjava/classpath/configure
-===================================================================
---- gcc-47.orig/src/libjava/classpath/configure 2013-05-20 00:16:08.397999958 +0400
-+++ gcc-47/src/libjava/classpath/configure 2013-05-20 00:19:41.257474149 +0400
-@@ -7592,7 +7592,14 @@
+--- a/src/libjava/classpath/configure
++++ b/src/libjava/classpath/configure
+@@ -7592,7 +7592,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
@@ -3270,11 +3453,63 @@ Index: gcc-47/src/libjava/classpath/configure
;;
ppc64-*linux*|powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
-Index: gcc-47/src/libjava/configure
-===================================================================
---- gcc-47.orig/src/libjava/configure 2013-05-20 00:16:08.397937383 +0400
-+++ gcc-47/src/libjava/configure 2013-05-20 00:19:41.274680290 +0400
-@@ -8843,7 +8843,14 @@
+@@ -11811,7 +11818,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11814 "configure"
++#line 11821 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11917,7 +11924,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11920 "configure"
++#line 11927 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -23814,7 +23821,7 @@ else
+ JAVA_TEST=Object.java
+ CLASS_TEST=Object.class
+ cat << \EOF > $JAVA_TEST
+-/* #line 23817 "configure" */
++/* #line 23824 "configure" */
+ package java.lang;
+
+ public class Object
+@@ -23907,7 +23914,7 @@ EOF
+ if uudecode$EXEEXT Test.uue; then
+ ac_cv_prog_uudecode_base64=yes
+ else
+- echo "configure: 23910: uudecode had trouble decoding base 64 file 'Test.uue'" >&5
++ echo "configure: 23917: uudecode had trouble decoding base 64 file 'Test.uue'" >&5
+ echo "configure: failed file was:" >&5
+ cat Test.uue >&5
+ ac_cv_prog_uudecode_base64=no
+@@ -23935,7 +23942,7 @@ JAVA_TEST=Test.java
+ CLASS_TEST=Test.class
+ TEST=Test
+ cat << \EOF > $JAVA_TEST
+-/* [#]line 23938 "configure" */
++/* [#]line 23945 "configure" */
+ public class Test {
+ public static void main (String args[]) {
+ System.exit (0);
+@@ -24143,7 +24150,7 @@ if test "x${use_glibj_zip}" = xfalse || \
+ JAVA_TEST=Test.java
+ CLASS_TEST=Test.class
+ cat << \EOF > $JAVA_TEST
+- /* #line 24146 "configure" */
++ /* #line 24153 "configure" */
+ public class Test
+ {
+ public static void main(String args)
+--- a/src/libjava/configure
++++ b/src/libjava/configure
+@@ -8843,7 +8843,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
@@ -3290,11 +3525,36 @@ Index: gcc-47/src/libjava/configure
;;
ppc64-*linux*|powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
-Index: gcc-47/src/libjava/include/x86_64-signal.h
-===================================================================
---- gcc-47.orig/src/libjava/include/x86_64-signal.h 2013-05-20 00:16:08.397964268 +0400
-+++ gcc-47/src/libjava/include/x86_64-signal.h 2013-05-20 00:19:41.277566699 +0400
-@@ -47,6 +47,10 @@
+@@ -13359,7 +13366,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 13362 "configure"
++#line 13369 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -13465,7 +13472,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 13468 "configure"
++#line 13475 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -19458,7 +19465,7 @@ if test "${enable_sjlj_exceptions+set}" = set; then :
+ enableval=$enable_sjlj_exceptions; :
+ else
+ cat > conftest.$ac_ext << EOF
+-#line 19461 "configure"
++#line 19468 "configure"
+ struct S { ~S(); };
+ void bar();
+ void foo()
+--- a/src/libjava/include/x86_64-signal.h
++++ b/src/libjava/include/x86_64-signal.h
+@@ -47,6 +47,10 @@ do \
\
bool _is_64_bit = false; \
\
@@ -3305,7 +3565,7 @@ Index: gcc-47/src/libjava/include/x86_64-signal.h
if ((_rip[0] & 0xf0) == 0x40) /* REX byte present. */ \
{ \
unsigned char _rex = _rip[0] & 0x0f; \
-@@ -64,10 +68,10 @@
+@@ -64,10 +68,10 @@ do \
{ \
if (_is_64_bit) \
_min_value_dividend = \
@@ -3318,19 +3578,15 @@ Index: gcc-47/src/libjava/include/x86_64-signal.h
} \
\
if (_min_value_dividend) \
-Index: gcc-47/src/libmudflap/ChangeLog.x32
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/libmudflap/ChangeLog.x32 2013-05-20 00:19:41.279406931 +0400
+--- /dev/null
++++ b/src/libmudflap/ChangeLog.x32
@@ -0,0 +1,3 @@
+2012-05-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure: Regenerated.
-Index: gcc-47/src/libmudflap/configure
-===================================================================
---- gcc-47.orig/src/libmudflap/configure 2013-05-20 00:16:08.396509180 +0400
-+++ gcc-47/src/libmudflap/configure 2013-05-20 00:19:41.288310657 +0400
-@@ -6393,7 +6393,14 @@
+--- a/src/libmudflap/configure
++++ b/src/libmudflap/configure
+@@ -6393,7 +6393,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
@@ -3346,19 +3602,33 @@ Index: gcc-47/src/libmudflap/configure
;;
ppc64-*linux*|powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
-Index: gcc-47/src/libobjc/ChangeLog.x32
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/libobjc/ChangeLog.x32 2013-05-20 00:19:41.290841954 +0400
+@@ -10607,7 +10614,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 10610 "configure"
++#line 10617 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -10713,7 +10720,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 10716 "configure"
++#line 10723 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+--- /dev/null
++++ b/src/libobjc/ChangeLog.x32
@@ -0,0 +1,3 @@
+2012-05-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure: Regenerated.
-Index: gcc-47/src/libobjc/configure
-===================================================================
---- gcc-47.orig/src/libobjc/configure 2013-05-20 00:16:08.397907498 +0400
-+++ gcc-47/src/libobjc/configure 2013-05-20 00:19:41.299384186 +0400
-@@ -6079,7 +6079,14 @@
+--- a/src/libobjc/configure
++++ b/src/libobjc/configure
+@@ -6079,7 +6079,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
@@ -3374,19 +3644,15 @@ Index: gcc-47/src/libobjc/configure
;;
ppc64-*linux*|powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
-Index: gcc-47/src/libquadmath/ChangeLog.x32
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/libquadmath/ChangeLog.x32 2013-05-20 00:19:41.302018872 +0400
+--- /dev/null
++++ b/src/libquadmath/ChangeLog.x32
@@ -0,0 +1,3 @@
+2012-05-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure: Regenerated.
-Index: gcc-47/src/libquadmath/configure
-===================================================================
---- gcc-47.orig/src/libquadmath/configure 2013-05-20 00:16:08.396556820 +0400
-+++ gcc-47/src/libquadmath/configure 2013-05-20 00:19:41.311498698 +0400
-@@ -6264,7 +6264,14 @@
+--- a/src/libquadmath/configure
++++ b/src/libquadmath/configure
+@@ -6264,7 +6264,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
@@ -3402,19 +3668,33 @@ Index: gcc-47/src/libquadmath/configure
;;
ppc64-*linux*|powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
-Index: gcc-47/src/libssp/ChangeLog.x32
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/libssp/ChangeLog.x32 2013-05-20 00:19:41.314077617 +0400
+@@ -10513,7 +10520,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 10516 "configure"
++#line 10523 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -10619,7 +10626,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 10622 "configure"
++#line 10629 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+--- /dev/null
++++ b/src/libssp/ChangeLog.x32
@@ -0,0 +1,3 @@
+2012-05-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure: Regenerated.
-Index: gcc-47/src/libssp/configure
-===================================================================
---- gcc-47.orig/src/libssp/configure 2013-05-20 00:16:08.396617095 +0400
-+++ gcc-47/src/libssp/configure 2013-05-20 00:19:41.322681882 +0400
-@@ -6401,7 +6401,14 @@
+--- a/src/libssp/configure
++++ b/src/libssp/configure
+@@ -6401,7 +6401,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
@@ -3430,19 +3710,141 @@ Index: gcc-47/src/libssp/configure
;;
ppc64-*linux*|powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
-Index: gcc-47/src/libstdc++-v3/ChangeLog.x32
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/libstdc++-v3/ChangeLog.x32 2013-05-20 00:19:41.325001231 +0400
+@@ -10650,7 +10657,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 10653 "configure"
++#line 10660 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -10756,7 +10763,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 10759 "configure"
++#line 10766 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+--- /dev/null
++++ b/src/libstdc++-v3/ChangeLog.x32
@@ -0,0 +1,3 @@
+2012-05-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure: Regenerated.
-Index: gcc-47/src/libtool.m4
-===================================================================
---- gcc-47.orig/src/libtool.m4 2013-05-20 00:16:08.396381203 +0400
-+++ gcc-47/src/libtool.m4 2013-05-20 00:19:41.331659497 +0400
-@@ -1232,7 +1232,14 @@
+--- a/src/libstdc++-v3/configure
++++ b/src/libstdc++-v3/configure
+@@ -7122,7 +7122,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
+ LD="${LD-ld} -m elf_i386_fbsd"
+ ;;
+ x86_64-*linux*)
+- LD="${LD-ld} -m elf_i386"
++ case `/usr/bin/file conftest.o` in
++ *x86-64*)
++ LD="${LD-ld} -m elf32_x86_64"
++ ;;
++ *)
++ LD="${LD-ld} -m elf_i386"
++ ;;
++ esac
+ ;;
+ ppc64-*linux*|powerpc64-*linux*)
+ LD="${LD-ld} -m elf32ppclinux"
+@@ -11500,7 +11507,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11503 "configure"
++#line 11510 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -11606,7 +11613,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 11609 "configure"
++#line 11616 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -14996,7 +15003,7 @@ fi
+ #
+ # Fake what AC_TRY_COMPILE does. XXX Look at redoing this new-style.
+ cat > conftest.$ac_ext << EOF
+-#line 14999 "configure"
++#line 15006 "configure"
+ struct S { ~S(); };
+ void bar();
+ void foo()
+@@ -15331,7 +15338,7 @@ $as_echo "$glibcxx_cv_atomic_long_long" >&6; }
+ # Fake what AC_TRY_COMPILE does.
+
+ cat > conftest.$ac_ext << EOF
+-#line 15334 "configure"
++#line 15341 "configure"
+ int main()
+ {
+ typedef bool atomic_type;
+@@ -15366,7 +15373,7 @@ $as_echo "$glibcxx_cv_atomic_bool" >&6; }
+ rm -f conftest*
+
+ cat > conftest.$ac_ext << EOF
+-#line 15369 "configure"
++#line 15376 "configure"
+ int main()
+ {
+ typedef short atomic_type;
+@@ -15401,7 +15408,7 @@ $as_echo "$glibcxx_cv_atomic_short" >&6; }
+ rm -f conftest*
+
+ cat > conftest.$ac_ext << EOF
+-#line 15404 "configure"
++#line 15411 "configure"
+ int main()
+ {
+ // NB: _Atomic_word not necessarily int.
+@@ -15437,7 +15444,7 @@ $as_echo "$glibcxx_cv_atomic_int" >&6; }
+ rm -f conftest*
+
+ cat > conftest.$ac_ext << EOF
+-#line 15440 "configure"
++#line 15447 "configure"
+ int main()
+ {
+ typedef long long atomic_type;
+@@ -15516,7 +15523,7 @@ $as_echo "$as_me: WARNING: Performance of certain classes will degrade as a resu
+ # unnecessary for this test.
+
+ cat > conftest.$ac_ext << EOF
+-#line 15519 "configure"
++#line 15526 "configure"
+ int main()
+ {
+ _Decimal32 d1;
+@@ -15558,7 +15565,7 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+ # unnecessary for this test.
+
+ cat > conftest.$ac_ext << EOF
+-#line 15561 "configure"
++#line 15568 "configure"
+ template<typename T1, typename T2>
+ struct same
+ { typedef T2 type; };
+@@ -15592,7 +15599,7 @@ $as_echo "$enable_int128" >&6; }
+ rm -f conftest*
+
+ cat > conftest.$ac_ext << EOF
+-#line 15595 "configure"
++#line 15602 "configure"
+ template<typename T1, typename T2>
+ struct same
+ { typedef T2 type; };
+--- a/src/libtool.m4
++++ b/src/libtool.m4
+@@ -1232,7 +1232,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
@@ -3458,19 +3860,15 @@ Index: gcc-47/src/libtool.m4
;;
ppc64-*linux*|powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
-Index: gcc-47/src/lto-plugin/ChangeLog.x32
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/lto-plugin/ChangeLog.x32 2013-05-20 00:19:41.333916536 +0400
+--- /dev/null
++++ b/src/lto-plugin/ChangeLog.x32
@@ -0,0 +1,3 @@
+2012-05-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure: Regenerated.
-Index: gcc-47/src/lto-plugin/configure
-===================================================================
---- gcc-47.orig/src/lto-plugin/configure 2013-05-20 00:16:08.398231881 +0400
-+++ gcc-47/src/lto-plugin/configure 2013-05-20 00:19:41.343033332 +0400
-@@ -6060,7 +6060,14 @@
+--- a/src/lto-plugin/configure
++++ b/src/lto-plugin/configure
+@@ -6060,7 +6060,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
@@ -3486,19 +3884,33 @@ Index: gcc-47/src/lto-plugin/configure
;;
ppc64-*linux*|powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
-Index: gcc-47/src/zlib/ChangeLog.x32
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ gcc-47/src/zlib/ChangeLog.x32 2013-05-20 00:19:41.345289829 +0400
+@@ -10544,7 +10551,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 10547 "configure"
++#line 10554 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -10650,7 +10657,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 10653 "configure"
++#line 10660 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+--- /dev/null
++++ b/src/zlib/ChangeLog.x32
@@ -0,0 +1,3 @@
+2012-05-16 H.J. Lu <hongjiu.lu@intel.com>
+
+ * configure: Regenerated.
-Index: gcc-47/src/zlib/configure
-===================================================================
---- gcc-47.orig/src/zlib/configure 2013-05-20 00:16:08.396537392 +0400
-+++ gcc-47/src/zlib/configure 2013-05-20 00:19:41.354625923 +0400
-@@ -5869,7 +5869,14 @@
+--- a/src/zlib/configure
++++ b/src/zlib/configure
+@@ -5869,7 +5869,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
@@ -3514,3 +3926,21 @@ Index: gcc-47/src/zlib/configure
;;
ppc64-*linux*|powerpc64-*linux*)
LD="${LD-ld} -m elf32ppclinux"
+@@ -10386,7 +10393,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 10389 "configure"
++#line 10396 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
+@@ -10492,7 +10499,7 @@ else
+ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+ lt_status=$lt_dlunknown
+ cat > conftest.$ac_ext <<_LT_EOF
+-#line 10495 "configure"
++#line 10502 "configure"
+ #include "confdefs.h"
+
+ #if HAVE_DLFCN_H
diff --git a/debian/patches/libstdc++-python3.diff b/debian/patches/libstdc++-python3.diff
new file mode 100644
index 0000000..fc5989c
--- /dev/null
+++ b/debian/patches/libstdc++-python3.diff
@@ -0,0 +1,167 @@
+# DP: Make the libstdc++-v3 pretty printer compatible with Python3.
+
+--- a/src/libstdc++-v3/python/libstdcxx/v6/printers.py
++++ b/src/libstdc++-v3/python/libstdcxx/v6/printers.py
+@@ -42,7 +42,7 @@
+ # anything fancier here.
+ field = typ.fields()[0]
+ if not field.is_base_class:
+- raise ValueError, "Cannot find type %s::%s" % (str(orig), name)
++ raise ValueError("Cannot find type %s::%s" % (str(orig), name))
+ typ = field.type
+
+ class SharedPointerPrinter:
+@@ -86,7 +86,7 @@
+ def __iter__(self):
+ return self
+
+- def next(self):
++ def __next__(self):
+ if self.base == self.head:
+ raise StopIteration
+ elt = self.base.cast(self.nodetype).dereference()
+@@ -133,7 +133,7 @@
+ def __iter__(self):
+ return self
+
+- def next(self):
++ def __next__(self):
+ if self.base == 0:
+ raise StopIteration
+ elt = self.base.cast(self.nodetype).dereference()
+@@ -187,7 +187,7 @@
+ def __iter__(self):
+ return self
+
+- def next(self):
++ def __next__(self):
+ count = self.count
+ self.count = self.count + 1
+ if self.bitvec:
+@@ -265,20 +265,20 @@
+ # Set the actual head to the first pair.
+ self.head = self.head.cast (nodes[0].type)
+ elif len (nodes) != 0:
+- raise ValueError, "Top of tuple tree does not consist of a single node."
++ raise ValueError("Top of tuple tree does not consist of a single node.")
+ self.count = 0
+
+ def __iter__ (self):
+ return self
+
+- def next (self):
++ def __next__ (self):
+ nodes = self.head.type.fields ()
+ # Check for further recursions in the inheritance tree.
+ if len (nodes) == 0:
+ raise StopIteration
+ # Check that this iteration has an expected structure.
+ if len (nodes) != 2:
+- raise ValueError, "Cannot parse more than 2 nodes in a tuple tree."
++ raise ValueError("Cannot parse more than 2 nodes in a tuple tree.")
+
+ # - Left node is the next recursion parent.
+ # - Right node is the actual class contained in the tuple.
+@@ -342,7 +342,7 @@
+ def __len__(self):
+ return int (self.size)
+
+- def next(self):
++ def __next__(self):
+ if self.count == self.size:
+ raise StopIteration
+ result = self.node
+@@ -403,9 +403,9 @@
+ def __iter__(self):
+ return self
+
+- def next(self):
++ def __next__(self):
+ if self.count % 2 == 0:
+- n = self.rbiter.next()
++ n = next(self.rbiter)
+ n = n.cast(self.type).dereference()['_M_value_field']
+ self.pair = n
+ item = n['first']
+@@ -445,8 +445,8 @@
+ def __iter__(self):
+ return self
+
+- def next(self):
+- item = self.rbiter.next()
++ def __next__(self):
++ item = next(self.rbiter)
+ item = item.cast(self.type).dereference()['_M_value_field']
+ # FIXME: this is weird ... what to do?
+ # Maybe a 'set' display hint?
+@@ -523,7 +523,7 @@
+ def __iter__(self):
+ return self
+
+- def next(self):
++ def __next__(self):
+ if self.p == self.last:
+ raise StopIteration
+
+@@ -561,7 +561,7 @@
+
+ size = self.buffer_size * delta_n + delta_s + delta_e
+
+- return '%s with %d elements' % (self.typename, long (size))
++ return '%s with %d elements' % (self.typename, int (size))
+
+ def children(self):
+ start = self.val['_M_impl']['_M_start']
+@@ -616,7 +616,7 @@
+ def __iter__ (self):
+ return self
+
+- def next (self):
++ def __next__ (self):
+ if self.node == 0:
+ raise StopIteration
+ node = self.node.cast(self.node_type)
+@@ -639,8 +639,8 @@
+ return '[%d]' % i
+
+ def children (self):
+- counter = itertools.imap (self.format_count, itertools.count())
+- return itertools.izip (counter, Tr1HashtableIterator (self.val))
++ counter = map (self.format_count, itertools.count())
++ return zip (counter, Tr1HashtableIterator (self.val))
+
+ class Tr1UnorderedMapPrinter:
+ "Print a tr1::unordered_map"
+@@ -667,11 +667,11 @@
+ return '[%d]' % i
+
+ def children (self):
+- counter = itertools.imap (self.format_count, itertools.count())
++ counter = map (self.format_count, itertools.count())
+ # Map over the hash table and flatten the result.
+- data = self.flatten (itertools.imap (self.format_one, Tr1HashtableIterator (self.val)))
++ data = self.flatten (map (self.format_one, Tr1HashtableIterator (self.val)))
+ # Zip the two iterators together.
+- return itertools.izip (counter, data)
++ return zip (counter, data)
+
+ def display_hint (self):
+ return 'map'
+@@ -688,7 +688,7 @@
+ def __iter__(self):
+ return self
+
+- def next(self):
++ def __next__(self):
+ if self.base == 0:
+ raise StopIteration
+ elt = self.base.cast(self.nodetype).dereference()
+@@ -741,7 +741,7 @@
+ # A small sanity check.
+ # FIXME
+ if not self.compiled_rx.match(name + '<>'):
+- raise ValueError, 'libstdc++ programming error: "%s" does not match' % name
++ raise ValueError('libstdc++ programming error: "%s" does not match' % name)
+ printer = RxPrinter(name, function)
+ self.subprinters.append(printer)
+ self.lookup[name] = printer
diff --git a/debian/patches/note-gnu-stack.diff b/debian/patches/note-gnu-stack.diff
index 6acf220..203ec52 100644
--- a/debian/patches/note-gnu-stack.diff
+++ b/debian/patches/note-gnu-stack.diff
@@ -50,18 +50,16 @@ libffi/
* src/arm/sysv.S: Likewise.
---
+ boehm-gc/ia64_save_regs_in_stack.S | 15 +++++++++++++++
boehm-gc/ia64_save_regs_in_stack.s | 12 ------------
- gcc/config/ia64/crtbegin.asm | 4 ++++
- gcc/config/ia64/crtend.asm | 4 ++++
- gcc/config/ia64/crti.asm | 4 ++++
- gcc/config/ia64/crtn.asm | 4 ++++
- gcc/config/ia64/lib1funcs.asm | 4 ++++
- gcc/config/ia64/linux.h | 2 ++
+ gcc/config/ia64/linux.h | 3 +++
gcc/config/rs6000/ppc-asm.h | 2 +-
- libffi/src/ia64/unix.S | 4 ++++
- libffi/src/powerpc/linux64.S | 4 ++++
- libffi/src/powerpc/linux64_closure.S | 4 ++++
- 11 files changed, 35 insertions(+), 13 deletions(-)
+ libgcc/config/ia64/crtbegin.S | 4 ++++
+ libgcc/config/ia64/crtend.S | 4 ++++
+ libgcc/config/ia64/crti.S | 4 ++++
+ libgcc/config/ia64/crtn.S | 4 ++++
+ libgcc/config/ia64/lib1funcs.S | 4 ++++
+ 9 files changed, 39 insertions(+), 13 deletions(-)
--- a/src/boehm-gc/ia64_save_regs_in_stack.s
+++ /dev/null
@@ -96,6 +94,65 @@ libffi/
+#ifdef __linux__
+ .section .note.GNU-stack,"",@progbits
+#endif
+--- a/src/libgcc/config/ia64/crtbegin.S
++++ b/src/libgcc/config/ia64/crtbegin.S
+@@ -252,3 +252,7 @@
+ .weak __cxa_finalize
+ #endif
+ .weak _Jv_RegisterClasses
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+--- a/src/libgcc/config/ia64/crtend.S
++++ b/src/libgcc/config/ia64/crtend.S
+@@ -119,3 +119,7 @@
+
+ br.ret.sptk.many rp
+ .endp __do_global_ctors_aux
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+--- a/src/libgcc/config/ia64/crti.S
++++ b/src/libgcc/config/ia64/crti.S
+@@ -51,3 +51,7 @@
+ .body
+
+ # end of crti.S
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+--- a/src/libgcc/config/ia64/crtn.S
++++ b/src/libgcc/config/ia64/crtn.S
+@@ -41,3 +41,7 @@
+ br.ret.sptk.many b0
+
+ # end of crtn.S
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+--- a/src/libgcc/config/ia64/lib1funcs.S
++++ b/src/libgcc/config/ia64/lib1funcs.S
+@@ -793,3 +793,7 @@
+ .endp __floattitf
+ #endif
+ #endif
++
++#ifdef __linux__
++.section .note.GNU-stack; .previous
++#endif
+--- a/src/gcc/config/ia64/linux.h
++++ b/src/gcc/config/ia64/linux.h
+@@ -86,3 +86,6 @@
+
+ #undef TARGET_INIT_LIBFUNCS
+ #define TARGET_INIT_LIBFUNCS ia64_soft_fp_init_libfuncs
++
++#undef TARGET_ASM_FILE_END
++#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
--- a/src/gcc/config/rs6000/ppc-asm.h
+++ b/src/gcc/config/rs6000/ppc-asm.h
@@ -352,7 +352,7 @@
diff --git a/debian/patches/pr50043.diff b/debian/patches/pr50043.diff
new file mode 100644
index 0000000..eaf18fe
--- /dev/null
+++ b/debian/patches/pr50043.diff
@@ -0,0 +1,297 @@
+# DP: Backport PR c++/50043 from the 4.8 branch.
+
+gcc/cp/
+
+2012-04-01 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/50043
+ * class.c (deduce_noexcept_on_destructor,
+ deduce_noexcept_on_destructors): New.
+ (check_bases_and_members): Call the latter.
+ * decl.c (grokfndecl): Call the former.
+ * method.c (implicitly_declare_fn): Not static.
+ * cp-tree.h (deduce_noexcept_on_destructor, implicitly_declare_fn):
+ Declare
+
+gcc/testsuite/
+
+2012-04-01 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/50043
+ * g++.dg/cpp0x/noexcept17.C: New.
+ * g++.old-deja/g++.eh/cleanup1.C: Adjust.
+ * g++.dg/tree-ssa/ehcleanup-1.C: Likewise.
+ * g++.dg/cpp0x/noexcept01.C: Likewise.
+ * g++.dg/eh/init-temp1.C: Likewise.
+ * g++.dg/eh/ctor1.C: Likwise.
+
+--- a/src/gcc/cp/decl.c
++++ b/src/gcc/cp/decl.c
+@@ -7439,6 +7439,13 @@
+ if (ctype != NULL_TREE)
+ grokclassfn (ctype, decl, flags);
+
++ /* 12.4/3 */
++ if (cxx_dialect >= cxx0x
++ && DECL_DESTRUCTOR_P (decl)
++ && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
++ && !processing_template_decl)
++ deduce_noexcept_on_destructor (decl);
++
+ decl = check_explicit_specialization (orig_declarator, decl,
+ template_count,
+ 2 * funcdef_flag +
+--- a/src/gcc/cp/class.c
++++ b/src/gcc/cp/class.c
+@@ -4334,6 +4334,41 @@
+ clone_function_decl (OVL_CURRENT (fns), /*update_method_vec_p=*/1);
+ }
+
++/* Deduce noexcept for a destructor DTOR. */
++
++void
++deduce_noexcept_on_destructor (tree dtor)
++{
++ if (!TYPE_RAISES_EXCEPTIONS (TREE_TYPE (dtor)))
++ {
++ tree ctx = DECL_CONTEXT (dtor);
++ tree implicit_fn = implicitly_declare_fn (sfk_destructor, ctx,
++ /*const_p=*/false);
++ tree eh_spec = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (implicit_fn));
++ TREE_TYPE (dtor) = build_exception_variant (TREE_TYPE (dtor), eh_spec);
++ }
++}
++
++/* For each destructor in T, deduce noexcept:
++
++ 12.4/3: A declaration of a destructor that does not have an
++ exception-specification is implicitly considered to have the
++ same exception-specification as an implicit declaration (15.4). */
++
++static void
++deduce_noexcept_on_destructors (tree t)
++{
++ tree fns;
++
++ /* If for some reason we don't have a CLASSTYPE_METHOD_VEC, we bail
++ out now. */
++ if (!CLASSTYPE_METHOD_VEC (t))
++ return;
++
++ for (fns = CLASSTYPE_DESTRUCTORS (t); fns; fns = OVL_NEXT (fns))
++ deduce_noexcept_on_destructor (OVL_CURRENT (fns));
++}
++
+ /* Subroutine of set_one_vmethod_tm_attributes. Search base classes
+ of TYPE for virtual functions which FNDECL overrides. Return a
+ mask of the tm attributes found therein. */
+@@ -5007,6 +5042,10 @@
+ cant_have_const_ctor = 0;
+ no_const_asn_ref = 0;
+
++ /* Deduce noexcept on destructors. */
++ if (cxx_dialect >= cxx0x)
++ deduce_noexcept_on_destructors (t);
++
+ /* Check all the base-classes. */
+ check_bases (t, &cant_have_const_ctor,
+ &no_const_asn_ref);
+--- a/src/gcc/cp/cp-tree.h
++++ b/src/gcc/cp/cp-tree.h
+@@ -4977,6 +4977,7 @@
+ extern tree* decl_cloned_function_p (const_tree, bool);
+ extern void clone_function_decl (tree, int);
+ extern void adjust_clone_args (tree);
++extern void deduce_noexcept_on_destructor (tree);
+ extern void insert_late_enum_def_into_classtype_sorted_fields (tree, tree);
+
+ /* in cvt.c */
+@@ -5265,6 +5266,8 @@
+ extern tree get_default_ctor (tree);
+ extern tree get_dtor (tree, tsubst_flags_t);
+ extern tree locate_ctor (tree);
++extern tree implicitly_declare_fn (special_function_kind, tree,
++ bool);
+
+ /* In optimize.c */
+ extern bool maybe_clone_body (tree);
+--- a/src/gcc/cp/method.c
++++ b/src/gcc/cp/method.c
+@@ -1448,7 +1448,7 @@
+ reference argument or a non-const reference. Returns the
+ FUNCTION_DECL for the implicitly declared function. */
+
+-static tree
++tree
+ implicitly_declare_fn (special_function_kind kind, tree type, bool const_p)
+ {
+ tree fn;
+--- a/src/gcc/testsuite/g++.old-deja/g++.eh/cleanup1.C
++++ b/src/gcc/testsuite/g++.old-deja/g++.eh/cleanup1.C
+@@ -2,6 +2,12 @@
+ // Bug: obj gets destroyed twice because the fixups for the return are
+ // inside its cleanup region.
+
++#ifdef __GXX_EXPERIMENTAL_CXX0X__
++#define NOEXCEPT_FALSE noexcept (false)
++#else
++#define NOEXCEPT_FALSE
++#endif
++
+ extern "C" int printf (const char *, ...);
+
+ int d;
+@@ -9,7 +15,7 @@
+ struct myExc { };
+
+ struct myExcRaiser {
+- ~myExcRaiser() { throw myExc(); }
++ ~myExcRaiser() NOEXCEPT_FALSE { throw myExc(); }
+ };
+
+ struct stackObj {
+--- a/src/gcc/testsuite/g++.dg/eh/init-temp1.C
++++ b/src/gcc/testsuite/g++.dg/eh/init-temp1.C
+@@ -1,6 +1,12 @@
+ // PR c++/15764
+ // { dg-do run }
+
++#ifdef __GXX_EXPERIMENTAL_CXX0X__
++#define NOEXCEPT_FALSE noexcept (false)
++#else
++#define NOEXCEPT_FALSE
++#endif
++
+ extern "C" void abort ();
+
+ int thrown;
+@@ -8,7 +14,7 @@
+ int as;
+ struct a {
+ a () { ++as; }
+- ~a () { --as; if (thrown++ == 0) throw 42; }
++ ~a () NOEXCEPT_FALSE { --as; if (thrown++ == 0) throw 42; }
+ };
+
+ int f (a const&) { return 1; }
+--- a/src/gcc/testsuite/g++.dg/eh/ctor1.C
++++ b/src/gcc/testsuite/g++.dg/eh/ctor1.C
+@@ -5,6 +5,12 @@
+
+ // PR 411
+
++#ifdef __GXX_EXPERIMENTAL_CXX0X__
++#define NOEXCEPT_FALSE noexcept (false)
++#else
++#define NOEXCEPT_FALSE
++#endif
++
+ bool was_f_in_Bar_destroyed=false;
+
+ struct Foo
+@@ -17,7 +23,7 @@
+
+ struct Bar
+ {
+- ~Bar()
++ ~Bar() NOEXCEPT_FALSE
+ {
+ throw 1;
+ }
+--- a/src/gcc/testsuite/g++.dg/cpp0x/noexcept01.C
++++ b/src/gcc/testsuite/g++.dg/cpp0x/noexcept01.C
+@@ -50,7 +50,7 @@
+ ~E();
+ };
+
+-SA (!noexcept (E()));
++SA (noexcept (E()));
+
+ struct F
+ {
+@@ -74,7 +74,7 @@
+ }
+
+ template void tf<int,true>();
+-template void tf<E, false>();
++template void tf<E, true>();
+
+ // Make sure that noexcept uses the declared exception-specification, not
+ // any knowledge we might have about whether or not the function really
+--- a/src/gcc/testsuite/g++.dg/cpp0x/noexcept17.C
++++ b/src/gcc/testsuite/g++.dg/cpp0x/noexcept17.C
+@@ -0,0 +1,54 @@
++// PR c++/50043
++// { dg-options -std=c++11 }
++
++struct True1 {};
++struct True2 { ~True2(); };
++struct True3 { ~True3(){ throw 0; } };
++struct False { ~False() noexcept(false); };
++
++template <typename Base>
++struct A : Base
++{
++};
++
++template <typename Member>
++struct B
++{
++ Member mem;
++};
++
++template <typename Base, typename Member>
++struct C : Base
++{
++ Member mem;
++};
++
++#define SA(X) static_assert(X, #X)
++
++SA( noexcept(True1()));
++SA( noexcept(True2()));
++SA( noexcept(True3()));
++SA(!noexcept(False()));
++
++SA( noexcept(A<True1>()));
++SA( noexcept(A<True2>()));
++SA( noexcept(A<True3>()));
++SA(!noexcept(A<False>()));
++
++SA( noexcept(B<True1>()));
++SA( noexcept(B<True2>()));
++SA( noexcept(B<True3>()));
++SA(!noexcept(B<False>()));
++
++SA( noexcept(C<True1, True2>()));
++SA( noexcept(C<True1, True3>()));
++SA( noexcept(C<True2, True3>()));
++SA( noexcept(C<True2, True1>()));
++SA( noexcept(C<True3, True1>()));
++SA( noexcept(C<True3, True2>()));
++SA(!noexcept(C<False, True1>()));
++SA(!noexcept(C<False, True2>()));
++SA(!noexcept(C<False, True3>()));
++SA(!noexcept(C<True1, False>()));
++SA(!noexcept(C<True2, False>()));
++SA(!noexcept(C<True3, False>()));
+--- a/src/gcc/testsuite/g++.dg/tree-ssa/ehcleanup-1.C
++++ b/src/gcc/testsuite/g++.dg/tree-ssa/ehcleanup-1.C
+@@ -1,9 +1,16 @@
+ // { dg-options "-O2 -fdump-tree-ehcleanup1-details" }
++
++#ifdef __GXX_EXPERIMENTAL_CXX0X__
++#define NOEXCEPT_FALSE noexcept (false)
++#else
++#define NOEXCEPT_FALSE
++#endif
++
+ extern void can_throw ();
+ class a
+ {
+ public:
+- ~a ()
++ ~a () NOEXCEPT_FALSE
+ {
+ if (0)
+ can_throw ();
diff --git a/debian/patches/pr59695.diff b/debian/patches/pr59695.diff
new file mode 100644
index 0000000..bd215d0
--- /dev/null
+++ b/debian/patches/pr59695.diff
@@ -0,0 +1,156 @@
+# DP: Fix PR target/59588 (AArch64), backport proposed patch.
+
+gcc/
+2014-01-11 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org>
+ Kugan Vivekanandarajah <kuganv@linaro.org>
+
+ PR target/59588
+ * config/aarch64/aarch64.c (aarch64_build_constant): Fix incorrect
+ truncation.
+
+gcc/testsuite/
+2014-01-11 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org>
+ Kugan Vivekanandarajah <kuganv@linaro.org>
+
+ PR target/59695
+ * g++.dg/pr59695.C: New file.
+
+--- a/src/gcc/config/aarch64/aarch64.c
++++ b/src/gcc/config/aarch64/aarch64.c
+@@ -2486,7 +2486,7 @@ aarch64_build_constant (int regnum, HOST_WIDE_INT val)
+ if (ncount < zcount)
+ {
+ emit_move_insn (gen_rtx_REG (Pmode, regnum),
+- GEN_INT ((~val) & 0xffff));
++ GEN_INT (~((~val) & 0xffff)));
+ tval = 0xffff;
+ }
+ else
+--- a/src/gcc/testsuite/g++.dg/pr59695.C
++++ b/src/gcc/testsuite/g++.dg/pr59695.C
+@@ -0,0 +1,125 @@
++
++/* PR target/53055 */
++/* { dg-do run { target aarch64*-*-* } } */
++/* { dg-options "-O0" } */
++
++#define DEFINE_VIRTUALS_FNS(i) virtual void xxx##i () {} \
++ virtual void foo1_##i () {}\
++ virtual void foo2_##i () {}\
++ virtual void foo3_##i () {}\
++ virtual void foo4_##i () {}\
++ virtual void foo5_##i () {}\
++ virtual void foo6_##i () {}\
++ virtual void foo7_##i () {}\
++ virtual void foo8_##i () {}\
++ virtual void foo9_##i () {}\
++ virtual void foo10_##i () {}\
++ virtual void foo11_##i () {}\
++ virtual void foo12_##i () {}\
++ virtual void foo13_##i () {}\
++ virtual void foo14_##i () {}\
++ virtual void foo15_##i () {}\
++ virtual void foo16_##i () {}\
++ virtual void foo17_##i () {}\
++ virtual void foo18_##i () {}\
++ virtual void foo19_##i () {}\
++ virtual void foo20_##i () {}\
++ virtual void foo21_##i () {}\
++ virtual void foo22_##i () {}\
++
++class base_class_2
++{
++
++public:
++ /* Define lots of virtual functions */
++ DEFINE_VIRTUALS_FNS (1)
++ DEFINE_VIRTUALS_FNS (2)
++ DEFINE_VIRTUALS_FNS (3)
++ DEFINE_VIRTUALS_FNS (4)
++ DEFINE_VIRTUALS_FNS (5)
++ DEFINE_VIRTUALS_FNS (6)
++ DEFINE_VIRTUALS_FNS (7)
++ DEFINE_VIRTUALS_FNS (8)
++ DEFINE_VIRTUALS_FNS (9)
++ DEFINE_VIRTUALS_FNS (10)
++ DEFINE_VIRTUALS_FNS (11)
++ DEFINE_VIRTUALS_FNS (12)
++ DEFINE_VIRTUALS_FNS (13)
++ DEFINE_VIRTUALS_FNS (14)
++ DEFINE_VIRTUALS_FNS (15)
++ DEFINE_VIRTUALS_FNS (16)
++ DEFINE_VIRTUALS_FNS (17)
++ DEFINE_VIRTUALS_FNS (18)
++ DEFINE_VIRTUALS_FNS (19)
++ DEFINE_VIRTUALS_FNS (20)
++
++ base_class_2();
++ virtual ~base_class_2 ();
++};
++
++base_class_2::base_class_2()
++{
++}
++
++base_class_2::~base_class_2 ()
++{
++}
++
++class base_class_1
++{
++public:
++ virtual ~base_class_1();
++ base_class_1();
++};
++
++base_class_1::base_class_1()
++{
++}
++
++base_class_1::~base_class_1()
++{
++}
++
++class base_Impl_class :
++ virtual public base_class_2, public base_class_1
++{
++public:
++ base_Impl_class ();
++ virtual ~base_Impl_class ();
++};
++
++base_Impl_class::base_Impl_class ()
++{
++}
++
++base_Impl_class::~base_Impl_class ()
++{
++}
++
++
++class test_cls : public base_Impl_class
++{
++public:
++ test_cls();
++ virtual ~test_cls();
++};
++
++test_cls::test_cls()
++{
++}
++
++test_cls::~test_cls()
++{
++}
++
++int main()
++{
++ test_cls *test = new test_cls;
++ base_class_2 *p1 = test;
++
++ /* PR 53055 destructor thunk offsets are not setup
++ correctly resulting in crash. */
++ delete p1;
++ return 0;
++}
++
diff --git a/debian/patches/rename-info-files.diff b/debian/patches/rename-info-files.diff
index 6be20e9..e3329d0 100644
--- a/debian/patches/rename-info-files.diff
+++ b/debian/patches/rename-info-files.diff
@@ -93,7 +93,7 @@ Index: b/src/gcc/Makefile.in
===================================================================
--- a/src/gcc/Makefile.in
+++ b/src/gcc/Makefile.in
-@@ -4242,8 +4242,29 @@
+@@ -4258,8 +4258,30 @@
doc: $(BUILD_INFO) $(GENERATED_MANPAGES)
@@ -114,7 +114,8 @@ Index: b/src/gcc/Makefile.in
+ doc/$(INFO_GCCINT_NAME).info \
+ doc/$(INFO_GCCINSTALL_NAME).info doc/$(INFO_CPPINT_NAME).info
+
-+MAKEINFODEFS = -D 'fncpp $(INFO_CPP_NAME)' -D 'fngcc $(INFO_GCC_NAME)' \
++MAKEINFODEFS = -D 'fncpp $(INFO_CPP_NAME)' \
++ -D 'fngcc $(INFO_GCC_NAME)' \
+ -D 'fngxx $(INFO_GXX_NAME)' \
+ -D 'fngccint $(INFO_GCCINT_NAME)' \
+ -D 'fngccinstall $(INFO_GCCINSTALL_NAME)' \
@@ -125,7 +126,28 @@ Index: b/src/gcc/Makefile.in
info: $(INFOFILES) lang.info @GENINSRC@ srcinfo lang.srcinfo
-@@ -4297,21 +4318,41 @@
+@@ -4305,7 +4327,19 @@
+ if [ -n "$(PKGVERSION)" ]; then \
+ echo "@set VERSION_PACKAGE $(PKGVERSION)" >> $@T; \
+ fi
+- echo "@set BUGURL $(BUGURL_TEXI)" >> $@T; \
++ echo "@set BUGURL $(BUGURL_TEXI)" >> $@T
++ ( \
++ echo '@set fncpp $(INFO_CPP_NAME)'; \
++ echo '@set fngcc $(INFO_GCC_NAME)'; \
++ echo '@set fngcov $(INFO_GCC_NAME)'; \
++ echo '@set fngxx $(INFO_GXX_NAME)'; \
++ echo '@set fngccint $(INFO_GCCINT_NAME)'; \
++ echo '@set fngccinstall $(INFO_GCCINSTALL_NAME)'; \
++ echo '@set fncppint $(INFO_CPPINT_NAME)'; \
++ echo '@set fngfortran $(INFO_FORTRAN_NAME)'; \
++ echo '@set fngcj $(INFO_GCJ_NAME)'; \
++ echo '@set fngccgo $(INFO_GCCGO_NAME)'; \
++ ) >> $@T
+ mv -f $@T $@
+
+
+@@ -4313,21 +4347,41 @@
# patterns. To use them, put each of the specific targets with its
# specific dependencies but no build commands.
@@ -174,7 +196,7 @@ Index: b/src/gcc/Makefile.in
-I $(gcc_docdir)/include -o $@ $<; \
fi
-@@ -4672,11 +4713,11 @@
+@@ -4688,11 +4742,11 @@
# $(INSTALL_DATA) might be a relative pathname, so we can't cd into srcdir
# to do the install.
install-info:: doc installdirs \
@@ -191,7 +213,7 @@ Index: b/src/gcc/Makefile.in
lang.install-info
$(DESTDIR)$(infodir)/%.info: doc/%.info installdirs
-@@ -4883,8 +4924,11 @@
+@@ -4899,8 +4953,11 @@
-rm -rf $(DESTDIR)$(bindir)/$(GCOV_INSTALL_NAME)$(exeext)
-rm -rf $(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext)
-rm -rf $(DESTDIR)$(man1dir)/cpp$(man1ext)
@@ -322,7 +344,7 @@ Index: b/src/gcc/doc/invoke.texi
===================================================================
--- a/src/gcc/doc/invoke.texi
+++ b/src/gcc/doc/invoke.texi
-@@ -9438,7 +9438,7 @@
+@@ -9442,7 +9442,7 @@
@option{-nodefaultlibs} is @file{libgcc.a}, a library of internal subroutines
which GCC uses to overcome shortcomings of particular machines, or special
needs for some languages.
@@ -331,7 +353,7 @@ Index: b/src/gcc/doc/invoke.texi
Collection (GCC) Internals},
for more discussion of @file{libgcc.a}.)
In most cases, you need @file{libgcc.a} even when you want to avoid
-@@ -9446,7 +9446,7 @@
+@@ -9450,7 +9450,7 @@
or @option{-nodefaultlibs} you should usually specify @option{-lgcc} as well.
This ensures that you have no unresolved references to internal GCC
library subroutines. (For example, @samp{__main}, used to ensure C++
@@ -340,7 +362,7 @@ Index: b/src/gcc/doc/invoke.texi
GNU Compiler Collection (GCC) Internals}.)
@item -pie
-@@ -19656,7 +19656,7 @@
+@@ -19734,7 +19734,7 @@
@option{-B}, @option{-I} and @option{-L} (@pxref{Directory Options}). These
take precedence over places specified using environment variables, which
in turn take precedence over those specified by the configuration of GCC@.
@@ -349,7 +371,7 @@ Index: b/src/gcc/doc/invoke.texi
GNU Compiler Collection (GCC) Internals}.
@table @env
-@@ -19817,7 +19817,7 @@
+@@ -19895,7 +19895,7 @@
A precompiled header file will be searched for when @code{#include} is
seen in the compilation. As it searches for the included file
@@ -672,7 +694,7 @@ Index: b/src/gcc/go/Make-lang.in
-I $(gcc_docdir)/include -o $@ $<; \
else true; fi
-@@ -118,7 +118,7 @@
+@@ -117,7 +118,7 @@
go.all.cross: gccgo-cross$(exeext)
go.start.encap: gccgo$(exeext)
go.rest.encap:
@@ -721,6 +743,8 @@ Index: b/src/gcc/go/gccgo.texi
only documents the options specific to @command{gccgo}.
The @command{gccgo} command may be used to compile Go source code into
+Index: b/src/libquadmath/libquadmath.texi
+===================================================================
--- a/src/libquadmath/libquadmath.texi
+++ b/src/libquadmath/libquadmath.texi
@@ -25,7 +25,7 @@
@@ -732,6 +756,8 @@ Index: b/src/gcc/go/gccgo.texi
@end direntry
This manual documents the GCC Quad-Precision Math Library API.
+Index: b/src/libquadmath/Makefile.am
+===================================================================
--- a/src/libquadmath/Makefile.am
+++ b/src/libquadmath/Makefile.am
@@ -129,22 +129,24 @@
@@ -765,6 +791,8 @@ Index: b/src/gcc/go/gccgo.texi
# Automake Documentation:
+Index: b/src/libquadmath/Makefile.in
+===================================================================
--- a/src/libquadmath/Makefile.in
+++ b/src/libquadmath/Makefile.in
@@ -164,7 +164,8 @@
diff --git a/debian/patches/svn-updates-linaro.diff b/debian/patches/svn-updates-linaro.diff
index e529ca8..8d0e5e9 100644
--- a/debian/patches/svn-updates-linaro.diff
+++ b/debian/patches/svn-updates-linaro.diff
@@ -1,413 +1,4088 @@
-# DP: updates from the 4.7 branch upto 20130517 (r199025).
+# DP: updates from the 4.7 branch upto 20140222 (r208044).
last_updated()
{
cat > ${dir}LAST_UPDATED <<EOF
-Fri May 17 19:37:13 CEST 2013
-Fri May 17 17:37:13 UTC 2013 (revision 199025)
+Sat Feb 22 17:58:25 CET 2014
+Sat Feb 22 16:58:25 UTC 2014 (revision 208044)
EOF
}
-LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@198701 svn://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch \
+LANG=C svn diff svn://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@206380 svn://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch \
| sed -r 's,^--- (\S+)\t(\S+)(.*)$,--- a/src/\1\t\2,;s,^\+\+\+ (\S+)\t(\S+)(.*)$,+++ b/src/\1\t\2,' \
| awk '/^Index:.*\.(class|texi)/ {skip=1; next} /^Index:/ { skip=0 } skip==0'
-Index: libstdc++-v3/src/c++11/system_error.cc
+Index: contrib/ChangeLog
===================================================================
---- a/src/libstdc++-v3/src/c++11/system_error.cc (revision
-+++ b/src/libstdc++-v3/src/c++11/system_error.cc (revision
-@@ -62,8 +62,8 @@
- }
- };
+--- a/src/contrib/ChangeLog (revision
++++ b/src/contrib/ChangeLog (revision
+@@ -1,3 +1,10 @@
++2014-02-02 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2012-05-09 David Edelsohn <dje.gcc@gmail.com>
++
++ * gcc_update: Use $GCC_SVN to retrieve branch and revision.
++
+ 2013-04-11 Release Manager
-- const generic_error_category generic_category_instance;
-- const system_error_category system_category_instance;
-+ const generic_error_category generic_category_instance{};
-+ const system_error_category system_category_instance{};
+ * GCC 4.7.3 released.
+Index: contrib/gcc_update
+===================================================================
+--- a/src/contrib/gcc_update (revision
++++ b/src/contrib/gcc_update (revision
+@@ -367,8 +367,8 @@
+ exit 1
+ fi
+
+- revision=`svn info | awk '/Revision:/ { print $2 }'`
+- branch=`svn info | sed -ne "/URL:/ {
++ revision=`$GCC_SVN info | awk '/Revision:/ { print $2 }'`
++ branch=`$GCC_SVN info | sed -ne "/^URL:/ {
+ s,.*/trunk,trunk,
+ s,.*/branches/,,
+ s,.*/tags/,,
+Index: libgcc/config.host
+===================================================================
+--- a/src/libgcc/config.host (revision
++++ b/src/libgcc/config.host (revision
+@@ -1127,7 +1127,7 @@
+ extra_parts="$extra_parts crti.o crtn.o"
+ ;;
+ xtensa*-*-linux*)
+- tmake_file="$tmake_file xtensa/t-xtensa xtensa/t-linux"
++ tmake_file="$tmake_file xtensa/t-xtensa xtensa/t-linux t-slibgcc-libgcc"
+ md_unwind_header=xtensa/linux-unwind.h
+ ;;
+ am33_2.0-*-linux*)
+Index: libgcc/ChangeLog
+===================================================================
+--- a/src/libgcc/ChangeLog (revision
++++ b/src/libgcc/ChangeLog (revision
+@@ -1,3 +1,111 @@
++2014-01-25 Walter Lee <walt@tilera.com>
++
++ Backport from mainline
++ 2014-01-25 Walter Lee <walt@tilera.com>
++
++ * config/tilepro/atomic.c (pre_atomic_barrier): Mark inline.
++ (post_atomic_barrier): Ditto.
++ (__fetch_and_do): New macro.
++ (__atomic_fetch_and_do): Use __fetch_and_do.
++ (__sync_fetch_and_do): New macro.
++ (__sync_fetch_and_add_4): New function.
++ (__sync_fetch_and_sub_4): New function.
++ (__sync_fetch_and_or_4): New function.
++ (__sync_fetch_and_and_4): New function.
++ (__sync_fetch_and_xor_4): New function.
++ (__sync_fetch_and_nand_4): New function.
++ (__sync_fetch_and_add_8): New function.
++ (__sync_fetch_and_sub_8): New function.
++ (__sync_fetch_and_or_8): New function.
++ (__sync_fetch_and_and_8): New function.
++ (__sync_fetch_and_xor_8): New function.
++ (__sync_fetch_and_nand_8): New function.
++ (__do_and_fetch): New macro.
++ (__atomic_do_and_fetch): Use __do_and_fetch.
++ (__sync_do_and_fetch): New macro.
++ (__sync_add_and_fetch_4): New function.
++ (__sync_sub_and_fetch_4): New function.
++ (__sync_or_and_fetch_4): New function.
++ (__sync_and_and_fetch_4): New function.
++ (__sync_xor_and_fetch_4): New function.
++ (__sync_nand_and_fetch_4): New function.
++ (__sync_add_and_fetch_8): New function.
++ (__sync_sub_and_fetch_8): New function.
++ (__sync_or_and_fetch_8): New function.
++ (__sync_and_and_fetch_8): New function.
++ (__sync_xor_and_fetch_8): New function.
++ (__sync_nand_and_fetch_8): New function.
++ (__sync_exchange_methods): New macro.
++ (__sync_val_compare_and_swap_4): New function.
++ (__sync_bool_compare_and_swap_4): New function.
++ (__sync_lock_test_and_test_4): New function.
++ (__sync_val_compare_and_swap_8): New function.
++ (__sync_bool_compare_and_swap_8): New function.
++ (__sync_lock_test_and_test_8): New function.
++ (__subword_cmpxchg_body): New macro.
++ (__atomic_compare_exchange_1): Use __subword_cmpxchg_body.
++ (__atomic_compare_exchange_2): Ditto.
++ (__sync_subword_cmpxchg): New macro.
++ (__sync_val_compare_and_swap_1): New function.
++ (__sync_bool_compare_and_swap_1): New function.
++ (__sync_val_compare_and_swap_2): New function.
++ (__sync_bool_compare_and_swap_2): New function.
++ (__atomic_subword): Rename to ...
++ (__subword): ... New name.
++ (__atomic_subword_fetch): Use __subword.
++ (__sync_subword_fetch): New macro.
++ (__sync_fetch_and_add_1): New function.
++ (__sync_fetch_and_sub_1): New function.
++ (__sync_fetch_and_or_1): New function.
++ (__sync_fetch_and_and_1): New function.
++ (__sync_fetch_and_xor_1): New function.
++ (__sync_fetch_and_nand_1): New function.
++ (__sync_fetch_and_add_2): New function.
++ (__sync_fetch_and_sub_2): New function.
++ (__sync_fetch_and_or_2): New function.
++ (__sync_fetch_and_and_2): New function.
++ (__sync_fetch_and_xor_2): New function.
++ (__sync_fetch_and_nand_2): New function.
++ (__sync_add_and_fetch_1): New function.
++ (__sync_sub_and_fetch_1): New function.
++ (__sync_or_and_fetch_1): New function.
++ (__sync_and_and_fetch_1): New function.
++ (__sync_xor_and_fetch_1): New function.
++ (__sync_nand_and_fetch_1): New function.
++ (__sync_add_and_fetch_2): New function.
++ (__sync_sub_and_fetch_2): New function.
++ (__sync_or_and_fetch_2): New function.
++ (__sync_and_and_fetch_2): New function.
++ (__sync_xor_and_fetch_2): New function.
++ (__sync_nand_and_fetch_2): New function.
++ (__atomic_subword_lock): Use __subword.
++ (__sync_subword_lock): New macro.
++ (__sync_lock_test_and_set_1): New function.
++ (__sync_lock_test_and_set_2): New function.
++
++2014-01-25 Walter Lee <walt@tilera.com>
++
++ Backport from mainline
++ 2014-01-25 Walter Lee <walt@tilera.com>
++
++ * config/tilepro/atomic.c (BIT_OFFSET): Define.
++ (__atomic_subword_cmpxchg): Use BIT_OFFSET.
++ (__atomic_subword): Ditto.
++
++2014-01-25 Walter Lee <walt@tilera.com>
++
++ Backport from mainline
++ 2014-01-25 Walter Lee <walt@tilera.com>
++
++ * config/tilepro/atomic.c (__atomic_do_and_fetch): Add
++ a prefix op argument.
++ (__atomic_nand_fetch_4): Add prefix op.
++ (__atomic_nand_fetch_8): Ditto.
++
++2014-01-21 Baruch Siach <barch@tkos.co.il>
++
++ * config.host (tmake_file): add t-slibgcc-libgcc for xtensa*-*-linux*.
++
+ 2014-01-03 Joseph Myers <joseph@codesourcery.com>
+
+ * config/rs6000/ibm-ldouble.c (__gcc_qdiv): Scale up arguments in
+Index: libgcc/config/tilepro/atomic.c
+===================================================================
+--- a/src/libgcc/config/tilepro/atomic.c (revision
++++ b/src/libgcc/config/tilepro/atomic.c (revision
+@@ -29,7 +29,7 @@
+ /* This code should be inlined by the compiler, but for now support
+ it as out-of-line methods in libgcc. */
+
+-static void
++static inline void
+ pre_atomic_barrier (int model)
+ {
+ switch ((enum memmodel) model)
+@@ -45,7 +45,7 @@
+ return;
}
- namespace std _GLIBCXX_VISIBILITY(default)
-Index: libstdc++-v3/src/c++11/future.cc
-===================================================================
---- a/src/libstdc++-v3/src/c++11/future.cc (revision
-+++ b/src/libstdc++-v3/src/c++11/future.cc (revision
-@@ -60,7 +60,7 @@
- const future_error_category&
- __future_category_instance() noexcept
- {
-- static const future_error_category __fec;
-+ static const future_error_category __fec{};
- return __fec;
- }
+-static void
++static inline void
+ post_atomic_barrier (int model)
+ {
+ switch ((enum memmodel) model)
+@@ -63,16 +63,21 @@
+
+ #define __unused __attribute__((unused))
+
+-#define __atomic_fetch_and_do(type, size, opname) \
+-type \
+-__atomic_fetch_##opname##_##size(type* p, type i, int model) \
++#define __fetch_and_do(proto, type, size, opname, top, bottom) \
++proto \
+ { \
+- pre_atomic_barrier(model); \
++ top; \
+ type rv = arch_atomic_##opname(p, i); \
+- post_atomic_barrier(model); \
++ bottom; \
+ return rv; \
}
-Index: libstdc++-v3/include/bits/basic_string.h
-===================================================================
---- a/src/libstdc++-v3/include/bits/basic_string.h (revision
-+++ b/src/libstdc++-v3/include/bits/basic_string.h (revision
-@@ -2764,10 +2764,9 @@
- *
- * Stores characters from @a __is into @a __str until @a __delim is
- * found, the end of the stream is encountered, or str.max_size()
-- * is reached. If is.width() is non-zero, that is the limit on the
-- * number of characters stored into @a __str. Any previous
-- * contents of @a __str are erased. If @a __delim was encountered,
-- * it is extracted but not stored into @a __str.
-+ * is reached. Any previous contents of @a __str are erased. If
-+ * @a __delim is encountered, it is extracted but not stored into
-+ * @a __str.
- */
- template<typename _CharT, typename _Traits, typename _Alloc>
- basic_istream<_CharT, _Traits>&
-@@ -2782,10 +2781,9 @@
- *
- * Stores characters from is into @a __str until &apos;\n&apos; is
- * found, the end of the stream is encountered, or str.max_size()
-- * is reached. If __is.width() is non-zero, that is the limit on
-- * the number of characters stored into @a __str. Any previous
-- * contents of @a __str are erased. If end of line was
-- * encountered, it is extracted but not stored into @a __str.
-+ * is reached. Any previous contents of @a __str are erased. If
-+ * end of line is encountered, it is extracted but not stored into
-+ * @a __str.
- */
- template<typename _CharT, typename _Traits, typename _Alloc>
- inline basic_istream<_CharT, _Traits>&
-Index: libstdc++-v3/ChangeLog
-===================================================================
---- a/src/libstdc++-v3/ChangeLog (revision
-+++ b/src/libstdc++-v3/ChangeLog (revision
-@@ -1,3 +1,14 @@
-+2013-05-15 Jonathan Wakely <jwakely.gcc@gmail.com>
+
++#define __atomic_fetch_and_do(type, size, opname) \
++ __fetch_and_do(type __atomic_fetch_##opname##_##size(type* p, type i, int model), \
++ type, size, opname, \
++ pre_atomic_barrier(model), \
++ post_atomic_barrier(model)) \
++
+ __atomic_fetch_and_do (int, 4, add)
+ __atomic_fetch_and_do (int, 4, sub)
+ __atomic_fetch_and_do (int, 4, or)
+@@ -85,27 +90,73 @@
+ __atomic_fetch_and_do (long long, 8, and)
+ __atomic_fetch_and_do (long long, 8, xor)
+ __atomic_fetch_and_do (long long, 8, nand)
+-#define __atomic_do_and_fetch(type, size, opname, op) \
+-type \
+-__atomic_##opname##_fetch_##size(type* p, type i, int model) \
+-{ \
+- pre_atomic_barrier(model); \
+- type rv = arch_atomic_##opname(p, i) op i; \
+- post_atomic_barrier(model); \
+- return rv; \
+
-+ * include/bits/basic_string.h (getline): Fix doxygen comments.
++#define __sync_fetch_and_do(type, size, opname) \
++ __fetch_and_do(type __sync_fetch_and_##opname##_##size(type* p, type i), \
++ type, size, opname, \
++ arch_atomic_write_barrier(), \
++ arch_atomic_read_barrier())
+
-+2013-05-14 Evgeniy Stepanov <eugenis@google.com>
++__sync_fetch_and_do (int, 4, add)
++__sync_fetch_and_do (int, 4, sub)
++__sync_fetch_and_do (int, 4, or)
++__sync_fetch_and_do (int, 4, and)
++__sync_fetch_and_do (int, 4, xor)
++__sync_fetch_and_do (int, 4, nand)
++__sync_fetch_and_do (long long, 8, add)
++__sync_fetch_and_do (long long, 8, sub)
++__sync_fetch_and_do (long long, 8, or)
++__sync_fetch_and_do (long long, 8, and)
++__sync_fetch_and_do (long long, 8, xor)
++__sync_fetch_and_do (long long, 8, nand)
++
++#define __do_and_fetch(proto, type, size, opname, op, op2, top, bottom) \
++proto \
++{ \
++ top; \
++ type rv = op2 (arch_atomic_##opname(p, i) op i); \
++ bottom; \
++ return rv; \
+ }
+-__atomic_do_and_fetch (int, 4, add, +)
+-__atomic_do_and_fetch (int, 4, sub, -)
+-__atomic_do_and_fetch (int, 4, or, |)
+-__atomic_do_and_fetch (int, 4, and, &)
+-__atomic_do_and_fetch (int, 4, xor, |)
+-__atomic_do_and_fetch (int, 4, nand, &)
+-__atomic_do_and_fetch (long long, 8, add, +)
+-__atomic_do_and_fetch (long long, 8, sub, -)
+-__atomic_do_and_fetch (long long, 8, or, |)
+-__atomic_do_and_fetch (long long, 8, and, &)
+-__atomic_do_and_fetch (long long, 8, xor, |)
+-__atomic_do_and_fetch (long long, 8, nand, &)
+
-+ * src/c++11/system_error.cc (generic_category_instance): Add
-+ initializer.
-+ (system_category_instance): Likewise.
-+ * src/c++11/future.cc (__fec): Likewise.
++#define __atomic_do_and_fetch(type, size, opname, op, op2) \
++ __do_and_fetch(type __atomic_##opname##_fetch_##size(type* p, type i, int model), \
++ type, size, opname, op, op2, \
++ pre_atomic_barrier(model), \
++ post_atomic_barrier(model)) \
+
- 2013-04-15 Jack Howarth <howarth@bromo.med.uc.edu>
++__atomic_do_and_fetch (int, 4, add, +, )
++__atomic_do_and_fetch (int, 4, sub, -, )
++__atomic_do_and_fetch (int, 4, or, |, )
++__atomic_do_and_fetch (int, 4, and, &, )
++__atomic_do_and_fetch (int, 4, xor, |, )
++__atomic_do_and_fetch (int, 4, nand, &, ~)
++__atomic_do_and_fetch (long long, 8, add, +, )
++__atomic_do_and_fetch (long long, 8, sub, -, )
++__atomic_do_and_fetch (long long, 8, or, |, )
++__atomic_do_and_fetch (long long, 8, and, &, )
++__atomic_do_and_fetch (long long, 8, xor, |, )
++__atomic_do_and_fetch (long long, 8, nand, &, ~)
++
++#define __sync_do_and_fetch(type, size, opname, op, op2) \
++ __do_and_fetch(type __sync_##opname##_and_fetch_##size(type* p, type i), \
++ type, size, opname, op, op2, \
++ arch_atomic_write_barrier(), \
++ arch_atomic_read_barrier()) \
++
++__sync_do_and_fetch (int, 4, add, +, )
++__sync_do_and_fetch (int, 4, sub, -, )
++__sync_do_and_fetch (int, 4, or, |, )
++__sync_do_and_fetch (int, 4, and, &, )
++__sync_do_and_fetch (int, 4, xor, |, )
++__sync_do_and_fetch (int, 4, nand, &, ~)
++__sync_do_and_fetch (long long, 8, add, +, )
++__sync_do_and_fetch (long long, 8, sub, -, )
++__sync_do_and_fetch (long long, 8, or, |, )
++__sync_do_and_fetch (long long, 8, and, &, )
++__sync_do_and_fetch (long long, 8, xor, |, )
++__sync_do_and_fetch (long long, 8, nand, &, ~)
++
+ #define __atomic_exchange_methods(type, size) \
+ bool \
+ __atomic_compare_exchange_##size(volatile type* ptr, type* oldvalp, \
+@@ -129,49 +180,117 @@
+ post_atomic_barrier(model); \
+ return retval; \
+ }
++
+ __atomic_exchange_methods (int, 4)
+ __atomic_exchange_methods (long long, 8)
- Backport from mainline
++#define __sync_exchange_methods(type, size) \
++type \
++__sync_val_compare_and_swap_##size(type* ptr, type oldval, type newval) \
++{ \
++ arch_atomic_write_barrier(); \
++ type retval = arch_atomic_val_compare_and_exchange(ptr, oldval, newval); \
++ arch_atomic_read_barrier(); \
++ return retval; \
++} \
++ \
++bool \
++__sync_bool_compare_and_swap_##size(type* ptr, type oldval, type newval) \
++{ \
++ arch_atomic_write_barrier(); \
++ bool retval = arch_atomic_bool_compare_and_exchange(ptr, oldval, newval); \
++ arch_atomic_read_barrier(); \
++ return retval; \
++} \
++ \
++type \
++__sync_lock_test_and_set_##size(type* ptr, type val) \
++{ \
++ type retval = arch_atomic_exchange(ptr, val); \
++ arch_atomic_acquire_barrier_value(retval); \
++ return retval; \
++}
++
++__sync_exchange_methods (int, 4)
++__sync_exchange_methods (long long, 8)
++
++#ifdef __LITTLE_ENDIAN__
++#define BIT_OFFSET(n, type) ((n) * 8)
++#else
++#define BIT_OFFSET(n, type) ((4 - sizeof(type) - (n)) * 8)
++#endif
++
+ /* Subword methods require the same approach for both TILEPro and
+ TILE-Gx. We load the background data for the word, insert the
+ desired subword piece, then compare-and-exchange it into place. */
+ #define u8 unsigned char
+ #define u16 unsigned short
++
++#define __subword_cmpxchg_body(type, size, ptr, guess, val) \
++ ({ \
++ unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL); \
++ const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type); \
++ const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1; \
++ const unsigned int bgmask = ~(valmask << shift); \
++ unsigned int oldword = *p; \
++ type oldval = (oldword >> shift) & valmask; \
++ if (__builtin_expect((oldval == guess), 1)) { \
++ unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
++ oldword = arch_atomic_val_compare_and_exchange(p, oldword, word); \
++ oldval = (oldword >> shift) & valmask; \
++ } \
++ oldval; \
++ }) \
++
+ #define __atomic_subword_cmpxchg(type, size) \
+ \
+ bool \
+-__atomic_compare_exchange_##size(volatile type* ptr, type* guess, \
++__atomic_compare_exchange_##size(volatile type* ptr, type* guess_ptr, \
+ type val, bool weak __unused, int models, \
+ int modelf __unused) \
+ { \
+ pre_atomic_barrier(models); \
+- unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL); \
+- const int shift = ((unsigned long)ptr & 3UL) * 8; \
+- const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1; \
+- const unsigned int bgmask = ~(valmask << shift); \
+- unsigned int oldword = *p; \
+- type oldval = (oldword >> shift) & valmask; \
+- if (__builtin_expect((oldval == *guess), 1)) { \
+- unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
+- oldword = arch_atomic_val_compare_and_exchange(p, oldword, word); \
+- oldval = (oldword >> shift) & valmask; \
+- } \
++ type guess = *guess_ptr; \
++ type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val); \
+ post_atomic_barrier(models); \
+- bool success = (oldval == *guess); \
+- *guess = oldval; \
++ bool success = (oldval == guess); \
++ *guess_ptr = oldval; \
+ return success; \
+ }
++
+ __atomic_subword_cmpxchg (u8, 1)
+ __atomic_subword_cmpxchg (u16, 2)
++
++#define __sync_subword_cmpxchg(type, size) \
++ \
++type \
++__sync_val_compare_and_swap_##size(type* ptr, type guess, type val) \
++{ \
++ arch_atomic_write_barrier(); \
++ type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val); \
++ arch_atomic_read_barrier(); \
++ return oldval; \
++} \
++ \
++bool \
++__sync_bool_compare_and_swap_##size(type* ptr, type guess, type val) \
++{ \
++ type oldval = __sync_val_compare_and_swap_##size(ptr, guess, val); \
++ return oldval == guess; \
++}
++
++__sync_subword_cmpxchg (u8, 1)
++__sync_subword_cmpxchg (u16, 2)
++
+ /* For the atomic-update subword methods, we use the same approach as
+ above, but we retry until we succeed if the compare-and-exchange
+ fails. */
+-#define __atomic_subword(type, proto, top, expr, bottom) \
++#define __subword(type, proto, top, expr, bottom) \
+ proto \
+ { \
+ top \
+ unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL); \
+- const int shift = ((unsigned long)ptr & 3UL) * 8; \
++ const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type); \
+ const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1; \
+ const unsigned int bgmask = ~(valmask << shift); \
+ unsigned int oldword, xword = *p; \
+@@ -185,42 +304,93 @@
+ } while (__builtin_expect(xword != oldword, 0)); \
+ bottom \
+ }
++
+ #define __atomic_subword_fetch(type, funcname, expr, retval) \
+- __atomic_subword(type, \
+- type __atomic_ ## funcname(volatile type *ptr, type i, int model), \
+- pre_atomic_barrier(model);, \
+- expr, \
+- post_atomic_barrier(model); return retval;)
++ __subword(type, \
++ type __atomic_ ## funcname(volatile type *ptr, type i, int model), \
++ pre_atomic_barrier(model);, \
++ expr, \
++ post_atomic_barrier(model); return retval;)
++
+ __atomic_subword_fetch (u8, fetch_add_1, oldval + i, oldval)
+ __atomic_subword_fetch (u8, fetch_sub_1, oldval - i, oldval)
+ __atomic_subword_fetch (u8, fetch_or_1, oldval | i, oldval)
+ __atomic_subword_fetch (u8, fetch_and_1, oldval & i, oldval)
+ __atomic_subword_fetch (u8, fetch_xor_1, oldval ^ i, oldval)
+ __atomic_subword_fetch (u8, fetch_nand_1, ~(oldval & i), oldval)
++
+ __atomic_subword_fetch (u16, fetch_add_2, oldval + i, oldval)
+ __atomic_subword_fetch (u16, fetch_sub_2, oldval - i, oldval)
+ __atomic_subword_fetch (u16, fetch_or_2, oldval | i, oldval)
+ __atomic_subword_fetch (u16, fetch_and_2, oldval & i, oldval)
+ __atomic_subword_fetch (u16, fetch_xor_2, oldval ^ i, oldval)
+ __atomic_subword_fetch (u16, fetch_nand_2, ~(oldval & i), oldval)
++
+ __atomic_subword_fetch (u8, add_fetch_1, oldval + i, val)
+ __atomic_subword_fetch (u8, sub_fetch_1, oldval - i, val)
+ __atomic_subword_fetch (u8, or_fetch_1, oldval | i, val)
+ __atomic_subword_fetch (u8, and_fetch_1, oldval & i, val)
+ __atomic_subword_fetch (u8, xor_fetch_1, oldval ^ i, val)
+ __atomic_subword_fetch (u8, nand_fetch_1, ~(oldval & i), val)
++
+ __atomic_subword_fetch (u16, add_fetch_2, oldval + i, val)
+ __atomic_subword_fetch (u16, sub_fetch_2, oldval - i, val)
+ __atomic_subword_fetch (u16, or_fetch_2, oldval | i, val)
+ __atomic_subword_fetch (u16, and_fetch_2, oldval & i, val)
+ __atomic_subword_fetch (u16, xor_fetch_2, oldval ^ i, val)
+ __atomic_subword_fetch (u16, nand_fetch_2, ~(oldval & i), val)
++
++#define __sync_subword_fetch(type, funcname, expr, retval) \
++ __subword(type, \
++ type __sync_ ## funcname(type *ptr, type i), \
++ arch_atomic_read_barrier();, \
++ expr, \
++ arch_atomic_write_barrier(); return retval;)
++
++__sync_subword_fetch (u8, fetch_and_add_1, oldval + i, oldval)
++__sync_subword_fetch (u8, fetch_and_sub_1, oldval - i, oldval)
++__sync_subword_fetch (u8, fetch_and_or_1, oldval | i, oldval)
++__sync_subword_fetch (u8, fetch_and_and_1, oldval & i, oldval)
++__sync_subword_fetch (u8, fetch_and_xor_1, oldval ^ i, oldval)
++__sync_subword_fetch (u8, fetch_and_nand_1, ~(oldval & i), oldval)
++
++__sync_subword_fetch (u16, fetch_and_add_2, oldval + i, oldval)
++__sync_subword_fetch (u16, fetch_and_sub_2, oldval - i, oldval)
++__sync_subword_fetch (u16, fetch_and_or_2, oldval | i, oldval)
++__sync_subword_fetch (u16, fetch_and_and_2, oldval & i, oldval)
++__sync_subword_fetch (u16, fetch_and_xor_2, oldval ^ i, oldval)
++__sync_subword_fetch (u16, fetch_and_nand_2, ~(oldval & i), oldval)
++
++__sync_subword_fetch (u8, add_and_fetch_1, oldval + i, val)
++__sync_subword_fetch (u8, sub_and_fetch_1, oldval - i, val)
++__sync_subword_fetch (u8, or_and_fetch_1, oldval | i, val)
++__sync_subword_fetch (u8, and_and_fetch_1, oldval & i, val)
++__sync_subword_fetch (u8, xor_and_fetch_1, oldval ^ i, val)
++__sync_subword_fetch (u8, nand_and_fetch_1, ~(oldval & i), val)
++
++__sync_subword_fetch (u16, add_and_fetch_2, oldval + i, val)
++__sync_subword_fetch (u16, sub_and_fetch_2, oldval - i, val)
++__sync_subword_fetch (u16, or_and_fetch_2, oldval | i, val)
++__sync_subword_fetch (u16, and_and_fetch_2, oldval & i, val)
++__sync_subword_fetch (u16, xor_and_fetch_2, oldval ^ i, val)
++__sync_subword_fetch (u16, nand_and_fetch_2, ~(oldval & i), val)
++
+ #define __atomic_subword_lock(type, size) \
+- \
+-__atomic_subword(type, \
+- type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
+- pre_atomic_barrier(model);, \
+- nval, \
+- post_atomic_barrier(model); return oldval;)
++ __subword(type, \
++ type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
++ pre_atomic_barrier(model);, \
++ nval, \
++ post_atomic_barrier(model); return oldval;)
++
+ __atomic_subword_lock (u8, 1)
+ __atomic_subword_lock (u16, 2)
++
++#define __sync_subword_lock(type, size) \
++ __subword(type, \
++ type __sync_lock_test_and_set_##size(type* ptr, type nval), \
++ , \
++ nval, \
++ arch_atomic_acquire_barrier_value(oldval); return oldval;)
++
++__sync_subword_lock (u8, 1)
++__sync_subword_lock (u16, 2)
Index: gcc/DATESTAMP
===================================================================
--- a/src/gcc/DATESTAMP (revision
+++ b/src/gcc/DATESTAMP (revision
@@ -1 +1 @@
--20130508
-+20130517
+-20140107
++20140222
+Index: gcc/configure
+===================================================================
+--- a/src/gcc/configure (revision
++++ b/src/gcc/configure (revision
+@@ -24878,6 +24878,10 @@
+
+ # These two are used unconditionally by i386.[ch]; it is to be defined
+ # to 1 if the feature is present, 0 otherwise.
++ as_ix86_gotoff_in_data_opt=
++ if test x$gas = xyes; then
++ as_ix86_gotoff_in_data_opt="--32"
++ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for GOTOFF in data" >&5
+ $as_echo_n "checking assembler for GOTOFF in data... " >&6; }
+ if test "${gcc_cv_as_ix86_gotoff_in_data+set}" = set; then :
+@@ -24894,7 +24898,7 @@
+ nop
+ .data
+ .long .L0@GOTOFF' > conftest.s
+- if { ac_try='$gcc_cv_as $gcc_cv_as_flags -o conftest.o conftest.s >&5'
++ if { ac_try='$gcc_cv_as $gcc_cv_as_flags $as_ix86_gotoff_in_data_opt -o conftest.o conftest.s >&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
Index: gcc/ChangeLog
===================================================================
--- a/src/gcc/ChangeLog (revision
+++ b/src/gcc/ChangeLog (revision
-@@ -1,3 +1,68 @@
-+2013-05-14 Richard Biener <rguenther@suse.de>
+@@ -1,3 +1,272 @@
++2014-02-21 Uros Bizjak <ubizjak@gmail.com>
+
-+ PR gcov-profile/57269
+ Backport from mainline
-+ 2012-06-30 Nathan Sidwell <nathan@acm.org>
++ 2014-02-21 Jakub Jelinek <jakub@redhat.com>
++
++ * config/i386/i386.c (ix86_expand_vec_perm): Use V8SImode
++ mode for mask of V8SFmode permutation.
++
++ Backport from 4.8 branch
++ 2014-02-20 Jakub Jelinek <jakub@redhat.com>
+
-+ * coverage.c (coverage_init): Read counts file before writing
-+ graph header.
++ PR target/57896
++ * config/i386/i386.c (expand_vec_perm_interleave2): Don't call
++ gen_reg_rtx if d->testing_p.
++ (expand_vec_perm_pshufb2, expand_vec_perm_even_odd_1,
++ expand_vec_perm_broadcast_1): Return early if d->testing_p and
++ we will certainly return true.
+
-+2013-05-13 Uros Bizjak <ubizjak@gmail.com>
++2014-02-20 Terry Guo <terry.guo@arm.com>
+
-+ PR target/57264
+ Backport from mainline
-+ 2013-01-22 Jakub Jelinek <jakub@redhat.com>
++ 2014-02-08 Terry Guo <terry.guo@arm.com>
+
-+ PR target/55686
-+ * config/i386/i386.md (UNSPEC_STOS): New.
-+ (strset_singleop, *strsetdi_rex_1, *strsetsi_1, *strsethi_1,
-+ *strsetqi_1): Add UNSPEC_STOS.
++ * doc/invoke.texi: Document ARM -march=armv7e-m.
+
-+2013-05-10 Joey Ye <joey.ye@arm.com>
++2014-02-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ Backport from mainline
-+ 2012-11-29 Matthew Gretton-Dann <matthew.gretton-dann@linaro.org>
-+
-+ PR target/54974
-+ * config/arm/arm.md (thumb2_pool_range, pool_range): Add comment on
-+ Thumb pool ranges.
-+ (thumb1_extendhisi2): Reduce Thumb pool range.
-+ (arm_movdi): Likewise.
-+ (thumb1_movdi_insn): Likewise.
-+ (thumb1_movsi_insn): Likewise.
-+ (pic_load_addr_unified): Likewise.
-+ (pic_load_addr_32bit): Likewise.
-+ (pic_load_addr_thumb1): Likewise.
-+ (thumb1_movhf): Likewise.
-+ (arm_movsf_soft_insn): Likewise.
-+ (thumb1_movsf_soft_insn): Likewise.
-+ (movdf_soft_insn): Likewise.
-+ (thumb1_movdf_soft_insn): Likewise.
-+ * config/arm/neon.md (*neon_mov<mode>): Likewise.
-+ (*neon_mov<mode>): Likwise.
-+ * config/arm/thumb2.md: (*thumb2_movsi_insn): Likewise.
-+ (*thumb2_movhi_insn): Likewise.
-+ (*thumb2_extendqisi_v6): Likewise.
-+ (*thumb2_zero_extendqisi_v6): Likewise.
-+ (*thumb2_zero_extendqisi2_v6): Likewise.
-+ * config/arm/vfp.md: (*thumb2_movsi_vfp): Likewise.
-+ (*movdi_vfp): Likewise.
-+ (*movdi_vfp_cortexa8): Likewise.
-+ (*thumb2_movsf_vfp): Likewise.
-+ (*thumb2_movdf_vfp): Likewise.
-+
-+2013-05-10 Sebastian Huber <sebastian.huber@embedded-brains.de>
-+
-+ * config/arm/t-rtems-eabi: Remove mthumb/march=armv7 multilib.
-+ Add mthumb/march=armv7-a multilib.
-+ Add mthumb/march=armv7-r multilib.
-+ Add mthumb/march=armv7-a/mfpu=neon/mfloat-abi=hard multilib.
-+
-+2013-05-10 Ralf Corsépius <ralf.corsepius@rtems.org>
-+
-+ PR target/57237
-+ * config/v850/t-rtems: Add more multilibs.
-+
- 2013-05-07 Michael Meissner <meissner@linux.vnet.ibm.com>
-
- Backport from trunk
-@@ -20,7 +85,7 @@
- 2013-04-25 Marek Polacek <polacek@redhat.com>
-
- PR tree-optimization/57066
-- * builtins.c (fold_builtin_logb): Return +Inf for -Inf.
-+ * builtins.c (fold_builtin_logb): Return +Inf for -Inf.
-
- 2013-04-30 Uros Bizjak <ubizjak@gmail.com>
-
-Index: gcc/testsuite/gcc.target/i386/pr57264.c
-===================================================================
---- a/src/gcc/testsuite/gcc.target/i386/pr57264.c (revision
-+++ b/src/gcc/testsuite/gcc.target/i386/pr57264.c (revision
-@@ -0,0 +1,18 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O1 -mcld" } */
++ 2014-02-19 H.J. Lu <hongjiu.lu@intel.com>
++
++ PR target/60207
++ * config/i386/i386.c (construct_container): Remove TFmode check
++ for X86_64_INTEGER_CLASS.
++
++2014-02-18 Kai Tietz <ktietz@redhat.com>
++
++ Backport from mainline
++ PR target/60193
++ * config/i386/i386.c (ix86_expand_prologue): Use
++ rax register as displacement for restoring %r10, %rax.
++ Additional fix wrong offset for restoring both-registers.
++
++2014-02-18 Eric Botcazou <ebotcazou@adacore.com>
++
++ * ipa-prop.c (compute_complex_ancestor_jump_func): Replace overzealous
++ assertion with conditional return.
++
++2014-02-18 Jakub Jelinek <jakub@redhat.com>
++ Uros Bizjak <ubizjak@gmail.com>
++
++ PR driver/60233
++ * config/i386/driver-i386.c (host_detect_local_cpu): If
++ YMM state is not saved by the OS, also clear has_f16c. Move
++ CPUID 0x80000001 handling before YMM state saving checking.
++
++2014-02-13 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2014-02-13 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/sse.md (xop_vmfrcz<mode>2): Generate const0 in
++ operands[2], not operands[3].
++
++2014-02-12 H.J. Lu <hongjiu.lu@intel.com>
++
++ Backport from mainline
++ 2014-02-12 H.J. Lu <hongjiu.lu@intel.com>
++ Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/60151
++ * configure.ac (HAVE_AS_GOTOFF_IN_DATA): Pass --32 to GNU assembler.
++
++2014-02-05 James Greenhalgh <james.greenhalgh@arm.com>
++
++ * doc/invoke.texi: Fix thinko introduced by previous revision.
++
++2014-02-05 James Greenhalgh <james.greenhalgh@arm.com>
++
++ Backport from mainline.
++ 2014-02-05 James Greenhalgh <james.greenhalgh@arm.com>
++
++ PR target/59718
++ * doc/invoke.texi (-march): Clarify documentation for ARM.
++ (-mtune): Likewise.
++ (-mcpu): Likewise.
++
++2014-02-04 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2014-02-02 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/60017
++ * config/i386/i386.c (classify_argument): Fix handling of bit_offset
++ when calculating size of integer atomic types.
++
++2014-02-02 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2014-01-30 Jakub Jelinek <jakub@redhat.com>
++
++ * config/i386/f16cintrin.h (_cvtsh_ss): Avoid -Wnarrowing warning.
++
++2014-01-31 Richard Henderson <rth@redhat.com>
++
++ PR middle-end/60004
++ * tree-eh.c (lower_try_finally_switch): Delay lowering finally block
++ until after else_eh is processed.
++
++2014-01-29 Markus Trippelsdorf <markus@trippelsdorf.de>
++
++ Backport from mainline
++ 2012-12-13 Jakub Jelinek <jakub@redhat.com>
++
++ PR gcov-profile/55650
++ * coverage.c (coverage_obj_init): Return false if no functions
++ are being emitted.
++
++2014-01-25 Walter Lee <walt@tilera.com>
++
++ Backport from mainline
++ 2014-01-25 Walter Lee <walt@tilera.com>
++
++ * config/tilegx/sync.md (atomic_fetch_sub): Fix negation and
++ avoid clobbering a live register.
++
++2014-01-25 Walter Lee <walt@tilera.com>
++
++ Backport from mainline
++ 2014-01-25 Walter Lee <walt@tilera.com>
++
++ * config/tilegx/tilegx-c.c (tilegx_cpu_cpp_builtins):
++ Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_{1,2}.
++ * config/tilegx/tilepro-c.c (tilepro_cpu_cpp_builtins):
++ Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_{1,2,4,8}.
++
++2014-01-25 Walter Lee <walt@tilera.com>
++
++ Backport from mainline
++ 2014-01-25 Walter Lee <walt@tilera.com>
++
++ * config/tilegx/tilegx.c (tilegx_gen_bundles): Delete barrier
++ insns before bundling.
++ * config/tilegx/tilegx.md (tile_network_barrier): Update comment.
++
++2014-01-25 Walter Lee <walt@tilera.com>
++
++ Backport from mainline
++ 2014-01-25 Walter Lee <walt@tilera.com>
++
++ * config/tilegx/tilegx.c (tilegx_expand_builtin): Set
++ PREFETCH_SCHEDULE_BARRIER_P to true for prefetches.
++ * config/tilepro/tilepro.c (tilepro_expand_builtin): Ditto.
++
++2014-01-25 Walter Lee <walt@tilera.com>
++
++ Backport from mainline
++ 2014-01-25 Walter Lee <walt@tilera.com>
++
++ * config/tilepro/tilepro.md (ctzdi2): Use register_operand predicate.
++ (clzdi2): Ditto.
++ (ffsdi2): Ditto.
++
++2014-01-25 Walter Lee <walt@tilera.com>
++
++ Backport from mainline
++ 2014-01-25 Walter Lee <walt@tilera.com>
++
++ * config/tilegx/tilegx.c (tilegx_expand_to_rtl_hook): New.
++ (TARGET_EXPAND_TO_RTL_HOOK): Define.
++
++2014-01-22 Uros Bizjak <ubizjak@gmail.com>
++ Jakub Jelinek <jakub@redhat.com>
++
++ PR target/59880
++ * config/i386/i386.c (ix86_avoid_lea_for_addr): Return false
++ for SImode_address_operand operands. Return false
++ if operands[1] is a REG.
++
++2014-01-21 Andrey Belevantsev <abel@ispras.ru>
++
++ Backport from mainline
++ 2013-12-23 Andrey Belevantsev <abel@ispras.ru>
++
++ PR rtl-optimization/57422
++ * sel-sched.c (mark_unavailable_hard_regs): Fix typo when calling
++ add_to_hard_reg_set.
++
++2014-01-19 John David Anglin <danglin@gcc.gnu.org>
++
++ * config/pa/pa.c (pa_attr_length_millicode_call): Correct length of
++ long non-pic millicode calls.
++
++2014-01-17 John David Anglin <danglin@gcc.gnu.org>
++
++ * config/pa/pa.c (pa_attr_length_indirect_call): Don't output a short
++ call to $$dyncall when TARGET_LONG_CALLS is true.
++
++2014-01-17 Charles Baylis <charles.baylis@linaro.org>
++
++ Backport from mainline
++ 2013-12-19 Charles Baylis <charles.baylis@linaro.org>
++
++ PR target/59142
++ * config/arm/arm-ldmstm.ml: Use low_register_operand for Thumb
++ patterns.
++ * config/arm/ldmstm.md: Regenerate.
++
++ 2013-12-19 Charles Baylis <charles.baylis@linaro.org>
++
++ PR target/59142
++ * config/arm/predicates.md (arm_hard_general_register_operand):
++ New predicate.
++ (arm_hard_register_operand): Remove.
++ * config/arm/arm-ldmstm.ml: Use arm_hard_general_register_operand
++ for all patterns.
++ * config/arm/ldmstm.md: Regenerate.
++
++2014-01-16 Jakub Jelinek <jakub@redhat.com>
++
++ PR target/59839
++ * config/i386/i386.c (ix86_expand_builtin): If target doesn't
++ satisfy operand 0 predicate for gathers, use a new pseudo as
++ subtarget.
++
++2014-01-16 Richard Henderson <rth@redhat.com>
++
++ PR debug/54694
++ * reginfo.c (global_regs_decl): Globalize.
++ * rtl.h (global_regs_decl): Declare.
++ * ira.c (do_reload): Diagnose frame_pointer_needed and it
++ reserved via global_regs.
++
++2014-01-16 Marek Polacek <polacek@redhat.com>
++
++ Backport from mainline
++ 2014-01-16 Marek Polacek <polacek@redhat.com>
++
++ PR middle-end/59827
++ * gimple-low.c (gimple_check_call_args): Don't use DECL_ARG_TYPE if
++ it is error_mark_node.
++
++2014-01-14 Uros Bizjak <ubizjak@gmail.com>
++
++ Revert:
++ 2014-01-08 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/i386.c (ix86_data_alignment): Calculate max_align
++ from prefetch_block tune setting.
++
++2014-01-10 Richard Earnshaw <rearnsha@arm.com>
++
++ PR rtl-optimization/54300
++ * regcprop.c (copyprop_hardreg_forward_1): Ensure any unused
++ outputs in a single-set are killed from the value chains.
++
++2014-01-10 Huacai Chen <chenhc@lemote.com>
++
++ * config/mips/driver-native.c (host_detect_local_cpu): Handle new
++ kernel strings for Loongson-2E/2F/3A.
++
++2014-01-08 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2014-01-05 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/i386.c (ix86_data_alignment): Calculate max_align
++ from prefetch_block tune setting.
++ (nocona_cost): Correct size of prefetch block to 64.
++
+ 2013-12-28 Eric Botcazou <ebotcazou@adacore.com>
+
+ * doc/invoke.texi (output file options): Add missing markers.
+Index: gcc/testsuite/gcc.target/arm/pr54300.C
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/arm/pr54300.C (revision
++++ b/src/gcc/testsuite/gcc.target/arm/pr54300.C (revision
+@@ -0,0 +1,61 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++#include <stdlib.h>
++
++struct __attribute__ ((aligned(8))) _v16u8_ {
++ uint8x16_t val;
++ _v16u8_( const int16x8_t &src) { val = vreinterpretq_u8_s16(src); }
++ operator int16x8_t () const { return vreinterpretq_s16_u8(val); }
++};
++typedef struct _v16u8_ v16u8;
+
-+void test (int x, int **pp)
++struct __attribute__ ((aligned(4))) _v8u8_ {
++ uint8x8_t val;
++ _v8u8_( const uint8x8_t &src) { val = src; }
++ operator int16x4_t () const { return vreinterpret_s16_u8(val); }
++};
++typedef struct _v8u8_ v8u8;
++
++typedef v16u8 v8i16;
++typedef int32x4_t v4i32;
++typedef const short cv1i16;
++typedef const unsigned char cv1u8;
++typedef const v8i16 cv8i16;
++
++static inline __attribute__((always_inline)) v8u8 zero_64(){ return vdup_n_u8( 0 ); }
++
++static inline __attribute__((always_inline)) v8i16 loadlo_8i16( cv8i16* p ){
++ return vcombine_s16( vld1_s16( (cv1i16 *)p ), zero_64() );
++}
++static inline __attribute__((always_inline)) v8i16 _loadlo_8i16( cv8i16* p, int offset ){
++ return loadlo_8i16( (cv8i16*)(&((cv1u8*)p)[offset]) );
++}
++
++void __attribute__((noinline))
++test(unsigned short *_Inp, int32_t *_Out,
++ unsigned int s1v, unsigned int dv0,
++ unsigned int smask_v)
+{
-+ while (x)
++ int32x4_t c = vdupq_n_s32(0);
++
++ for(unsigned int sv=0 ; sv!=dv0 ; sv=(sv+s1v)&smask_v )
+ {
-+ int *ip = *pp;
-+ int *op = *pp;
-+ while (*ip)
-+ {
-+ int v = *ip++;
-+ *op++ = v + 1;
-+ }
++ int32x4_t s;
++ s = vmovl_s16( vget_low_s16( _loadlo_8i16( (cv8i16*) _Inp, sv ) ) );
++ c = vaddq_s32( c, s );
+ }
++ vst1q_s32( _Out, c );
+}
+
-+/* { dg-final { scan-assembler-not "stosl" } } */
-Index: gcc/testsuite/ChangeLog
++main()
++{
++ unsigned short a[4] = {1, 2, 3, 4};
++ int32_t b[4] = {0, 0, 0, 0};
++ test(a, b, 1, 1, ~0);
++ if (b[0] != 1 || b[1] != 2 || b[2] != 3 || b[3] != 4)
++ abort();
++}
+Index: gcc/testsuite/gcc.target/i386/pr54694.c
===================================================================
---- a/src/gcc/testsuite/ChangeLog (revision
-+++ b/src/gcc/testsuite/ChangeLog (revision
-@@ -1,3 +1,8 @@
-+2013-05-13 Uros Bizjak <ubizjak@gmail.com>
+--- a/src/gcc/testsuite/gcc.target/i386/pr54694.c (revision
++++ b/src/gcc/testsuite/gcc.target/i386/pr54694.c (revision
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-options "-O" } */
++
++register void *hfp __asm__("%ebp"); /* { dg-message "note: for" } */
+
-+ PR target/57264
-+ * gcc.target/i386/pr57264.c: New test.
++extern void g(void *);
+
- 2013-05-07 Michael Meissner <meissner@linux.vnet.ibm.com>
++void f(int x) /* { dg-error "frame pointer required" } */
++{
++ g(__builtin_alloca(x));
++}
+Index: gcc/testsuite/gcc.target/i386/pr9771-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/pr9771-1.c (revision
++++ b/src/gcc/testsuite/gcc.target/i386/pr9771-1.c (revision
+@@ -45,7 +45,17 @@
+ exit(0);
+ }
- Backport from trunk
-Index: gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr8.C
+-int main()
++/* main usually performs dynamic realignment of the stack in case
++ _start would fail to properly align the stack, but for dynamic
++ stack realignment we need frame pointer which is incompatible
++ with -ffixed-ebp and the global register var. So, cheat here
++ and hide from the compiler that main is really main. */
++#define ASMNAME(cname) ASMNAME2 (__USER_LABEL_PREFIX__, cname)
++#define ASMNAME2(prefix, cname) STRING (prefix) cname
++#define STRING(x) #x
++int real_main() __asm (ASMNAME ("main"));
++
++int real_main()
+ {
+ test();
+ return 0;
+Index: gcc/testsuite/gcc.target/i386/pr59839.c
===================================================================
---- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr8.C (revision
-+++ b/src/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr8.C (revision
-@@ -0,0 +1,54 @@
-+// PR c++/57047
-+// { dg-require-effective-target c++11 }
+--- a/src/gcc/testsuite/gcc.target/i386/pr59839.c (revision
++++ b/src/gcc/testsuite/gcc.target/i386/pr59839.c (revision
+@@ -0,0 +1,12 @@
++/* PR target/59839 */
++/* { dg-do compile } */
++/* { dg-options "-O0 -mavx2" } */
+
-+template <typename>
-+struct A;
-+template <typename T>
-+struct A <T &>
++#include <x86intrin.h>
++
++void
++test (const float *x)
+{
-+ typedef T type;
-+};
-+template <typename T>
-+constexpr T && foo (typename A <T>::type & __t) noexcept
++ __m256i i = _mm256_set1_epi32 (1);
++ __m256 d = _mm256_i32gather_ps (x, i, 1);
++}
+Index: gcc/testsuite/gcc.target/i386/nest-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/nest-1.c (revision
++++ b/src/gcc/testsuite/gcc.target/i386/nest-1.c (revision
+@@ -0,0 +1,14 @@
++/* { dg-do compile { target llp64 } } */
++/* { dg-options "" } */
++
++void foo (int i)
+{
-+ return static_cast <T &&>(__t);
++ void nested (void)
++ {
++ char arr[(1U << 31) + 4U];
++ arr[i] = 0;
++ }
++
++ nested ();
+}
-+template <class T1, class T2>
-+struct B
++
+Index: gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90 (revision
++++ b/src/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90 (revision
+@@ -0,0 +1,36 @@
++! { dg-do compile }
++!
++! PR fortran/58007
++! Unresolved fiixup while loading a module.
++!
++! This tests that the specification expression A%MAX_DEGREE in module BSR is
++! correctly loaded and resolved in program MAIN.
++!
++! Original testcase from Daniel Shapiro <shapero@uw.edu>
++
++module matrix
++ type :: sparse_matrix
++ integer :: max_degree
++ end type
++end module
++
++module bsr
++ use matrix
++
++ type, extends(sparse_matrix) :: bsr_matrix
++ end type
++
++ integer :: i1
++ integer :: i2
++ integer :: i3
++contains
++ function get_neighbors (A)
++ type(bsr_matrix), intent(in) :: A
++ integer :: get_neighbors(A%max_degree)
++ end function
++end module
++
++program main
++ use matrix
++ use bsr
++end
+Index: gcc/testsuite/gfortran.dg/init_flag_12.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/init_flag_12.f90 (revision
++++ b/src/gcc/testsuite/gfortran.dg/init_flag_12.f90 (revision
+@@ -0,0 +1,13 @@
++! { dg-do compile }
++! { dg-options "-fno-automatic -finit-local-zero" }
++!
++! PR 55907: [4.7/4.8/4.9 Regression] ICE with -fno-automatic -finit-local-zero
++!
++! Contributed by J.R. Garcia <garcia.espinosa.jr@gmail.com>
++
++subroutine cchaine (i)
++ implicit none
++ integer :: i
++ character(len=i) :: chaine
++ write(*,*) chaine
++end subroutine
+Index: gcc/testsuite/gfortran.dg/round_3.f08
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/round_3.f08 (revision
++++ b/src/gcc/testsuite/gfortran.dg/round_3.f08 (revision
+@@ -16,19 +16,44 @@
+ call checkfmt("(RU,1P,G6.0E2)", 2.0, "2.E+00")
+ call checkfmt("(RU,1P,G10.4E2)", 2.3456e5, "2.3456E+05")
+
+- call checkfmt("(RU,F2.0)", 0.09, "1.") ! 0.
++ call checkfmt("(RC,G10.2)", 99.5, " 0.10E+03") ! pr59774
++ call checkfmt("(RC,G10.2)", 995., " 0.10E+04") ! pr59774
++ call checkfmt("(RC,G10.3)", 999.5, " 0.100E+04") ! pr59774
++ call checkfmt("(RC,G10.3)", 9995., " 0.100E+05") ! pr59774
++ call checkfmt("(RU,G10.2)", .099, " 0.10 ") ! pr59774
++ call checkfmt("(RC,G10.1)", .095, " 0.1 ") ! pr59774
++ call checkfmt("(RU,G10.3)", .0999, " 0.100 ") ! pr59774
++ call checkfmt("(RC,G10.2)", .0995, " 0.10 ") ! pr59774
++
++ call checkfmt("(RU,G9.3)", 891.1, " 892.") ! pr59836
++ call checkfmt("(RD,G9.3)", -891.1, "-892.") ! pr59836
++
++ call checkfmt("(RU,F6.4)", 0.00006, "0.0001")! 0.
++ call checkfmt("(RU,F5.3)", 0.0007, "0.001") ! 0.
++ call checkfmt("(RU,F4.2)", 0.008, "0.01") ! 0.
++ call checkfmt("(RU,F3.1)", 0.09, "0.1") ! 0.
++
++ call checkfmt("(RU,F2.0)", 0.09, "1.") ! 0.
+ call checkfmt("(RD,F3.0)", -0.09, "-1.") ! -0.
+- call checkfmt("(RU,F2.0)", 2.0, "2.") ! 3.
+- call checkfmt("(RD,F3.0)", -2.0, "-2.") ! -3.
+- call checkfmt("(RU,F6.4)", 2.0, "2.0000") ! 2.0001
+- call checkfmt("(RD,F7.4)", -2.0, "-2.0000") ! -2.0001
+- call checkfmt("(RU,1P,E6.0E2)", 2.0, "2.E+00") ! 3.E+00
++ call checkfmt("(RU,F2.0)", 0.9, "1.") ! pr59836
++ call checkfmt("(RC,F2.0)", 0.4, "0.") ! pr59836
++ call checkfmt("(RC,F2.0)", 0.5, "1.") ! pr59836
++ call checkfmt("(RC,F2.0)", 0.6, "1.") ! pr59836
++ call checkfmt("(RD,F3.0)", -0.9, "-1.") ! pr59836
++ call checkfmt("(RC,F3.0)", -0.4, "-0.") ! pr59836
++ call checkfmt("(RC,F3.0)", -0.5, "-1.") ! pr59836
++ call checkfmt("(RC,F3.0)", -0.6, "-1.") ! pr59836
++ call checkfmt("(RU,F2.0)", 2.0, "2.") ! 3.
++ call checkfmt("(RD,F3.0)", -2.0, "-2.") ! -3.
++ call checkfmt("(RU,F6.4)", 2.0, "2.0000") ! 2.0001
++ call checkfmt("(RD,F7.4)", -2.0, "-2.0000") ! -2.0001
++ call checkfmt("(RU,1P,E6.0E2)", 2.0, "2.E+00") ! 3.E+00
+ call checkfmt("(RD,1P,E7.0E2)", -2.0, "-2.E+00") ! -3.E+00
+- call checkfmt("(RU,1P,E7.1E2)", 2.5, "2.5E+00") ! 2.6E+00
++ call checkfmt("(RU,1P,E7.1E2)", 2.5, "2.5E+00") ! 2.6E+00
+ call checkfmt("(RD,1P,E8.1E2)", -2.5, "-2.5E+00") ! -2.6E+00
+ call checkfmt("(RU,1P,E10.4E2)", 2.5, "2.5000E+00") ! 2.5001E+00
+ call checkfmt("(RD,1P,E11.4E2)", -2.5, "-2.5000E+00") ! -2.5001E+00
+- call checkfmt("(RU,1P,G6.0E2)", 2.0, "2.E+00") ! 3.E+00
++ call checkfmt("(RU,1P,G6.0E2)", 2.0, "2.E+00") ! 3.E+00
+ call checkfmt("(RD,1P,G7.0E2)", -2.0, "-2.E+00") ! -3.E+00
+ call checkfmt("(RU,1P,G10.4E2)", 2.3456e5, "2.3456E+05") ! 2.3457E+05
+ call checkfmt("(RD,1P,G11.4E2)", -2.3456e5, "-2.3456E+05") ! -2.3457E+05
+Index: gcc/testsuite/gfortran.dg/typebound_proc_26.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/typebound_proc_26.f90 (revision
++++ b/src/gcc/testsuite/gfortran.dg/typebound_proc_26.f90 (revision
+@@ -0,0 +1,38 @@
++! { dg-do compile }
++!
++! PR 59941: [4.7 Regression] [OOP] ICE with polymorphic types
++!
++! Contributed by Jürgen Reuter <juergen.reuter@desy.de>
++
++module tao_random_numbers
++ integer, dimension(10), private :: s_buffer
++ integer, private :: s_buffer_end = size (s_buffer)
++end module
++
++
++module beam_structures
++
++ private
++
++ type :: beam_structure_t
++ integer, dimension(:), allocatable :: smatrix
++ contains
++ procedure :: get_smatrix
++ end type
++
++contains
++
++ function get_smatrix (beam_structure) result (matrix)
++ class(beam_structure_t), intent(in) :: beam_structure
++ integer, dimension (size (beam_structure%smatrix)) :: matrix
++ end function
++
++end module
++
++
++program p
++ use tao_random_numbers
++ use beam_structures
++end
++
++! { dg-final { cleanup-modules "tao_random_numbers beam_structures" } }
+Index: gcc/testsuite/gfortran.dg/default_initialization_7.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/default_initialization_7.f90 (revision
++++ b/src/gcc/testsuite/gfortran.dg/default_initialization_7.f90 (revision
+@@ -0,0 +1,22 @@
++! { dg-do compile }
++!
++! PR fortran/57033
++! ICE on a structure constructor of an extended derived type whose parent
++! type last component has a default initializer
++!
++! Contributed by Tilo Schwarz <tilo@tilo-schwarz.de>
++
++program ice
++
++type m
++ integer i
++ logical :: f = .false.
++end type m
++
++type, extends(m) :: me
++end type me
++
++type(me) meo
++
++meo = me(1) ! ICE
++end program ice
+Index: gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90 (revision
++++ b/src/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90 (revision
+@@ -0,0 +1,44 @@
++! { dg-do compile }
++!
++! PR fortran/58007
++! Unresolved fixup while loading a module.
++!
++! This tests that the specification expression A%MAX_DEGREE in module BSR is
++! correctly loaded and resolved in program MAIN.
++!
++! Original testcase from Daniel Shapiro <shapero@uw.edu>
++! Reduced by Tobias Burnus <burnus@net-b.de> and Janus Weil <janus@gcc.gnu.org>
++
++module matrix
++ type :: sparse_matrix
++ integer :: max_degree
++ end type
++contains
++ subroutine init_interface (A)
++ class(sparse_matrix), intent(in) :: A
++ end subroutine
++ real function get_value_interface()
++ end function
++end module
++
++module ellpack
++ use matrix
++end module
++
++module bsr
++ use matrix
++ type, extends(sparse_matrix) :: bsr_matrix
++ contains
++ procedure :: get_neighbors
++ end type
++contains
++ function get_neighbors (A)
++ class(bsr_matrix), intent(in) :: A
++ integer :: get_neighbors(A%max_degree)
++ end function
++end module
++
++program main
++ use ellpack
++ use bsr
++end
+Index: gcc/testsuite/gfortran.dg/ichar_3.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/ichar_3.f90 (revision
++++ b/src/gcc/testsuite/gfortran.dg/ichar_3.f90 (revision
+@@ -0,0 +1,13 @@
++! { dg-do compile }
++!
++! PR fortran/59599
++! The call to ichar was triggering an ICE.
++!
++! Original testcase from Fran Martinez Fadrique <fmartinez@gmv.com>
++
++character(1) cpk(2)
++integer res(2)
++cpk = 'a'
++res = ichar( cpk, kind=1 )
++print *, ichar( cpk, kind=1 )
++end
+Index: gcc/testsuite/gfortran.dg/fmt_g_1.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/fmt_g_1.f90 (revision
++++ b/src/gcc/testsuite/gfortran.dg/fmt_g_1.f90 (revision
+@@ -0,0 +1,11 @@
++! { dg-do run }
++! PR59771 Cleanup handling of Gw.0 and Gw.0Ee format
++! Test case prepared by Dominique d'Humieres <dominiq@lps.ens.fr>
++ PROGRAM FOO
++ character(len=60) :: buffer, buffer1
++
++ write (buffer ,'(6(1X,1PG9.0e2))') 0.0, 0.04, 0.06, 0.4, 0.6, 243.0
++ write (buffer1,'(6(1X,1PE9.0e2))') 0.0, 0.04, 0.06, 0.4, 0.6, 243.0
++
++ if (buffer /= buffer1) call abort
++ end
+Index: gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90 (revision
++++ b/src/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90 (revision
+@@ -0,0 +1,39 @@
++! { dg-do run }
++!
++! PR fortran/59906
++!
++! Contributed by H Anlauf <anlauf@gmx.de>
++!
++! Failed generate character scalar for scalarized loop for elemantal call.
++!
++program x
++ implicit none
++ call y('bbb')
++contains
++
++ subroutine y(str)
++ character(len=*), intent(in) :: str
++ character(len=len_trim(str)) :: str_aux
++ character(len=3) :: str3 = 'abc'
++
++ str_aux = str
++
++ ! Compiled but did not give correct result
++ if (any (str_cmp((/'aaa','bbb'/), str) .neqv. [.FALSE.,.TRUE.])) call abort
++
++ ! Did not compile
++ if (any (str_cmp((/'bbb', 'aaa'/), str_aux) .neqv. [.TRUE.,.FALSE.])) call abort
++
++ ! Verify patch
++ if (any (str_cmp((/'bbb', 'aaa'/), str3) .neqv. [.FALSE.,.FALSE.])) call abort
++ if (any (str_cmp((/'bbb', 'aaa'/), 'aaa') .neqv. [.FALSE.,.TRUE.])) call abort
++
++ end subroutine y
++
++ elemental logical function str_cmp(str1, str2)
++ character(len=*), intent(in) :: str1
++ character(len=*), intent(in) :: str2
++ str_cmp = (str1 == str2)
++ end function str_cmp
++
++end program x
+Index: gcc/testsuite/gcc.c-torture/execute/pr60017.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/execute/pr60017.c (revision
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr60017.c (revision
+@@ -0,0 +1,33 @@
++/* PR target/60017 */
++
++extern void abort (void);
++
++struct S0
++{
++ short m0;
++ short m1;
++};
++
++struct S1
+{
-+ T1 t1;
-+ T2 t2;
-+ template <class U>
-+ constexpr B (U && __x, const T2 & __y) : t1 (foo <U> (__x)), t2 (__y) {}
++ unsigned m0:1;
++ char m1[2][2];
++ struct S0 m2[2];
+};
-+static inline constexpr bool
-+fn1 (const char c)
++
++struct S1 x = { 1, {{2, 3}, {4, 5}}, {{6, 7}, {8, 9}} };
++
++struct S1 func (void)
+{
-+ return ('0' <= c) && (c <= '9');
++ return x;
+}
-+static inline constexpr bool
-+fn2 (const char c)
++
++int main (void)
++{
++ struct S1 ret = func ();
++
++ if (ret.m2[1].m1 != 9)
++ abort ();
++
++ return 0;
++}
+Index: gcc/testsuite/gnat.dg/opt32.adb
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/opt32.adb (revision
++++ b/src/gcc/testsuite/gnat.dg/opt32.adb (revision
+@@ -0,0 +1,37 @@
++-- { dg-do compile }
++-- { dg-options "-O2" }
++
++with Ada.Containers; use Ada.Containers;
++with Ada.Containers.Vectors;
++
++function Opt32 return Natural is
++
++ package My_Vectors
++ is new Vectors (Index_Type => Natural, Element_Type => Integer);
++ use My_Vectors;
++
++ V : Vector;
++
++ function Sign_Changes return Natural is
++ Cur : Cursor := To_Cursor (V, 0);
++ R : Natural := 0;
++ Negative : Boolean;
++ begin
++ Negative := Element (Cur) < 0;
++
++ loop
++ Cur := Next (Cur);
++ exit when R > 100;
++
++ if (Element (Cur) < 0) /= Negative then
++ Negative := not Negative;
++ R := R + 1;
++ end if;
++ end loop;
++
++ return R;
++ end;
++
++begin
++ return Sign_Changes;
++end;
+Index: gcc/testsuite/gcc.dg/pr59827.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/pr59827.c (revision
++++ b/src/gcc/testsuite/gcc.dg/pr59827.c (revision
+@@ -0,0 +1,15 @@
++/* PR middle-end/59827 */
++/* { dg-do compile } */
++
++int
++foo (int p[2][]) /* { dg-error "array type has incomplete element type" } */
+{
-+ return (('A' <= c) && (c <= 'Z')) || (('a' <= c) && (c <= 'z'));
++ return p[0][0];
+}
-+static constexpr bool
-+fn3 (const char *const x)
++
++void
++bar (void)
+{
-+ return (x[1] == '\0' && x[0] == ']') ? true : (!fn1 (x[0])) ? false : fn3 (&x[1]);
++ int p[2][1];
++ foo (p); /* { dg-error "type of formal parameter 1 is incomplete" } */
+}
-+static constexpr bool
-+fn4 (const char *const x)
+Index: gcc/testsuite/ChangeLog
+===================================================================
+--- a/src/gcc/testsuite/ChangeLog (revision
++++ b/src/gcc/testsuite/ChangeLog (revision
+@@ -1,3 +1,96 @@
++2014-02-22 Mikael Morin <mikael@gcc.gnu.org>
++
++ PR fortran/59599
++ * gfortran.dg/ichar_3.f90: New test.
++
++2014-02-20 Janus Weil <janus@gcc.gnu.org>
++
++ Backport from mainline
++ 2014-02-17 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/55907
++ * gfortran.dg/init_flag_12.f90: New.
++
++2014-02-18 Kai Tietz <ktietz@redhat.com>
++
++ PR target/60193
++ * gcc.target/i386/nest-1.c: New testcase.
++
++2014-02-18 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gnat.dg/opt32.adb: New test.
++
++2014-02-15 Jerry DeLisle <jvdelisle@gcc.gnu>
++ Dominique d'Humieres <dominiq@lps.ens.fr>
++
++ Backport from mainline
++ PR libfortran/59771
++ PR libfortran/59774
++ PR libfortran/59836
++ * gfortran.dg/fmt_g_1.f90: New test.
++ * gfortran.dg/round_3.f08: New cases added.
++
++2014-02-08 Mikael Morin <mikael@gcc.gnu.org>
++
++ PR fortran/57033
++ * gfortran.dg/default_initialization_7.f90: New test.
++
++2014-02-08 Paul Thomas <pault@gcc.gnu.org>
++
++ PR fortran/59906
++ * gfortran.dg/elemental_subroutine_9.f90 : New test
++
++2014-02-04 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2014-02-02 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/60017
++ * gcc.c-torture/execute/pr60017.c: New test.
++
++2014-02-03 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/59941
++ * gfortran.dg/typebound_proc_26.f90: New.
++
++2014-01-29 Markus Trippelsdorf <markus@trippelsdorf.de>
++
++ Backport from mainline
++ 2012-12-13 Jakub Jelinek <jakub@redhat.com>
++
++ PR gcov-profile/55650
++ * g++.dg/other/pr55650.C: New test.
++ * g++.dg/other/pr55650.cc: New file.
++
++2014-01-26 Mikael Morin <mikael@gcc.gnu.org>
++
++ PR fortran/58007
++ * gfortran.dg/unresolved_fixup_1.f90: New test.
++ * gfortran.dg/unresolved_fixup_2.f90: New test.
++
++2014-01-16 Jakub Jelinek <jakub@redhat.com>
++
++ PR target/59839
++ * gcc.target/i386/pr59839.c: New test.
++
++ PR debug/54694
++ * gcc.target/i386/pr9771-1.c (main): Rename to...
++ (real_main): ... this. Add __asm name "main".
++ (ASMNAME, ASMNAME2, STRING): Define.
++
++2014-01-16 Marek Polacek <polacek@redhat.com>
++
++ Backport from mainline
++ 2014-01-16 Marek Polacek <polacek@redhat.com>
++
++ PR middle-end/59827
++ * gcc.dg/pr59827.c: New test.
++
++2014-01-10 Richard Earnshaw <rearnsha@arm.com>
++
++ PR rtl-optimization/54300
++ * gcc.target/arm/pr54300.C: New test.
++
+ 2014-01-03 Joseph Myers <joseph@codesourcery.com>
+
+ * gcc.target/powerpc/rs6000-ldouble-3.c: New test.
+Index: gcc/testsuite/g++.dg/ext/attrib48.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/ext/attrib48.C (revision
++++ b/src/gcc/testsuite/g++.dg/ext/attrib48.C (revision
+@@ -0,0 +1,6 @@
++// PR c++/54652
++
++typedef unsigned L __attribute__ ((aligned));
++typedef unsigned L __attribute__ ((aligned));
++
++L l;
+Index: gcc/testsuite/g++.dg/other/pr55650.cc
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/other/pr55650.cc (revision
++++ b/src/gcc/testsuite/g++.dg/other/pr55650.cc (revision
+@@ -0,0 +1,4 @@
++int
++main ()
+{
-+ return (x[0] == '\0') ? fn3 (&x[1]) : fn4 (&x[1]);
+}
-+static inline constexpr bool
-+fn5 (const char *const x)
+Index: gcc/testsuite/g++.dg/other/pr55650.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/other/pr55650.C (revision
++++ b/src/gcc/testsuite/g++.dg/other/pr55650.C (revision
+@@ -0,0 +1,21 @@
++// PR gcov-profile/55650
++// { dg-do link }
++// { dg-options "-O2 -fprofile-generate" }
++// { dg-additional-sources "pr55650.cc" }
++
++struct A
++{
++ virtual void foo ();
++};
++
++struct B : public A
++{
++ B ();
++ void foo () {}
++};
++
++inline A *
++bar ()
+{
-+ return fn2 (x[0]) ? fn4 (x) : false;
++ return new B;
+}
-+struct C final
+Index: gcc/testsuite/g++.dg/tm/pr60004.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/tm/pr60004.C (revision
++++ b/src/gcc/testsuite/g++.dg/tm/pr60004.C (revision
+@@ -0,0 +1,10 @@
++// { dg-do compile }
++// { dg-options "-fgnu-tm" }
++
++int a;
++int f() {
++ __transaction_atomic {
++ if (a == 5)
++ return 1;
++ }
++}
+Index: gcc/testsuite/g++.dg/cpp0x/variadic149.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic149.C (revision
++++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic149.C (revision
+@@ -0,0 +1,11 @@
++// PR c++/60248
++// { dg-options "-std=c++11 -g -fabi-version=2" }
++
++template<int...> struct A {};
++
++template<> struct A<0>
+{
-+ constexpr C (const char *const t1) : c (fn5 (t1) ? 199 : 69) {}
-+ unsigned c;
++ typedef enum { e } B;
+};
-+B <C, C> p ("a", "b");
++
++A<0> a;
+Index: gcc/testsuite/g++.dg/cpp0x/noexcept22.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/noexcept22.C (revision
++++ b/src/gcc/testsuite/g++.dg/cpp0x/noexcept22.C (revision
+@@ -0,0 +1,21 @@
++// PR c++/60046
++// { dg-require-effective-target c++11 }
++
++constexpr bool foo () { return noexcept (true); }
++template <typename T>
++struct V
++{
++ void bar (V &) noexcept (foo ()) {}
++};
++template <typename T>
++struct W : public V <int>
++{
++ void bar (W &x) { V <int>::bar (x); }
++};
++
++int
++main ()
++{
++ W <int> a, b;
++ a.bar (b);
++}
+Index: gcc/testsuite/g++.dg/cpp0x/initlist78.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/initlist78.C (revision
++++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist78.C (revision
+@@ -0,0 +1,12 @@
++// PR c++/58639
++// { dg-require-effective-target c++11 }
++
++struct node {
++ node &parent;
++};
++
++struct vector {
++ node n;
++};
++
++vector v({}); // { dg-error "" }
+Index: gcc/testsuite/g++.dg/template/partial15.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/template/partial15.C (revision
++++ b/src/gcc/testsuite/g++.dg/template/partial15.C (revision
+@@ -0,0 +1,19 @@
++// PR c++/57043
++// { dg-do link }
++
++template<typename D> struct complex { };
++
++template<typename Tp>
++complex<Tp>
++pow(const complex<Tp>& x, const complex<Tp>& y) { return complex<Tp>(); }
++
++template<typename T, typename U>
++struct promote_2 { typedef T type; };
++
++template<typename Tp, typename Up>
++complex<typename promote_2<Tp, Up>::type>
++pow(const complex<Tp>& x, const complex<Up>& y);
++
++complex<double> (*powcc)(const complex<double>&, const complex<double>&) = pow;
++
++int main() {}
+Index: gcc/cp/decl.c
+===================================================================
+--- a/src/gcc/cp/decl.c (revision
++++ b/src/gcc/cp/decl.c (revision
+@@ -1815,9 +1815,9 @@
+ /* Merge the data types specified in the two decls. */
+ newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
+
+- /* If merge_types produces a non-typedef type, just use the old type. */
+- if (TREE_CODE (newdecl) == TYPE_DECL
+- && newtype == DECL_ORIGINAL_TYPE (newdecl))
++ /* For typedefs use the old type, as the new type's DECL_NAME points
++ at newdecl, which will be ggc_freed. */
++ if (TREE_CODE (newdecl) == TYPE_DECL)
+ newtype = oldtype;
+
+ if (TREE_CODE (newdecl) == VAR_DECL)
Index: gcc/cp/ChangeLog
===================================================================
--- a/src/gcc/cp/ChangeLog (revision
+++ b/src/gcc/cp/ChangeLog (revision
-@@ -1,3 +1,8 @@
-+2013-05-09 Jason Merrill <jason@redhat.com>
+@@ -1,3 +1,37 @@
++2014-02-21 Jason Merrill <jason@redhat.com>
++
++ PR c++/60248
++ * mangle.c (mangle_decl): Don't make an alias for a TYPE_DECL.
++
++2014-02-20 Kai Tietz <ktietz@redhat.com>
++
++ PR c++/58873
++ * parser.c (cp_parser_functional_cast): Treat NULL_TREE
++ valued type argument as error_mark_node.
++
++ PR c++/58835
++ * semantics.c (finish_fname): Handle error_mark_node.
++
++2014-02-19 Jason Merrill <jason@redhat.com>
++
++ PR c++/60046
++ * pt.c (maybe_instantiate_noexcept): Don't instantiate exception
++ spec from template context.
+
-+ PR c++/57047
-+ * semantics.c (cxx_fold_indirect_ref): Fix thinko.
++2014-01-31 Jason Merrill <jason@redhat.com>
+
- 2013-04-21 Eric Botcazou <ebotcazou@adacore.com>
++ PR c++/57043
++ * pt.c (fn_type_unification): Don't do DEDUCE_EXACT check
++ during partial ordering.
++
++2014-01-27 Jason Merrill <jason@redhat.com>
++
++ PR c++/54652
++ * decl.c (duplicate_decls): Always use oldtype for TYPE_DECL.
++
++ PR c++/58639
++ * call.c (build_aggr_conv): Reject value-initialization of reference.
++
+ 2013-10-25 Tom de Vries <tom@codesourcery.com>
+
+ PR c++/58282
+Index: gcc/cp/pt.c
+===================================================================
+--- a/src/gcc/cp/pt.c (revision
++++ b/src/gcc/cp/pt.c (revision
+@@ -14713,8 +14713,11 @@
+
+ /* If we're looking for an exact match, check that what we got
+ is indeed an exact match. It might not be if some template
+- parameters are used in non-deduced contexts. */
+- if (strict == DEDUCE_EXACT)
++ parameters are used in non-deduced contexts. But don't check
++ for an exact match if we have dependent template arguments;
++ in that case we're doing partial ordering, and we already know
++ that we have two candidates that will provide the actual type. */
++ if (strict == DEDUCE_EXACT && !any_dependent_template_arguments_p (targs))
+ {
+ unsigned int i;
+
+@@ -18090,6 +18093,10 @@
+ {
+ tree fntype, spec, noex, clone;
- * parser.c (cp_parser_late_return_type_opt): Fix C++ism.
++ /* Don't instantiate a noexcept-specification from template context. */
++ if (processing_template_decl)
++ return;
++
+ if (DECL_CLONED_FUNCTION_P (fn))
+ fn = DECL_CLONED_FUNCTION (fn);
+ fntype = TREE_TYPE (fn);
Index: gcc/cp/semantics.c
===================================================================
--- a/src/gcc/cp/semantics.c (revision
+++ b/src/gcc/cp/semantics.c (revision
-@@ -7412,15 +7412,17 @@
- }
- }
+@@ -2430,7 +2430,8 @@
+ tree decl;
+
+ decl = fname_decl (input_location, C_RID_CODE (id), id);
+- if (processing_template_decl && current_function_decl)
++ if (processing_template_decl && current_function_decl
++ && decl != error_mark_node)
+ decl = DECL_NAME (decl);
+ return decl;
+ }
+Index: gcc/cp/parser.c
+===================================================================
+--- a/src/gcc/cp/parser.c (revision
++++ b/src/gcc/cp/parser.c (revision
+@@ -21419,6 +21419,9 @@
+ tree cast;
+ bool nonconst_p;
+
++ if (!type)
++ type = error_mark_node;
++
+ if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
+ {
+ maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
+Index: gcc/cp/call.c
+===================================================================
+--- a/src/gcc/cp/call.c (revision
++++ b/src/gcc/cp/call.c (revision
+@@ -894,6 +894,9 @@
+
+ if (i < CONSTRUCTOR_NELTS (ctor))
+ val = CONSTRUCTOR_ELT (ctor, i)->value;
++ else if (TREE_CODE (ftype) == REFERENCE_TYPE)
++ /* Value-initialization of reference is ill-formed. */
++ return NULL;
+ else
+ {
+ if (empty_ctor == NULL_TREE)
+Index: gcc/cp/mangle.c
+===================================================================
+--- a/src/gcc/cp/mangle.c (revision
++++ b/src/gcc/cp/mangle.c (revision
+@@ -3378,6 +3378,7 @@
+
+ if (G.need_abi_warning
+ /* Don't do this for a fake symbol we aren't going to emit anyway. */
++ && TREE_CODE (decl) != TYPE_DECL
+ && !DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
+ && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
+ {
+Index: gcc/sel-sched.c
+===================================================================
+--- a/src/gcc/sel-sched.c (revision
++++ b/src/gcc/sel-sched.c (revision
+@@ -1263,7 +1263,7 @@
+
+ if (!HARD_FRAME_POINTER_IS_FRAME_POINTER)
+ add_to_hard_reg_set (&reg_rename_p->unavailable_hard_regs,
+- Pmode, HARD_FRAME_POINTER_IS_FRAME_POINTER);
++ Pmode, HARD_FRAME_POINTER_REGNUM);
}
-- /* *(foo *)fooarrptreturn> (*fooarrptr)[0] */
-+ /* *(foo *)fooarrptr => (*fooarrptr)[0] */
- else if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE
- && (same_type_ignoring_top_level_qualifiers_p
- (type, TREE_TYPE (TREE_TYPE (subtype)))))
+
+ #ifdef STACK_REGS
+Index: gcc/gimple-low.c
+===================================================================
+--- a/src/gcc/gimple-low.c (revision
++++ b/src/gcc/gimple-low.c (revision
+@@ -249,6 +249,7 @@
+ break;
+ arg = gimple_call_arg (stmt, i);
+ if (p == error_mark_node
++ || DECL_ARG_TYPE (p) == error_mark_node
+ || arg == error_mark_node
+ || (!types_compatible_p (DECL_ARG_TYPE (p), TREE_TYPE (arg))
+ && !fold_convertible_p (DECL_ARG_TYPE (p), arg)))
+Index: gcc/ada/ChangeLog
+===================================================================
+--- a/src/gcc/ada/ChangeLog (revision
++++ b/src/gcc/ada/ChangeLog (revision
+@@ -1,3 +1,10 @@
++2014-01-12 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR ada/59772
++ * gcc-interface/cuintp.c (build_cst_from_int): Use 32-bit integer type
++ as intermediate type.
++ (UI_To_gnu): Likewise.
++
+ 2013-12-12 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/Make-lang.in (ada/doctools/xgnatugn): Use gnatmake.
+Index: gcc/ada/gcc-interface/cuintp.c
+===================================================================
+--- a/src/gcc/ada/gcc-interface/cuintp.c (revision
++++ b/src/gcc/ada/gcc-interface/cuintp.c (revision
+@@ -6,7 +6,7 @@
+ * *
+ * C Implementation File *
+ * *
+- * Copyright (C) 1992-2010, Free Software Foundation, Inc. *
++ * Copyright (C) 1992-2014, Free Software Foundation, Inc. *
+ * *
+ * GNAT is free software; you can redistribute it and/or modify it under *
+ * terms of the GNU General Public License as published by the Free Soft- *
+@@ -59,8 +59,8 @@
+ static tree
+ build_cst_from_int (tree type, HOST_WIDE_INT low)
+ {
+- if (TREE_CODE (type) == REAL_TYPE)
+- return convert (type, build_int_cst (NULL_TREE, low));
++ if (SCALAR_FLOAT_TYPE_P (type))
++ return convert (type, build_int_cst (gnat_type_for_size (32, 0), low));
+ else
+ return build_int_cst_type (type, low);
+ }
+@@ -99,20 +99,13 @@
+ gcc_assert (Length > 0);
+
+ /* The computations we perform below always require a type at least as
+- large as an integer not to overflow. REAL types are always fine, but
++ large as an integer not to overflow. FP types are always fine, but
+ INTEGER or ENUMERAL types we are handed may be too short. We use a
+ base integer type node for the computations in this case and will
+- convert the final result back to the incoming type later on.
+- The base integer precision must be superior than 16. */
++ convert the final result back to the incoming type later on. */
++ if (!SCALAR_FLOAT_TYPE_P (comp_type) && TYPE_PRECISION (comp_type) < 32)
++ comp_type = gnat_type_for_size (32, 0);
+
+- if (TREE_CODE (comp_type) != REAL_TYPE
+- && TYPE_PRECISION (comp_type)
+- < TYPE_PRECISION (long_integer_type_node))
+- {
+- comp_type = long_integer_type_node;
+- gcc_assert (TYPE_PRECISION (comp_type) > 16);
+- }
+-
+ gnu_base = build_cst_from_int (comp_type, Base);
+
+ gnu_ret = build_cst_from_int (comp_type, First);
+Index: gcc/tree-eh.c
+===================================================================
+--- a/src/gcc/tree-eh.c (revision
++++ b/src/gcc/tree-eh.c (revision
+@@ -1328,9 +1328,6 @@
+ x = gimple_seq_last_stmt (finally);
+ finally_loc = x ? gimple_location (x) : tf_loc;
+
+- /* Lower the finally block itself. */
+- lower_eh_constructs_1 (state, finally);
+-
+ /* Prepare for switch statement generation. */
+ nlabels = VEC_length (tree, tf->dest_array);
+ return_index = nlabels;
+@@ -1414,6 +1411,7 @@
+ x = gimple_build_label (finally_label);
+ gimple_seq_add_stmt (&tf->top_p_seq, x);
+
++ lower_eh_constructs_1 (state, finally);
+ gimple_seq_add_seq (&tf->top_p_seq, finally);
+
+ /* Redirect each incoming goto edge. */
+Index: gcc/fortran/trans-expr.c
+===================================================================
+--- a/src/gcc/fortran/trans-expr.c (revision
++++ b/src/gcc/fortran/trans-expr.c (revision
+@@ -5595,7 +5595,13 @@
+ /* Returns a reference to the scalar evaluated outside the loop
+ for this case. */
+ gfc_conv_expr (se, expr);
+- se->expr = gfc_build_addr_expr (NULL_TREE, se->expr);
++
++ if (expr->ts.type == BT_CHARACTER
++ && expr->expr_type != EXPR_FUNCTION)
++ gfc_conv_string_parameter (se);
++ else
++ se->expr = gfc_build_addr_expr (NULL_TREE, se->expr);
++
+ return;
+ }
+
+Index: gcc/fortran/trans-array.c
+===================================================================
+--- a/src/gcc/fortran/trans-array.c (revision
++++ b/src/gcc/fortran/trans-array.c (revision
+@@ -2465,6 +2465,11 @@
+ a reference to the value. */
+ gfc_conv_expr (&se, expr);
+ }
++
++ /* Ensure that a pointer to the string is stored. */
++ if (expr->ts.type == BT_CHARACTER)
++ gfc_conv_string_parameter (&se);
++
+ gfc_add_block_to_block (&outer_loop->pre, &se.pre);
+ gfc_add_block_to_block (&outer_loop->post, &se.post);
+ if (gfc_is_class_scalar_expr (expr))
+Index: gcc/fortran/dump-parse-tree.c
+===================================================================
+--- a/src/gcc/fortran/dump-parse-tree.c (revision
++++ b/src/gcc/fortran/dump-parse-tree.c (revision
+@@ -104,7 +104,8 @@
+ break;
+
+ case BT_CHARACTER:
+- show_expr (ts->u.cl->length);
++ if (ts->u.cl)
++ show_expr (ts->u.cl->length);
+ fprintf(dumpfile, " %d", ts->kind);
+ break;
+
+Index: gcc/fortran/ChangeLog
+===================================================================
+--- a/src/gcc/fortran/ChangeLog (revision
++++ b/src/gcc/fortran/ChangeLog (revision
+@@ -1,3 +1,68 @@
++2014-02-22 Mikael Morin <mikael@gcc.gnu.org>
++
++ PR fortran/59599
++ * trans-intrinsic.c (gfc_conv_intrinsic_ichar): Calculate the
++ number of arguments.
++
++2014-02-20 Janus Weil <janus@gcc.gnu.org>
++
++ Backport from mainline
++ 2014-02-17 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/55907
++ * resolve.c (build_default_init_expr): Don't initialize character
++ variable if -fno-automatic is given.
++
++2014-02-08 Mikael Morin <mikael@gcc.gnu.org>
++
++ PR fortran/57033
++ * primary.c (gfc_convert_to_structure_constructor): Avoid null pointer
++ dereference.
++
++2014-02-08 Paul Thomas <pault@gcc.gnu.org>
++
++ PR fortran/59906
++ * trans-array.c (gfc_add_loop_ss_code): In the case of character
++ SS_REFERENCE, use gfc_conv_string_parameter to ensure that a
++ pointer to the string is stored.
++ * trans-expr.c (gfc_conv_expr_reference): Likewise, use
++ gfc_conv_string_parameter to ensure that a pointer to is passed
++ to the elemental function.
++
++2014-02-03 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/59941
++ * expr.c (replace_comp): Check for isym to avoid ICE.
++
++2014-01-27 Mikael Morin <mikael@gcc.gnu.org>
++
++ PR fortran/58007
++ * module.c (skip_list): Don't use default argument value.
++ (load_derived_extensions, read_module): Update callers.
++
++2014-01-26 Mikael Morin <mikael@gcc.gnu.org>
++
++ PR fortran/58007
++ * module.c (fp2, find_pointer2): Remove.
++ (mio_component_ref): Don't forcedfully set the containing derived type
++ symbol for loading. Remove unused argument.
++ (mio_ref): Update caller
++ (skip_list): New argument nest_level. Initialize level with the new
++ argument.
++ (read_module): Add forced pointer components association for derived
++ type symbols.
++
++2014-01-11 Janus Weil <janus@gcc.gnu.org>
++
++ Backport from mainline
++ 2013-12-29 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/59612
++ PR fortran/57042
++ * dump-parse-tree.c (show_typespec): Check for charlen.
++ * invoke.texi: Fix documentation of -fdump-fortran-optimized and
++ -fdump-parse-tree.
++
+ 2013-11-17 Paul Thomas <pault@gcc.gnu.org>
+
+ PR fortran/58771
+Index: gcc/fortran/expr.c
+===================================================================
+--- a/src/gcc/fortran/expr.c (revision
++++ b/src/gcc/fortran/expr.c (revision
+@@ -4195,7 +4195,7 @@
+ gfc_component *comp;
+ comp = (gfc_component *)sym;
+ if ((expr->expr_type == EXPR_VARIABLE
+- || (expr->expr_type == EXPR_FUNCTION
++ || (expr->expr_type == EXPR_FUNCTION && !expr->value.function.isym
+ && !gfc_is_intrinsic (expr->symtree->n.sym, 0, expr->where)))
+ && expr->symtree->n.sym->ns == comp->ts.interface->formal_ns)
+ {
+Index: gcc/fortran/module.c
+===================================================================
+--- a/src/gcc/fortran/module.c (revision
++++ b/src/gcc/fortran/module.c (revision
+@@ -387,37 +387,6 @@
+ }
+
+
+-/* Recursive function to find a pointer within a tree by brute force. */
+-
+-static pointer_info *
+-fp2 (pointer_info *p, const void *target)
+-{
+- pointer_info *q;
+-
+- if (p == NULL)
+- return NULL;
+-
+- if (p->u.pointer == target)
+- return p;
+-
+- q = fp2 (p->left, target);
+- if (q != NULL)
+- return q;
+-
+- return fp2 (p->right, target);
+-}
+-
+-
+-/* During reading, find a pointer_info node from the pointer value.
+- This amounts to a brute-force search. */
+-
+-static pointer_info *
+-find_pointer2 (void *p)
+-{
+- return fp2 (pi_root, p);
+-}
+-
+-
+ /* Resolve any fixups using a known pointer. */
+
+ static void
+@@ -2500,45 +2469,13 @@
+ the namespace and is not loaded again. */
+
+ static void
+-mio_component_ref (gfc_component **cp, gfc_symbol *sym)
++mio_component_ref (gfc_component **cp)
+ {
+- char name[GFC_MAX_SYMBOL_LEN + 1];
+- gfc_component *q;
+ pointer_info *p;
+
+ p = mio_pointer_ref (cp);
+ if (p->type == P_UNKNOWN)
+ p->type = P_COMPONENT;
+-
+- if (iomode == IO_OUTPUT)
+- mio_pool_string (&(*cp)->name);
+- else
+- {
+- mio_internal_string (name);
+-
+- if (sym && sym->attr.is_class)
+- sym = sym->components->ts.u.derived;
+-
+- /* It can happen that a component reference can be read before the
+- associated derived type symbol has been loaded. Return now and
+- wait for a later iteration of load_needed. */
+- if (sym == NULL)
+- return;
+-
+- if (sym->components != NULL && p->u.pointer == NULL)
+- {
+- /* Symbol already loaded, so search by name. */
+- q = gfc_find_component (sym, name, true, true);
+-
+- if (q)
+- associate_integer_pointer (p, q);
+- }
+-
+- /* Make sure this symbol will eventually be loaded. */
+- p = find_pointer2 (sym);
+- if (p->u.rsym.state == UNUSED)
+- p->u.rsym.state = NEEDED;
+- }
+ }
+
+
+@@ -2920,7 +2857,7 @@
+
+ case REF_COMPONENT:
+ mio_symbol_ref (&r->u.c.sym);
+- mio_component_ref (&r->u.c.component, r->u.c.sym);
++ mio_component_ref (&r->u.c.component);
+ break;
+
+ case REF_SUBSTRING:
+@@ -3775,7 +3712,9 @@
+
+
+ /* Unlike most other routines, the address of the symbol node is already
+- fixed on input and the name/module has already been filled in. */
++ fixed on input and the name/module has already been filled in.
++ If you update the symbol format here, don't forget to update read_module
++ as well (look for "seek to the symbol's component list"). */
+
+ static void
+ mio_symbol (gfc_symbol *sym)
+@@ -3920,14 +3859,17 @@
+ }
+
+
+-/* Skip a list between balanced left and right parens. */
++/* Skip a list between balanced left and right parens.
++ By setting NEST_LEVEL to a non-zero value one assumes that a number of
++ NEST_LEVEL opening parens have been already parsed by hand, and the remaining
++ of the content is to be skipped here. */
+
+ static void
+-skip_list (void)
++skip_list (int nest_level)
+ {
+ int level;
+
+- level = 0;
++ level = nest_level;
+ do
{
- tree type_domain;
- tree min_val = size_zero_node;
-- sub = cxx_fold_indirect_ref (loc, TREE_TYPE (subtype), sub, NULL);
-- if (!sub)
-+ tree newsub = cxx_fold_indirect_ref (loc, TREE_TYPE (subtype), sub, NULL);
-+ if (newsub)
-+ sub = newsub;
+ switch (parse_atom ())
+@@ -4286,7 +4228,7 @@
+ if (!info || !derived)
+ {
+ while (peek_atom () != ATOM_RPAREN)
+- skip_list ();
++ skip_list (0);
+ continue;
+ }
+
+@@ -4523,18 +4465,18 @@
+ gfc_symbol *sym;
+
+ get_module_locus (&operator_interfaces); /* Skip these for now. */
+- skip_list ();
++ skip_list (0);
+
+ get_module_locus (&user_operators);
+- skip_list ();
+- skip_list ();
++ skip_list (0);
++ skip_list (0);
+
+ /* Skip commons, equivalences and derived type extensions for now. */
+- skip_list ();
+- skip_list ();
++ skip_list (0);
++ skip_list (0);
+
+ get_module_locus (&extensions);
+- skip_list ();
++ skip_list (0);
+
+ mio_lparen ();
+
+@@ -4561,7 +4503,6 @@
+ info->u.rsym.ns = atom_int;
+
+ get_module_locus (&info->u.rsym.where);
+- skip_list ();
+
+ /* See if the symbol has already been loaded by a previous module.
+ If so, we reference the existing symbol and prevent it from
+@@ -4572,11 +4513,57 @@
+
+ if (sym == NULL
+ || (sym->attr.flavor == FL_VARIABLE && info->u.rsym.ns !=1))
+- continue;
++ {
++ skip_list (0);
++ continue;
++ }
+
+ info->u.rsym.state = USED;
+ info->u.rsym.sym = sym;
++ /* The current symbol has already been loaded, so we can avoid loading
++ it again. However, if it is a derived type, some of its components
++ can be used in expressions in the module. To avoid the module loading
++ failing, we need to associate the module's component pointer indexes
++ with the existing symbol's component pointers. */
++ if (sym->attr.flavor == FL_DERIVED)
++ {
++ gfc_component *c;
+
++ /* First seek to the symbol's component list. */
++ mio_lparen (); /* symbol opening. */
++ skip_list (0); /* skip symbol attribute. */
++ skip_list (0); /* typespec. */
++ require_atom (ATOM_INTEGER); /* namespace ref. */
++ require_atom (ATOM_INTEGER); /* common ref. */
++ skip_list (0); /* formal args. */
++ /* no value. */
++ skip_list (0); /* array_spec. */
++ require_atom (ATOM_INTEGER); /* result. */
++ /* not a cray pointer. */
++
++ mio_lparen (); /* component list opening. */
++ for (c = sym->components; c; c = c->next)
++ {
++ pointer_info *p;
++ const char *comp_name;
++ int n;
++
++ mio_lparen (); /* component opening. */
++ mio_integer (&n);
++ p = get_integer (n);
++ if (p->u.pointer == NULL)
++ associate_integer_pointer (p, c);
++ mio_pool_string (&comp_name);
++ gcc_assert (comp_name == c->name);
++ skip_list (1); /* component end. */
++ }
++ mio_rparen (); /* component list closing. */
++
++ skip_list (1); /* symbol end. */
++ }
+ else
- sub = build1_loc (loc, INDIRECT_REF, TREE_TYPE (subtype), sub);
- type_domain = TYPE_DOMAIN (TREE_TYPE (sub));
- if (type_domain && TYPE_MIN_VALUE (type_domain))
++ skip_list (0);
++
+ /* Some symbols do not have a namespace (eg. formal arguments),
+ so the automatic "unique symtree" mechanism must be suppressed
+ by marking them as referenced. */
+@@ -4738,7 +4725,7 @@
+
+ if (u == NULL)
+ {
+- skip_list ();
++ skip_list (0);
+ continue;
+ }
+
+Index: gcc/fortran/resolve.c
+===================================================================
+--- a/src/gcc/fortran/resolve.c (revision
++++ b/src/gcc/fortran/resolve.c (revision
+@@ -10167,7 +10167,7 @@
+ init_expr = NULL;
+ }
+ if (!init_expr && gfc_option.flag_init_character == GFC_INIT_CHARACTER_ON
+- && sym->ts.u.cl->length)
++ && sym->ts.u.cl->length && gfc_option.flag_max_stack_var_size != 0)
+ {
+ gfc_actual_arglist *arg;
+ init_expr = gfc_get_expr ();
+Index: gcc/fortran/primary.c
+===================================================================
+--- a/src/gcc/fortran/primary.c (revision
++++ b/src/gcc/fortran/primary.c (revision
+@@ -2525,7 +2525,8 @@
+ if (parent && !comp)
+ break;
+
+- actual = actual->next;
++ if (actual)
++ actual = actual->next;
+ }
+
+ if (build_actual_constructor (&comp_head, &ctor_head, sym) == FAILURE)
+Index: gcc/fortran/trans-intrinsic.c
+===================================================================
+--- a/src/gcc/fortran/trans-intrinsic.c (revision
++++ b/src/gcc/fortran/trans-intrinsic.c (revision
+@@ -4665,8 +4665,10 @@
+ gfc_conv_intrinsic_ichar (gfc_se * se, gfc_expr * expr)
+ {
+ tree args[2], type, pchartype;
++ int nargs;
+
+- gfc_conv_intrinsic_function_args (se, expr, args, 2);
++ nargs = gfc_intrinsic_argument_list_length (expr);
++ gfc_conv_intrinsic_function_args (se, expr, args, nargs);
+ gcc_assert (POINTER_TYPE_P (TREE_TYPE (args[1])));
+ pchartype = gfc_get_pchar_type (expr->value.function.actual->expr->ts.kind);
+ args[1] = fold_build1_loc (input_location, NOP_EXPR, pchartype, args[1]);
+Index: gcc/configure.ac
+===================================================================
+--- a/src/gcc/configure.ac (revision
++++ b/src/gcc/configure.ac (revision
+@@ -3740,8 +3740,13 @@
+
+ # These two are used unconditionally by i386.[ch]; it is to be defined
+ # to 1 if the feature is present, 0 otherwise.
++ as_ix86_gotoff_in_data_opt=
++ if test x$gas = xyes; then
++ as_ix86_gotoff_in_data_opt="--32"
++ fi
+ gcc_GAS_CHECK_FEATURE([GOTOFF in data],
+- gcc_cv_as_ix86_gotoff_in_data, [2,11,0],,
++ gcc_cv_as_ix86_gotoff_in_data, [2,11,0],
++ [$as_ix86_gotoff_in_data_opt],
+ [ .text
+ .L0:
+ nop
Index: gcc/coverage.c
===================================================================
--- a/src/gcc/coverage.c (revision
+++ b/src/gcc/coverage.c (revision
-@@ -1099,6 +1099,9 @@
- memcpy (da_file_name + prefix_len, filename, len);
- strcpy (da_file_name + prefix_len + len, GCOV_DATA_SUFFIX);
+@@ -988,6 +988,9 @@
+ /* The function is not being emitted, remove from list. */
+ *fn_prev = fn->next;
+
++ if (functions_head == NULL)
++ return false;
++
+ for (ix = 0; ix != GCOV_COUNTERS; ix++)
+ if ((1u << ix) & prg_ctr_mask)
+ n_counters++;
+Index: gcc/ipa-prop.c
+===================================================================
+--- a/src/gcc/ipa-prop.c (revision
++++ b/src/gcc/ipa-prop.c (revision
+@@ -812,7 +812,8 @@
+ return;
+ parm = TREE_OPERAND (expr, 0);
+ index = ipa_get_param_decl_index (info, SSA_NAME_VAR (parm));
+- gcc_assert (index >= 0);
++ if (index < 0)
++ return;
+
+ cond_bb = single_pred (assign_bb);
+ cond = last_stmt (cond_bb);
+Index: gcc/ira.c
+===================================================================
+--- a/src/gcc/ira.c (revision
++++ b/src/gcc/ira.c (revision
+@@ -3788,6 +3788,18 @@
+ if (need_dce && optimize)
+ run_fast_dce ();
-+ if (flag_branch_probabilities)
-+ read_counts_file ();
++ /* Diagnose uses of the hard frame pointer when it is used as a global
++ register. Often we can get away with letting the user appropriate
++ the frame pointer, but we should let them know when code generation
++ makes that impossible. */
++ if (global_regs[HARD_FRAME_POINTER_REGNUM] && frame_pointer_needed)
++ {
++ tree decl = global_regs_decl[HARD_FRAME_POINTER_REGNUM];
++ error_at (DECL_SOURCE_LOCATION (current_function_decl),
++ "frame pointer required, but reserved");
++ inform (DECL_SOURCE_LOCATION (decl), "for %qD", decl);
++ }
+
- /* Name of bbg file. */
- if (flag_test_coverage && !flag_compare_debug)
+ timevar_pop (TV_IRA);
+ }
+
+Index: gcc/rtl.h
+===================================================================
+--- a/src/gcc/rtl.h (revision
++++ b/src/gcc/rtl.h (revision
+@@ -2681,6 +2681,8 @@
+ #define fatal_insn_not_found(insn) \
+ _fatal_insn_not_found (insn, __FILE__, __LINE__, __FUNCTION__)
+
++/* reginfo.c */
++extern tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
+
+
+ #endif /* ! GCC_RTL_H */
+Index: gcc/reginfo.c
+===================================================================
+--- a/src/gcc/reginfo.c (revision
++++ b/src/gcc/reginfo.c (revision
+@@ -88,7 +88,7 @@
+ char global_regs[FIRST_PSEUDO_REGISTER];
+
+ /* Declaration for the global register. */
+-static tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
++tree global_regs_decl[FIRST_PSEUDO_REGISTER];
+
+ /* Same information as REGS_INVALIDATED_BY_CALL but in regset form to be used
+ in dataflow more conveniently. */
+Index: gcc/config/i386/f16cintrin.h
+===================================================================
+--- a/src/gcc/config/i386/f16cintrin.h (revision
++++ b/src/gcc/config/i386/f16cintrin.h (revision
+@@ -35,7 +35,7 @@
+ extern __inline float __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ _cvtsh_ss (unsigned short __S)
+ {
+- __v8hi __H = __extension__ (__v8hi){ __S, 0, 0, 0, 0, 0, 0, 0 };
++ __v8hi __H = __extension__ (__v8hi){ (short) __S, 0, 0, 0, 0, 0, 0, 0 };
+ __v4sf __A = __builtin_ia32_vcvtph2ps (__H);
+ return __builtin_ia32_vec_ext_v4sf (__A, 0);
+ }
+Index: gcc/config/i386/sse.md
+===================================================================
+--- a/src/gcc/config/i386/sse.md (revision
++++ b/src/gcc/config/i386/sse.md (revision
+@@ -11462,10 +11462,10 @@
+ (unspec:VF_128
+ [(match_operand:VF_128 1 "nonimmediate_operand")]
+ UNSPEC_FRCZ)
+- (match_dup 3)
++ (match_dup 2)
+ (const_int 1)))]
+ "TARGET_XOP"
+- "operands[3] = CONST0_RTX (<MODE>mode);")
++ "operands[2] = CONST0_RTX (<MODE>mode);")
+
+ (define_insn "*xop_vmfrcz<mode>2"
+ [(set (match_operand:VF_128 0 "register_operand" "=x")
+Index: gcc/config/i386/driver-i386.c
+===================================================================
+--- a/src/gcc/config/i386/driver-i386.c (revision
++++ b/src/gcc/config/i386/driver-i386.c (revision
+@@ -469,6 +469,27 @@
+ has_fsgsbase = ebx & bit_FSGSBASE;
+ }
+
++ /* Check cpuid level of extended features. */
++ __cpuid (0x80000000, ext_level, ebx, ecx, edx);
++
++ if (ext_level > 0x80000000)
++ {
++ __cpuid (0x80000001, eax, ebx, ecx, edx);
++
++ has_lahf_lm = ecx & bit_LAHF_LM;
++ has_sse4a = ecx & bit_SSE4a;
++ has_abm = ecx & bit_ABM;
++ has_lwp = ecx & bit_LWP;
++ has_fma4 = ecx & bit_FMA4;
++ has_xop = ecx & bit_XOP;
++ has_tbm = ecx & bit_TBM;
++ has_lzcnt = ecx & bit_LZCNT;
++
++ has_longmode = edx & bit_LM;
++ has_3dnowp = edx & bit_3DNOWP;
++ has_3dnow = edx & bit_3DNOW;
++ }
++
+ /* Get XCR_XFEATURE_ENABLED_MASK register with xgetbv. */
+ #define XCR_XFEATURE_ENABLED_MASK 0x0
+ #define XSTATE_FP 0x1
+@@ -487,30 +508,10 @@
+ has_avx2 = 0;
+ has_fma = 0;
+ has_fma4 = 0;
++ has_f16c = 0;
+ has_xop = 0;
+ }
+
+- /* Check cpuid level of extended features. */
+- __cpuid (0x80000000, ext_level, ebx, ecx, edx);
+-
+- if (ext_level > 0x80000000)
+- {
+- __cpuid (0x80000001, eax, ebx, ecx, edx);
+-
+- has_lahf_lm = ecx & bit_LAHF_LM;
+- has_sse4a = ecx & bit_SSE4a;
+- has_abm = ecx & bit_ABM;
+- has_lwp = ecx & bit_LWP;
+- has_fma4 = ecx & bit_FMA4;
+- has_xop = ecx & bit_XOP;
+- has_tbm = ecx & bit_TBM;
+- has_lzcnt = ecx & bit_LZCNT;
+-
+- has_longmode = edx & bit_LM;
+- has_3dnowp = edx & bit_3DNOWP;
+- has_3dnow = edx & bit_3DNOW;
+- }
+-
+ if (!arch)
{
-@@ -1118,9 +1121,6 @@
- gcov_write_unsigned (local_tick);
+ if (vendor == SIG_AMD
+Index: gcc/config/i386/i386.c
+===================================================================
+--- a/src/gcc/config/i386/i386.c (revision
++++ b/src/gcc/config/i386/i386.c (revision
+@@ -1623,7 +1623,7 @@
+ 8, /* MMX or SSE register to integer */
+ 8, /* size of l1 cache. */
+ 1024, /* size of l2 cache. */
+- 128, /* size of prefetch block */
++ 64, /* size of prefetch block */
+ 8, /* number of parallel prefetches */
+ 1, /* Branch cost */
+ COSTS_N_INSNS (6), /* cost of FADD and FSUB insns. */
+@@ -6078,25 +6078,28 @@
+ case CHImode:
+ case CQImode:
+ {
+- int size = (bit_offset % 64)+ (int) GET_MODE_BITSIZE (mode);
++ int size = bit_offset + (int) GET_MODE_BITSIZE (mode);
+
+- if (size <= 32)
++ /* Analyze last 128 bits only. */
++ size = (size - 1) & 0x7f;
++
++ if (size < 32)
+ {
+ classes[0] = X86_64_INTEGERSI_CLASS;
+ return 1;
+ }
+- else if (size <= 64)
++ else if (size < 64)
+ {
+ classes[0] = X86_64_INTEGER_CLASS;
+ return 1;
+ }
+- else if (size <= 64+32)
++ else if (size < 64+32)
+ {
+ classes[0] = X86_64_INTEGER_CLASS;
+ classes[1] = X86_64_INTEGERSI_CLASS;
+ return 2;
+ }
+- else if (size <= 64+64)
++ else if (size < 64+64)
+ {
+ classes[0] = classes[1] = X86_64_INTEGER_CLASS;
+ return 2;
+@@ -6357,7 +6360,7 @@
+ return gen_rtx_REG (XFmode, FIRST_STACK_REG);
+ if (n == 2 && regclass[0] == X86_64_INTEGER_CLASS
+ && regclass[1] == X86_64_INTEGER_CLASS
+- && (mode == CDImode || mode == TImode || mode == TFmode)
++ && (mode == CDImode || mode == TImode)
+ && intreg[0] + 1 == intreg[1])
+ return gen_rtx_REG (mode, intreg[0]);
+
+@@ -10431,15 +10434,14 @@
+
+ if (r10_live && eax_live)
+ {
+- t = plus_constant (stack_pointer_rtx, allocate);
++ t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax);
+ emit_move_insn (r10, gen_frame_mem (Pmode, t));
+- t = plus_constant (stack_pointer_rtx,
+- allocate - UNITS_PER_WORD);
++ t = plus_constant (t, UNITS_PER_WORD);
+ emit_move_insn (eax, gen_frame_mem (Pmode, t));
+ }
+ else if (eax_live || r10_live)
+ {
+- t = plus_constant (stack_pointer_rtx, allocate);
++ t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax);
+ emit_move_insn ((eax_live ? eax : r10), gen_frame_mem (Pmode, t));
}
}
--
-- if (flag_branch_probabilities)
-- read_counts_file ();
+@@ -16986,17 +16988,24 @@
+ int ok;
+
+ /* FIXME: Handle zero-extended addresses. */
+- if (GET_CODE (operands[1]) == ZERO_EXTEND
+- || GET_CODE (operands[1]) == AND)
++ if (SImode_address_operand (operands[1], VOIDmode))
+ return false;
+
+ /* Check we need to optimize. */
+ if (!TARGET_OPT_AGU || optimize_function_for_size_p (cfun))
+ return false;
+
+- /* Check it is correct to split here. */
+- if (!ix86_ok_to_clobber_flags(insn))
++ /* The "at least two components" test below might not catch simple
++ move insns if parts.base is non-NULL and parts.disp is const0_rtx
++ as the only components in the address, e.g. if the register is
++ %rbp or %r13. As this test is much cheaper and moves are the
++ common case, do this check first. */
++ if (REG_P (operands[1]))
+ return false;
++
++ /* Check if it is OK to split here. */
++ if (!ix86_ok_to_clobber_flags (insn))
++ return false;
+
+ ok = ix86_decompose_address (operands[1], &parts);
+ gcc_assert (ok);
+@@ -20064,7 +20073,7 @@
+ return;
+
+ case V8SFmode:
+- mask = gen_lowpart (V8SFmode, mask);
++ mask = gen_lowpart (V8SImode, mask);
+ if (one_operand_shuffle)
+ emit_insn (gen_avx2_permvarv8sf (target, op0, mask));
+ else
+@@ -24266,7 +24275,8 @@
+ int
+ ix86_data_alignment (tree type, int align)
+ {
+- int max_align = optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
++ int max_align
++ = optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
+
+ if (AGGREGATE_TYPE_P (type)
+ && TYPE_SIZE (type)
+@@ -29771,7 +29781,9 @@
+ mode4 = insn_data[icode].operand[5].mode;
+
+ if (target == NULL_RTX
+- || GET_MODE (target) != insn_data[icode].operand[0].mode)
++ || GET_MODE (target) != insn_data[icode].operand[0].mode
++ || !insn_data[icode].operand[0].predicate (target,
++ GET_MODE (target)))
+ subtarget = gen_reg_rtx (insn_data[icode].operand[0].mode);
+ else
+ subtarget = target;
+@@ -36643,7 +36655,9 @@
+ else
+ dfinal.perm[i] = e;
+ }
+- dfinal.op0 = gen_reg_rtx (dfinal.vmode);
++
++ if (!d->testing_p)
++ dfinal.op0 = gen_reg_rtx (dfinal.vmode);
+ dfinal.op1 = dfinal.op0;
+ dremap.target = dfinal.op0;
+
+@@ -36841,6 +36855,9 @@
+ return false;
+ gcc_assert (d->op0 != d->op1);
+
++ if (d->testing_p)
++ return true;
++
+ nelt = d->nelt;
+ eltsz = GET_MODE_SIZE (GET_MODE_INNER (d->vmode));
+
+@@ -37040,6 +37057,8 @@
+ switch (d->vmode)
+ {
+ case V4DFmode:
++ if (d->testing_p)
++ break;
+ t1 = gen_reg_rtx (V4DFmode);
+ t2 = gen_reg_rtx (V4DFmode);
+
+@@ -37059,6 +37078,8 @@
+ {
+ int mask = odd ? 0xdd : 0x88;
+
++ if (d->testing_p)
++ break;
+ t1 = gen_reg_rtx (V8SFmode);
+ t2 = gen_reg_rtx (V8SFmode);
+ t3 = gen_reg_rtx (V8SFmode);
+@@ -37100,6 +37121,8 @@
+ return expand_vec_perm_pshufb2 (d);
+ else
+ {
++ if (d->testing_p)
++ break;
+ /* We need 2*log2(N)-1 operations to achieve odd/even
+ with interleave. */
+ t1 = gen_reg_rtx (V8HImode);
+@@ -37121,6 +37144,8 @@
+ return expand_vec_perm_pshufb2 (d);
+ else
+ {
++ if (d->testing_p)
++ break;
+ t1 = gen_reg_rtx (V16QImode);
+ t2 = gen_reg_rtx (V16QImode);
+ t3 = gen_reg_rtx (V16QImode);
+@@ -37153,6 +37178,9 @@
+ return expand_vec_perm_even_odd_1 (&d_copy, odd);
+ }
+
++ if (d->testing_p)
++ break;
++
+ t1 = gen_reg_rtx (V4DImode);
+ t2 = gen_reg_rtx (V4DImode);
+
+@@ -37179,6 +37207,9 @@
+ return expand_vec_perm_even_odd_1 (&d_copy, odd);
+ }
+
++ if (d->testing_p)
++ break;
++
+ t1 = gen_reg_rtx (V8SImode);
+ t2 = gen_reg_rtx (V8SImode);
+
+@@ -37271,6 +37302,8 @@
+ case V16QImode:
+ /* These can be implemented via interleave. We save one insn by
+ stopping once we have promoted to V4SImode and then use pshufd. */
++ if (d->testing_p)
++ return true;
+ do
+ {
+ rtx dest;
+Index: gcc/config/tilegx/tilegx.md
+===================================================================
+--- a/src/gcc/config/tilegx/tilegx.md (revision
++++ b/src/gcc/config/tilegx/tilegx.md (revision
+@@ -4924,10 +4924,8 @@
+
+ ;; Network intrinsics
+
+-;; Note the "pseudo" text is handled specially by the
+-;; asm_output_opcode routine. If the output is an empty string, the
+-;; instruction would bypass the asm_output_opcode routine, bypassing
+-;; the bundle handling code.
++;; Note the this barrier is of type "nothing," which is deleted after
++;; the final scheduling pass so that nothing is emitted for it.
+ (define_insn "tilegx_network_barrier"
+ [(unspec_volatile:SI [(const_int 0)] UNSPEC_NETWORK_BARRIER)]
+ ""
+Index: gcc/config/tilegx/tilegx-c.c
+===================================================================
+--- a/src/gcc/config/tilegx/tilegx-c.c (revision
++++ b/src/gcc/config/tilegx/tilegx-c.c (revision
+@@ -48,6 +48,9 @@
+ if (TARGET_32BIT)
+ builtin_define ("__tilegx32__");
+
++ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
++ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
++
+ TILEGX_CPU_CPP_ENDIAN_BUILTINS ();
+ GNU_USER_TARGET_OS_CPP_BUILTINS ();
}
+Index: gcc/config/tilegx/sync.md
+===================================================================
+--- a/src/gcc/config/tilegx/sync.md (revision
++++ b/src/gcc/config/tilegx/sync.md (revision
+@@ -151,15 +151,22 @@
+ (match_operand:SI 3 "const_int_operand" "")] ;; model
+ ""
+ {
++ rtx addend;
+ enum memmodel model = (enum memmodel) INTVAL (operands[3]);
+
+ if (operands[2] != const0_rtx)
+- emit_move_insn (operands[2], gen_rtx_NEG (<MODE>mode, operands[2]));
++ {
++ addend = gen_reg_rtx (<MODE>mode);
++ emit_move_insn (addend,
++ gen_rtx_MINUS (<MODE>mode, const0_rtx, operands[2]));
++ }
++ else
++ addend = operands[2];
- /* Performs file-level cleanup. Close graph file, generate coverage
-Index: gcc/config/i386/i386.md
-===================================================================
---- a/src/gcc/config/i386/i386.md (revision
-+++ b/src/gcc/config/i386/i386.md (revision
-@@ -109,6 +109,7 @@
- UNSPEC_CALL_NEEDS_VZEROUPPER
- UNSPEC_PAUSE
- UNSPEC_LEA_ADDR
-+ UNSPEC_STOS
-
- ;; For SSE/MMX support:
- UNSPEC_FIX_NOTRUNC
-@@ -15912,7 +15913,8 @@
- [(parallel [(set (match_operand 1 "memory_operand" "")
- (match_operand 2 "register_operand" ""))
- (set (match_operand 0 "register_operand" "")
-- (match_operand 3 "" ""))])]
-+ (match_operand 3 "" ""))
-+ (unspec [(const_int 0)] UNSPEC_STOS)])]
+ tilegx_pre_atomic_barrier (model);
+ emit_insn (gen_atomic_fetch_add_bare<mode> (operands[0],
+ operands[1],
+- operands[2]));
++ addend));
+ tilegx_post_atomic_barrier (model);
+ DONE;
+ })
+Index: gcc/config/tilegx/tilegx.c
+===================================================================
+--- a/src/gcc/config/tilegx/tilegx.c (revision
++++ b/src/gcc/config/tilegx/tilegx.c (revision
+@@ -678,6 +678,16 @@
+ }
+
+
++/* Implement TARGET_EXPAND_TO_RTL_HOOK. */
++static void
++tilegx_expand_to_rtl_hook (void)
++{
++ /* Exclude earlier sets of crtl->uses_pic_offset_table, because we
++ only care about uses actually emitted. */
++ crtl->uses_pic_offset_table = 0;
++}
++
++
+ /* Implement TARGET_SHIFT_TRUNCATION_MASK. DImode shifts use the mode
+ matching insns and therefore guarantee that the shift count is
+ modulo 64. SImode shifts sometimes use the 64 bit version so do
+@@ -3490,6 +3500,12 @@
+ }
+ if (!pat)
+ return NULL_RTX;
++
++ /* If we are generating a prefetch, tell the scheduler not to move
++ it around. */
++ if (GET_CODE (pat) == PREFETCH)
++ PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
++
+ emit_insn (pat);
+
+ if (nonvoid)
+@@ -4317,10 +4333,12 @@
+ basic_block bb;
+ FOR_EACH_BB (bb)
+ {
+- rtx insn, next;
++ rtx insn, next, prev;
+ rtx end = NEXT_INSN (BB_END (bb));
+
+- for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn; insn = next)
++ prev = NULL_RTX;
++ for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn;
++ prev = insn, insn = next)
+ {
+ next = next_insn_to_bundle (NEXT_INSN (insn), end);
+
+@@ -4345,6 +4363,18 @@
+ PUT_MODE (insn, SImode);
+ }
+ }
++
++ /* Delete barrier insns, because they can mess up the
++ emitting of bundle braces. If it is end-of-bundle, then
++ the previous insn must be marked end-of-bundle. */
++ if (get_attr_type (insn) == TYPE_NOTHING) {
++ if (GET_MODE (insn) == QImode && prev != NULL
++ && GET_MODE (prev) == SImode)
++ {
++ PUT_MODE (prev, QImode);
++ }
++ delete_insn (insn);
++ }
+ }
+ }
+ }
+@@ -5428,6 +5458,9 @@
+ #undef TARGET_RTX_COSTS
+ #define TARGET_RTX_COSTS tilegx_rtx_costs
+
++#undef TARGET_EXPAND_TO_RTL_HOOK
++#define TARGET_EXPAND_TO_RTL_HOOK tilegx_expand_to_rtl_hook
++
+ #undef TARGET_SHIFT_TRUNCATION_MASK
+ #define TARGET_SHIFT_TRUNCATION_MASK tilegx_shift_truncation_mask
+
+Index: gcc/config/tilepro/tilepro-c.c
+===================================================================
+--- a/src/gcc/config/tilepro/tilepro-c.c (revision
++++ b/src/gcc/config/tilepro/tilepro-c.c (revision
+@@ -45,6 +45,11 @@
+ builtin_define ("__tile_chip__=1");
+ builtin_define ("__tile_chip_rev__=0");
+
++ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
++ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
++ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
++ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
++
+ TILEPRO_CPU_CPP_ENDIAN_BUILTINS ();
+ GNU_USER_TARGET_OS_CPP_BUILTINS ();
+ }
+Index: gcc/config/tilepro/tilepro.c
+===================================================================
+--- a/src/gcc/config/tilepro/tilepro.c (revision
++++ b/src/gcc/config/tilepro/tilepro.c (revision
+@@ -3167,6 +3167,12 @@
+ }
+ if (!pat)
+ return NULL_RTX;
++
++ /* If we are generating a prefetch, tell the scheduler not to move
++ it around. */
++ if (GET_CODE (pat) == PREFETCH)
++ PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
++
+ emit_insn (pat);
+
+ if (nonvoid)
+Index: gcc/config/tilepro/tilepro.md
+===================================================================
+--- a/src/gcc/config/tilepro/tilepro.md (revision
++++ b/src/gcc/config/tilepro/tilepro.md (revision
+@@ -796,7 +796,7 @@
+
+ (define_expand "ctzdi2"
+ [(set (match_operand:DI 0 "register_operand" "")
+- (ctz:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
++ (ctz:DI (match_operand:DI 1 "register_operand" "")))]
+ ""
+ {
+ rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, result;
+@@ -824,7 +824,7 @@
+
+ (define_expand "clzdi2"
+ [(set (match_operand:DI 0 "register_operand" "")
+- (clz:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
++ (clz:DI (match_operand:DI 1 "register_operand" "")))]
+ ""
+ {
+ rtx lo, hi, clz_lo, clz_hi, clz_lo_plus_32, result;
+@@ -852,7 +852,7 @@
+
+ (define_expand "ffsdi2"
+ [(set (match_operand:DI 0 "register_operand" "")
+- (ffs:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
++ (ffs:DI (match_operand:DI 1 "register_operand" "")))]
""
- "ix86_current_function_needs_cld = 1;")
-
-@@ -15921,7 +15923,8 @@
- (match_operand:DI 2 "register_operand" "a"))
- (set (match_operand:DI 0 "register_operand" "=D")
- (plus:DI (match_dup 1)
-- (const_int 8)))]
-+ (const_int 8)))
-+ (unspec [(const_int 0)] UNSPEC_STOS)]
- "TARGET_64BIT
- && !(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
- "stosq"
-@@ -15934,7 +15937,8 @@
- (match_operand:SI 2 "register_operand" "a"))
- (set (match_operand:P 0 "register_operand" "=D")
- (plus:P (match_dup 1)
-- (const_int 4)))]
-+ (const_int 4)))
-+ (unspec [(const_int 0)] UNSPEC_STOS)]
- "!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
- "stos{l|d}"
- [(set_attr "type" "str")
-@@ -15946,7 +15950,8 @@
- (match_operand:HI 2 "register_operand" "a"))
- (set (match_operand:P 0 "register_operand" "=D")
- (plus:P (match_dup 1)
-- (const_int 2)))]
-+ (const_int 2)))
-+ (unspec [(const_int 0)] UNSPEC_STOS)]
- "!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
- "stosw"
- [(set_attr "type" "str")
-@@ -15958,7 +15963,8 @@
- (match_operand:QI 2 "register_operand" "a"))
- (set (match_operand:P 0 "register_operand" "=D")
- (plus:P (match_dup 1)
-- (const_int 1)))]
-+ (const_int 1)))
-+ (unspec [(const_int 0)] UNSPEC_STOS)]
- "!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
- "stosb"
- [(set_attr "type" "str")
-Index: gcc/config/v850/t-rtems
-===================================================================
---- a/src/gcc/config/v850/t-rtems (revision
-+++ b/src/gcc/config/v850/t-rtems (revision
-@@ -1,3 +1,7 @@
- # Custom multilibs for RTEMS
-
-+MULTILIB_OPTIONS = mv850/mv850e/mv850e2/mv850e2v3
-+MULTILIB_DIRNAMES = v850 v850e v850e2 v850e2v3
-+MULTILIB_MATCHES = mv850e=mv850e1
-+
- MULTILIB_MATCHES += mv850e=mv850es
+ {
+ rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, ctz, ctz_plus_1,ctz_cond;
+Index: gcc/config/arm/ldmstm.md
+===================================================================
+--- a/src/gcc/config/arm/ldmstm.md (revision
++++ b/src/gcc/config/arm/ldmstm.md (revision
+@@ -23,15 +23,15 @@
+
+ (define_insn "*ldm4_ia"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (match_operand:SI 5 "s_register_operand" "rk")))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 8))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 12))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+@@ -41,15 +41,15 @@
+
+ (define_insn "*thumb_ldm4_ia"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "low_register_operand" "")
+ (mem:SI (match_operand:SI 5 "s_register_operand" "l")))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 8))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 12))))])]
+ "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
+@@ -60,15 +60,15 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 5) (const_int 16)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (match_dup 5)))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 8))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 12))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
+@@ -80,15 +80,15 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 5 "s_register_operand" "+&l")
+ (plus:SI (match_dup 5) (const_int 16)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "low_register_operand" "")
+ (mem:SI (match_dup 5)))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 8))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 12))))])]
+ "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 5"
+@@ -98,13 +98,13 @@
+ (define_insn "*stm4_ia"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (match_operand:SI 5 "s_register_operand" "rk"))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
+- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+ "stm%(ia%)\t%5, {%1, %2, %3, %4}"
+ [(set_attr "type" "store4")
+@@ -115,13 +115,13 @@
+ [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 5) (const_int 16)))
+ (set (mem:SI (match_dup 5))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
+- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
+ "stm%(ia%)\t%5!, {%1, %2, %3, %4}"
+ [(set_attr "type" "store4")
+@@ -132,29 +132,29 @@
+ [(set (match_operand:SI 5 "s_register_operand" "+&l")
+ (plus:SI (match_dup 5) (const_int 16)))
+ (set (mem:SI (match_dup 5))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "low_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "low_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))
++ (match_operand:SI 3 "low_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
+- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 4 "low_register_operand" ""))])]
+ "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 5"
+ "stm%(ia%)\t%5!, {%1, %2, %3, %4}"
+ [(set_attr "type" "store4")])
+
+ (define_insn "*ldm4_ib"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
+ (const_int 4))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 8))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 12))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 16))))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+@@ -166,16 +166,16 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 5) (const_int 16)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 4))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 8))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 12))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 16))))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
+@@ -186,13 +186,13 @@
+ (define_insn "*stm4_ib"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int 4)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 16)))
+- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+ "stm%(ib%)\t%5, {%1, %2, %3, %4}"
+ [(set_attr "type" "store4")
+@@ -203,13 +203,13 @@
+ [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 5) (const_int 16)))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 16)))
+- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
+ "stm%(ib%)\t%5!, {%1, %2, %3, %4}"
+ [(set_attr "type" "store4")
+@@ -217,16 +217,16 @@
+
+ (define_insn "*ldm4_da"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
+ (const_int -12))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -8))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -4))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+ (mem:SI (match_dup 5)))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+ "ldm%(da%)\t%5, {%1, %2, %3, %4}"
+@@ -237,16 +237,16 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 5) (const_int -16)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -12))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -8))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -4))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+ (mem:SI (match_dup 5)))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
+ "ldm%(da%)\t%5!, {%1, %2, %3, %4}"
+@@ -256,13 +256,13 @@
+ (define_insn "*stm4_da"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int -12)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (match_dup 5))
+- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+ "stm%(da%)\t%5, {%1, %2, %3, %4}"
+ [(set_attr "type" "store4")
+@@ -273,13 +273,13 @@
+ [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 5) (const_int -16)))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (match_dup 5))
+- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
+ "stm%(da%)\t%5!, {%1, %2, %3, %4}"
+ [(set_attr "type" "store4")
+@@ -287,16 +287,16 @@
+
+ (define_insn "*ldm4_db"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
+ (const_int -16))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -12))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -8))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -4))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+@@ -308,16 +308,16 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 5) (const_int -16)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -16))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -12))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -8))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -4))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
+@@ -328,13 +328,13 @@
+ (define_insn "*stm4_db"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int -16)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
+- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+ "stm%(db%)\t%5, {%1, %2, %3, %4}"
+ [(set_attr "type" "store4")
+@@ -345,13 +345,13 @@
+ [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 5) (const_int -16)))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -16)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
+- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
+ "stm%(db%)\t%5!, {%1, %2, %3, %4}"
+ [(set_attr "type" "store4")
+@@ -466,12 +466,12 @@
+
+ (define_insn "*ldm3_ia"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (match_operand:SI 4 "s_register_operand" "rk")))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 8))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+@@ -481,12 +481,12 @@
+
+ (define_insn "*thumb_ldm3_ia"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "low_register_operand" "")
+ (mem:SI (match_operand:SI 4 "s_register_operand" "l")))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 8))))])]
+ "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
+@@ -497,12 +497,12 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 4) (const_int 12)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (match_dup 4)))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 8))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+@@ -514,12 +514,12 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 4 "s_register_operand" "+&l")
+ (plus:SI (match_dup 4) (const_int 12)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "low_register_operand" "")
+ (mem:SI (match_dup 4)))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 8))))])]
+ "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
+@@ -529,11 +529,11 @@
+ (define_insn "*stm3_ia"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (match_operand:SI 4 "s_register_operand" "rk"))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+ "stm%(ia%)\t%4, {%1, %2, %3}"
+ [(set_attr "type" "store3")
+@@ -544,11 +544,11 @@
+ [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 4) (const_int 12)))
+ (set (mem:SI (match_dup 4))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+ "stm%(ia%)\t%4!, {%1, %2, %3}"
+ [(set_attr "type" "store3")
+@@ -559,24 +559,24 @@
+ [(set (match_operand:SI 4 "s_register_operand" "+&l")
+ (plus:SI (match_dup 4) (const_int 12)))
+ (set (mem:SI (match_dup 4))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "low_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "low_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 3 "low_register_operand" ""))])]
+ "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
+ "stm%(ia%)\t%4!, {%1, %2, %3}"
+ [(set_attr "type" "store3")])
+
+ (define_insn "*ldm3_ib"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
+ (const_int 4))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 8))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 12))))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+@@ -588,13 +588,13 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 4) (const_int 12)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 4))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 8))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 12))))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+@@ -605,11 +605,11 @@
+ (define_insn "*stm3_ib"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int 4)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 12)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+ "stm%(ib%)\t%4, {%1, %2, %3}"
+ [(set_attr "type" "store3")
+@@ -620,11 +620,11 @@
+ [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 4) (const_int 12)))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 12)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+ "stm%(ib%)\t%4!, {%1, %2, %3}"
+ [(set_attr "type" "store3")
+@@ -632,13 +632,13 @@
+
+ (define_insn "*ldm3_da"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
+ (const_int -8))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int -4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (match_dup 4)))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+ "ldm%(da%)\t%4, {%1, %2, %3}"
+@@ -649,13 +649,13 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 4) (const_int -12)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int -8))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int -4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (match_dup 4)))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+ "ldm%(da%)\t%4!, {%1, %2, %3}"
+@@ -665,11 +665,11 @@
+ (define_insn "*stm3_da"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int -8)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (match_dup 4))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+ "stm%(da%)\t%4, {%1, %2, %3}"
+ [(set_attr "type" "store3")
+@@ -680,11 +680,11 @@
+ [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 4) (const_int -12)))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (match_dup 4))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+ "stm%(da%)\t%4!, {%1, %2, %3}"
+ [(set_attr "type" "store3")
+@@ -692,13 +692,13 @@
+
+ (define_insn "*ldm3_db"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
+ (const_int -12))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int -8))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int -4))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+@@ -710,13 +710,13 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 4) (const_int -12)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int -12))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int -8))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int -4))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+@@ -727,11 +727,11 @@
+ (define_insn "*stm3_db"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int -12)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+ "stm%(db%)\t%4, {%1, %2, %3}"
+ [(set_attr "type" "store3")
+@@ -742,11 +742,11 @@
+ [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 4) (const_int -12)))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int -12)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+ "stm%(db%)\t%4!, {%1, %2, %3}"
+ [(set_attr "type" "store3")
+@@ -847,9 +847,9 @@
+
+ (define_insn "*ldm2_ia"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (match_operand:SI 3 "s_register_operand" "rk")))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int 4))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
+@@ -859,9 +859,9 @@
+
+ (define_insn "*thumb_ldm2_ia"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "low_register_operand" "")
+ (mem:SI (match_operand:SI 3 "s_register_operand" "l")))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int 4))))])]
+ "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 2"
+@@ -872,9 +872,9 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 3) (const_int 8)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (match_dup 3)))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int 4))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+@@ -886,9 +886,9 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 3 "s_register_operand" "+&l")
+ (plus:SI (match_dup 3) (const_int 8)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "low_register_operand" "")
+ (mem:SI (match_dup 3)))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int 4))))])]
+ "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
+@@ -898,9 +898,9 @@
+ (define_insn "*stm2_ia"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (match_operand:SI 3 "s_register_operand" "rk"))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
+ "stm%(ia%)\t%3, {%1, %2}"
+ [(set_attr "type" "store2")
+@@ -911,9 +911,9 @@
+ [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 3) (const_int 8)))
+ (set (mem:SI (match_dup 3))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+ "stm%(ia%)\t%3!, {%1, %2}"
+ [(set_attr "type" "store2")
+@@ -924,19 +924,19 @@
+ [(set (match_operand:SI 3 "s_register_operand" "+&l")
+ (plus:SI (match_dup 3) (const_int 8)))
+ (set (mem:SI (match_dup 3))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "low_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 2 "low_register_operand" ""))])]
+ "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
+ "stm%(ia%)\t%3!, {%1, %2}"
+ [(set_attr "type" "store2")])
+
+ (define_insn "*ldm2_ib"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
+ (const_int 4))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int 8))))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
+@@ -948,10 +948,10 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 3) (const_int 8)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int 4))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int 8))))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+@@ -962,9 +962,9 @@
+ (define_insn "*stm2_ib"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int 4)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int 8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
+ "stm%(ib%)\t%3, {%1, %2}"
+ [(set_attr "type" "store2")
+@@ -975,9 +975,9 @@
+ [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 3) (const_int 8)))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int 8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+ "stm%(ib%)\t%3!, {%1, %2}"
+ [(set_attr "type" "store2")
+@@ -985,10 +985,10 @@
+
+ (define_insn "*ldm2_da"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
+ (const_int -4))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (match_dup 3)))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
+ "ldm%(da%)\t%3, {%1, %2}"
+@@ -999,10 +999,10 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 3) (const_int -8)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int -4))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (match_dup 3)))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+ "ldm%(da%)\t%3!, {%1, %2}"
+@@ -1012,9 +1012,9 @@
+ (define_insn "*stm2_da"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int -4)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (match_dup 3))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
+ "stm%(da%)\t%3, {%1, %2}"
+ [(set_attr "type" "store2")
+@@ -1025,9 +1025,9 @@
+ [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 3) (const_int -8)))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (match_dup 3))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+ "stm%(da%)\t%3!, {%1, %2}"
+ [(set_attr "type" "store2")
+@@ -1035,10 +1035,10 @@
+
+ (define_insn "*ldm2_db"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
+ (const_int -8))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int -4))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
+@@ -1050,10 +1050,10 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 3) (const_int -8)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int -8))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int -4))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+@@ -1064,9 +1064,9 @@
+ (define_insn "*stm2_db"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int -8)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
+ "stm%(db%)\t%3, {%1, %2}"
+ [(set_attr "type" "store2")
+@@ -1077,9 +1077,9 @@
+ [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 3) (const_int -8)))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int -8)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+ "stm%(db%)\t%3!, {%1, %2}"
+ [(set_attr "type" "store2")
+Index: gcc/config/arm/predicates.md
+===================================================================
+--- a/src/gcc/config/arm/predicates.md (revision
++++ b/src/gcc/config/arm/predicates.md (revision
+@@ -31,11 +31,11 @@
+ || REGNO_REG_CLASS (REGNO (op)) != NO_REGS));
+ })
+
+-;; Any hard register.
+-(define_predicate "arm_hard_register_operand"
++;; Any general register.
++(define_predicate "arm_hard_general_register_operand"
+ (match_code "reg")
+ {
+- return REGNO (op) < FIRST_PSEUDO_REGISTER;
++ return REGNO (op) <= LAST_ARM_REGNUM;
+ })
+
+ ;; A low register.
+Index: gcc/config/arm/arm-ldmstm.ml
+===================================================================
+--- a/src/gcc/config/arm/arm-ldmstm.ml (revision
++++ b/src/gcc/config/arm/arm-ldmstm.ml (revision
+@@ -67,10 +67,13 @@
+ Printf.sprintf ("(match_operand:SI %d \"s_register_operand\" \"%s%s\")")
+ (nregs + 1) (inout_constr op_type) (constr thumb)
+
++let reg_predicate thumb =
++ if thumb then "low_register_operand" else "arm_hard_general_register_operand"
++
+ let write_ldm_set thumb nregs offset opnr first =
+ let indent = " " in
+ Printf.printf "%s" (if first then " [" else indent);
+- Printf.printf "(set (match_operand:SI %d \"arm_hard_register_operand\" \"\")\n" opnr;
++ Printf.printf "(set (match_operand:SI %d \"%s\" \"\")\n" opnr (reg_predicate thumb);
+ Printf.printf "%s (mem:SI " indent;
+ begin if offset != 0 then Printf.printf "(plus:SI " end;
+ Printf.printf "%s" (destreg nregs first IN thumb);
+@@ -84,7 +87,7 @@
+ begin if offset != 0 then Printf.printf "(plus:SI " end;
+ Printf.printf "%s" (destreg nregs first IN thumb);
+ begin if offset != 0 then Printf.printf " (const_int %d))" offset end;
+- Printf.printf ")\n%s (match_operand:SI %d \"arm_hard_register_operand\" \"\"))" indent opnr
++ Printf.printf ")\n%s (match_operand:SI %d \"%s\" \"\"))" indent opnr (reg_predicate thumb)
+
+ let write_ldm_peep_set extra_indent nregs opnr first =
+ let indent = " " ^ extra_indent in
+Index: gcc/config/pa/pa.c
+===================================================================
+--- a/src/gcc/config/pa/pa.c (revision
++++ b/src/gcc/config/pa/pa.c (revision
+@@ -7475,7 +7475,7 @@
+ if (!TARGET_LONG_CALLS && distance < MAX_PCREL17F_OFFSET)
+ return 8;
+
+- if (TARGET_LONG_ABS_CALL && !flag_pic)
++ if (!flag_pic)
+ return 12;
+
+ return 24;
+@@ -8040,7 +8040,8 @@
+ return 12;
+
+ if (TARGET_FAST_INDIRECT_CALLS
+- || (!TARGET_PORTABLE_RUNTIME
++ || (!TARGET_LONG_CALLS
++ && !TARGET_PORTABLE_RUNTIME
+ && ((TARGET_PA_20 && !TARGET_SOM && distance < 7600000)
+ || distance < MAX_PCREL17F_OFFSET)))
+ return 8;
+Index: gcc/config/mips/driver-native.c
+===================================================================
+--- a/src/gcc/config/mips/driver-native.c (revision
++++ b/src/gcc/config/mips/driver-native.c (revision
+@@ -116,11 +116,17 @@
+ if (strncmp (buf, "cpu model", sizeof ("cpu model") - 1) == 0)
+ {
+ if (strstr (buf, "Godson2 V0.2") != NULL
+- || strstr (buf, "Loongson-2 V0.2") != NULL)
++ || strstr (buf, "Loongson-2 V0.2") != NULL
++ || strstr (buf, "Loongson-2E") != NULL)
+ cpu = "loongson2e";
+ else if (strstr (buf, "Godson2 V0.3") != NULL
+- || strstr (buf, "Loongson-2 V0.3") != NULL)
++ || strstr (buf, "Loongson-2 V0.3") != NULL
++ || strstr (buf, "Loongson-2F") != NULL)
+ cpu = "loongson2f";
++ else if (strstr (buf, "Godson3 V0.5") != NULL
++ || strstr (buf, "Loongson-3 V0.5") != NULL
++ || strstr (buf, "Loongson-3A") != NULL)
++ cpu = "loongson3a";
+ else if (strstr (buf, "SiByte SB1") != NULL)
+ cpu = "sb1";
+ else if (strstr (buf, "R5000") != NULL)
+Index: gcc/regcprop.c
+===================================================================
+--- a/src/gcc/regcprop.c (revision
++++ b/src/gcc/regcprop.c (revision
+@@ -741,6 +741,7 @@
+ int n_ops, i, alt, predicated;
+ bool is_asm, any_replacements;
+ rtx set;
++ rtx link;
+ bool replaced[MAX_RECOG_OPERANDS];
+ bool changed = false;
+
+@@ -808,6 +809,23 @@
+ if (recog_op_alt[i][alt].earlyclobber)
+ kill_value (recog_data.operand[i], vd);
+
++ /* If we have dead sets in the insn, then we need to note these as we
++ would clobbers. */
++ for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
++ {
++ if (REG_NOTE_KIND (link) == REG_UNUSED)
++ {
++ kill_value (XEXP (link, 0), vd);
++ /* Furthermore, if the insn looked like a single-set,
++ but the dead store kills the source value of that
++ set, then we can no-longer use the plain move
++ special case below. */
++ if (set
++ && reg_overlap_mentioned_p (XEXP (link, 0), SET_SRC (set)))
++ set = NULL;
++ }
++ }
++
+ /* Special-case plain move instructions, since we may well
+ be able to do the move from a different register class. */
+ if (set && REG_P (SET_SRC (set)))
+Index: libgfortran/ChangeLog
+===================================================================
+--- a/src/libgfortran/ChangeLog (revision
++++ b/src/libgfortran/ChangeLog (revision
+@@ -1,3 +1,14 @@
++2014-02-15 Jerry DeLisle <jvdelisle@gcc.gnu>
++ Dominique d'Humieres <dominiq@lps.ens.fr>
++
++ Backport from mainline
++ PR libfortran/59771
++ PR libfortran/59774
++ PR libfortran/59836
++ * io/write_float.def (output_float): Fix wrong handling of the
++ Fw.0 format.
++ (output_float_FMT_G_): Fixes rounding issues with -m32.
++
+ 2013-07-03 Uros Bizjak <ubizjak@gmail.com>
+
+ Backport from mainline
+Index: libgfortran/io/write_float.def
+===================================================================
+--- a/src/libgfortran/io/write_float.def (revision
++++ b/src/libgfortran/io/write_float.def (revision
+@@ -273,7 +273,7 @@
+ updown:
+
+ rchar = '0';
+- if (w > 0 && d == 0 && p == 0)
++ if (ft != FMT_F && w > 0 && d == 0 && p == 0)
+ nbefore = 1;
+ /* Scan for trailing zeros to see if we really need to round it. */
+ for(i = nbefore + nafter; i < ndigits; i++)
+@@ -288,11 +288,20 @@
+ if (nbefore + nafter == 0)
+ {
+ ndigits = 0;
+- if (nzero_real == d && digits[0] >= rchar)
++ if ((d == 0 || nzero_real == d) && digits[0] >= rchar)
+ {
+ /* We rounded to zero but shouldn't have */
+- nzero--;
+- nafter = 1;
++ if (d != 0)
++ {
++ nzero--;
++ nafter = 1;
++ }
++ else
++ {
++ /* Handle the case Fw.0 and value < 1.0 */
++ nbefore = 1;
++ digits--;
++ }
+ digits[0] = '1';
+ ndigits = 1;
+ }
+@@ -828,12 +837,13 @@
+ int d = f->u.real.d;\
+ int w = f->u.real.w;\
+ fnode *newf;\
+- GFC_REAL_ ## x rexp_d, r = 0.5;\
++ GFC_REAL_ ## x exp_d, r = 0.5, r_sc;\
+ int low, high, mid;\
+ int ubound, lbound;\
+ char *p, pad = ' ';\
+ int save_scale_factor, nb = 0;\
+ try result;\
++ volatile GFC_REAL_ ## x temp;\
+ \
+ save_scale_factor = dtp->u.p.scale_factor;\
+ newf = (fnode *) get_mem (sizeof (fnode));\
+@@ -853,10 +863,13 @@
+ break;\
+ }\
+ \
+- rexp_d = calculate_exp_ ## x (-d);\
+- if ((m > 0.0 && ((m < 0.1 - 0.1 * r * rexp_d) || (rexp_d * (m + r) >= 1.0)))\
++ exp_d = calculate_exp_ ## x (d);\
++ r_sc = (1 - r / exp_d);\
++ temp = 0.1 * r_sc;\
++ if ((m > 0.0 && ((m < temp) || (r >= (exp_d - m))))\
+ || ((m == 0.0) && !(compile_options.allow_std\
+- & (GFC_STD_F2003 | GFC_STD_F2008))))\
++ & (GFC_STD_F2003 | GFC_STD_F2008)))\
++ || d == 0)\
+ { \
+ newf->format = FMT_E;\
+ newf->u.real.w = w;\
+@@ -874,10 +887,9 @@
+ \
+ while (low <= high)\
+ { \
+- volatile GFC_REAL_ ## x temp;\
+ mid = (low + high) / 2;\
+ \
+- temp = (calculate_exp_ ## x (mid - 1) * (1 - r * rexp_d));\
++ temp = (calculate_exp_ ## x (mid - 1) * r_sc);\
+ \
+ if (m < temp)\
+ { \
+Index: .
+===================================================================
+--- a/src/. (revision
++++ b/src/. (revision
+
+Property changes on: .
+___________________________________________________________________
+Modified: svn:mergeinfo
+ Merged /trunk:r206124-206126
diff --git a/debian/patches/svn-updates.diff b/debian/patches/svn-updates.diff
index 6a3cbde..a43db5f 100644
--- a/debian/patches/svn-updates.diff
+++ b/debian/patches/svn-updates.diff
@@ -1,10 +1,10 @@
-# DP: updates from the 4.7 branch upto 20130517 (r199025).
+# DP: updates from the 4.7 branch upto 20140320 (r208044).
last_updated()
{
cat > ${dir}LAST_UPDATED <<EOF
-Fri May 17 19:37:13 CEST 2013
-Fri May 17 17:37:13 UTC 2013 (revision 199025)
+Thu Mar 20 12:04:07 CET 2014
+Thu Mar 20 11:04:07 UTC 2014 (revision 208693)
EOF
}
@@ -12,6 +12,38 @@ LANG=C svn diff svn://gcc.gnu.org/svn/gcc/tags/gcc_4_7_3_release svn://gcc.gnu.o
| sed -r 's,^--- (\S+)\t(\S+)(.*)$,--- a/src/\1\t\2,;s,^\+\+\+ (\S+)\t(\S+)(.*)$,+++ b/src/\1\t\2,' \
| awk '/^Index:.*\.(class|texi)/ {skip=1; next} /^Index:/ { skip=0 } skip==0'
+Index: libstdc++-v3/src/c++98/compatibility.cc
+===================================================================
+--- a/src/libstdc++-v3/src/c++98/compatibility.cc (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/src/c++98/compatibility.cc (.../branches/gcc-4_7-branch)
+@@ -518,14 +518,21 @@
+ extern __attribute__((used, weak)) const char _ZTSPe[3] = "Pe";
+ extern __attribute__((used, weak)) const char _ZTSPKe[4] = "PKe";
+ extern __attribute__((used, weak)) const void * const _ZTIe[2]
+- = { (void *) &_ZTVN10__cxxabiv123__fundamental_type_infoE[2],
+- (void *) _ZTSe };
++ = { reinterpret_cast<const void *>
++ (&_ZTVN10__cxxabiv123__fundamental_type_infoE[2]),
++ reinterpret_cast<const void *>(_ZTSe) };
+ extern __attribute__((used, weak)) const void * const _ZTIPe[4]
+- = { (void *) &_ZTVN10__cxxabiv119__pointer_type_infoE[2],
+- (void *) _ZTSPe, (void *) 0L, (void *) _ZTIe };
++ = { reinterpret_cast<const void *>
++ (&_ZTVN10__cxxabiv119__pointer_type_infoE[2]),
++ reinterpret_cast<const void *>(_ZTSPe),
++ reinterpret_cast<const void *>(0L),
++ reinterpret_cast<const void *>(_ZTIe) };
+ extern __attribute__((used, weak)) const void * const _ZTIPKe[4]
+- = { (void *) &_ZTVN10__cxxabiv119__pointer_type_infoE[2],
+- (void *) _ZTSPKe, (void *) 1L, (void *) _ZTIe };
++ = { reinterpret_cast<const void *>
++ (&_ZTVN10__cxxabiv119__pointer_type_infoE[2]),
++ reinterpret_cast<const void *>(_ZTSPKe),
++ reinterpret_cast<const void *>(1L),
++ reinterpret_cast<const void *>(_ZTIe) };
+ #endif // _GLIBCXX_LONG_DOUBLE_COMPAT
+
+ #ifdef _GLIBCXX_SYMVER_DARWIN
Index: libstdc++-v3/src/c++11/system_error.cc
===================================================================
--- a/src/libstdc++-v3/src/c++11/system_error.cc (.../tags/gcc_4_7_3_release)
@@ -40,6 +72,8448 @@ Index: libstdc++-v3/src/c++11/future.cc
return __fec;
}
}
+Index: libstdc++-v3/doc/xml/manual/status_cxx2011.xml
+===================================================================
+--- a/src/libstdc++-v3/doc/xml/manual/status_cxx2011.xml (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/xml/manual/status_cxx2011.xml (.../branches/gcc-4_7-branch)
+@@ -885,10 +885,11 @@
+ <entry/>
+ </row>
+ <row>
++ <?dbhtml bgcolor="#B0B0B0" ?>
+ <entry>20.9.7.6</entry>
+ <entry>Other transformations</entry>
+- <entry>Y</entry>
+- <entry/>
++ <entry>Partial</entry>
++ <entry>Missing <code>aligned_union</code>.</entry>
+ </row>
+ <row>
+ <entry>20.10</entry>
+Index: libstdc++-v3/doc/xml/manual/spine.xml
+===================================================================
+--- a/src/libstdc++-v3/doc/xml/manual/spine.xml (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/xml/manual/spine.xml (.../branches/gcc-4_7-branch)
+@@ -20,6 +20,7 @@
+ <year>2010</year>
+ <year>2011</year>
+ <year>2012</year>
++ <year>2013</year>
+ <holder>
+ <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.fsf.org">FSF</link>
+ </holder>
+Index: libstdc++-v3/doc/html/bk02.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/bk02.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/bk02.html (.../branches/gcc-4_7-branch)
+@@ -1,3 +1,2 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/bk03.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/bk03.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/bk03.html (.../branches/gcc-4_7-branch)
+@@ -1,3 +1,2 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/faq.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/faq.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/faq.html (.../branches/gcc-4_7-branch)
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Frequently Asked Questions"><div class="titlepage"><div><div><h1 class="title"><a id="faq"></a>Frequently Asked Questions</h1></div><div><p class="copyright">Copyright ©
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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 ©
+ 2008, 2010
+
+ <a class="link" href="http://www.fsf.org" target="_top">FSF</a>
+- </p></div></div><hr /></div><div class="qandaset" title="Frequently Asked Questions"><a id="idp2990960"></a><dl><dt></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
++ </p></div></div><hr /></div><div class="qandaset"><a id="idm269998601376"></a><dl><dt></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
+ What is libstdc++?
+ </a></dt><dt>1.2. <a href="faq.html#faq.why">
+ Why should I use libstdc++?
+@@ -91,7 +90,7 @@
+ What's an ABI and why is it so messy?
+ </a></dt><dt>7.8. <a href="faq.html#faq.size_equals_capacity">
+ How do I make std::vector&lt;T&gt;::capacity() == std::vector&lt;T&gt;::size?
+- </a></dt></dl></dd></dl><table border="0" width="100%" summary="Q and A Set"><col align="left" width="1%" /><col /><tbody><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>1.1. <a href="faq.html#faq.what">
++ </a></dt></dl></dd></dl><table border="0" style="width: 100%;"><colgroup><col align="left" width="1%" /><col /></colgroup><tbody><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>1.1. <a href="faq.html#faq.what">
+ What is libstdc++?
+ </a></dt><dt>1.2. <a href="faq.html#faq.why">
+ Why should I use libstdc++?
+@@ -105,7 +104,7 @@
+ What happened to the older libg++? I need that!
+ </a></dt><dt>1.7. <a href="faq.html#faq.more_questions">
+ What if I have more questions?
+- </a></dt></dl></td></tr><tr class="question" title="1.1."><td align="left" valign="top"><a id="faq.what"></a><a id="faq.what.q"></a><p><strong>1.1.</strong></p></td><td align="left" valign="top"><p>
++ </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what"></a><a id="faq.what.q"></a><p><strong>1.1.</strong></p></td><td align="left" valign="top"><p>
+ What is libstdc++?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="faq.what.a"></a></td><td align="left" valign="top"><p>
+ The GNU Standard C++ Library v3 is an ongoing project to
+@@ -115,7 +114,7 @@
+ bleeding-edge code, the up-to-date source is available over
+ anonymous SVN, and can even be browsed over
+ the <a class="link" href="http://gcc.gnu.org/svn.html" target="_top">web</a>.
+- </p></td></tr><tr class="question" title="1.2."><td align="left" valign="top"><a id="faq.why"></a><a id="q-why"></a><p><strong>1.2.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.why"></a><a id="q-why"></a><p><strong>1.2.</strong></p></td><td align="left" valign="top"><p>
+ Why should I use libstdc++?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-why"></a></td><td align="left" valign="top"><p>
+ The completion of the ISO C++ standardization gave the C++
+@@ -141,7 +140,7 @@
+ <code class="classname">vector&lt;&gt;</code>, iostreams, and algorithms.)
+ Programmers will no longer need to <span class="quote">“<span class="quote">roll their own</span>”</span>
+ nor be worried about platform-specific incompatibilities.
+- </p></td></tr><tr class="question" title="1.3."><td align="left" valign="top"><a id="faq.who"></a><a id="q-who"></a><p><strong>1.3.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.who"></a><a id="q-who"></a><p><strong>1.3.</strong></p></td><td align="left" valign="top"><p>
+ Who's in charge of it?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-who"></a></td><td align="left" valign="top"><p>
+ The libstdc++ project is contributed to by several developers
+@@ -155,13 +154,13 @@
+ archives, is open to everyone. You can read instructions for
+ doing so on the <a class="link" href="http://gcc.gnu.org/libstdc++/" target="_top">homepage</a>.
+ If you have questions, ideas, code, or are just curious, sign up!
+- </p></td></tr><tr class="question" title="1.4."><td align="left" valign="top"><a id="faq.when"></a><a id="q-when"></a><p><strong>1.4.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.when"></a><a id="q-when"></a><p><strong>1.4.</strong></p></td><td align="left" valign="top"><p>
+ When is libstdc++ going to be finished?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-when"></a></td><td align="left" valign="top"><p>
+ Nathan Myers gave the best of all possible answers, responding to
+ a Usenet article asking this question: <span class="emphasis"><em>Sooner, if you
+ help.</em></span>
+- </p></td></tr><tr class="question" title="1.5."><td align="left" valign="top"><a id="faq.how"></a><a id="q-how"></a><p><strong>1.5.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how"></a><a id="q-how"></a><p><strong>1.5.</strong></p></td><td align="left" valign="top"><p>
+ How do I contribute to the effort?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how"></a></td><td align="left" valign="top"><p>
+ Here is <a class="link" href="manual/appendix_contributing.html" title="Appendix A.  Contributing">a page devoted to
+@@ -172,7 +171,7 @@
+ anybody who is willing to help write documentation, for example,
+ or has found a bug in code that we all thought was working and is
+ willing to provide details, is more than welcome!
+- </p></td></tr><tr class="question" title="1.6."><td align="left" valign="top"><a id="faq.whereis_old"></a><a id="q-whereis_old"></a><p><strong>1.6.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.whereis_old"></a><a id="q-whereis_old"></a><p><strong>1.6.</strong></p></td><td align="left" valign="top"><p>
+ What happened to the older libg++? I need that!
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-whereis_old"></a></td><td align="left" valign="top"><p>
+ The most recent libg++ README states that libg++ is no longer
+@@ -180,7 +179,7 @@
+ projects, and is only being kicked along to support older code.
+ </p><p>
+ More information in the <a class="link" href="manual/backwards.html" title="Backwards Compatibility">backwards compatibility documentation</a>
+- </p></td></tr><tr class="question" title="1.7."><td align="left" valign="top"><a id="faq.more_questions"></a><a id="q-more_questions"></a><p><strong>1.7.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.more_questions"></a><a id="q-more_questions"></a><p><strong>1.7.</strong></p></td><td align="left" valign="top"><p>
+ What if I have more questions?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-more_questions"></a></td><td align="left" valign="top"><p>
+ If you have read the README file, and your question remains
+@@ -201,17 +200,17 @@
+ How is that different from the GNU {Lesser,Library} GPL?
+ </a></dt><dt>2.4. <a href="faq.html#faq.license.what_restrictions">
+ I see. So, what restrictions are there on programs that use the library?
+- </a></dt></dl></td></tr><tr class="question" title="2.1."><td align="left" valign="top"><a id="faq.license.what"></a><a id="q-license.what"></a><p><strong>2.1.</strong></p></td><td align="left" valign="top"><p>
++ </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.what"></a><a id="q-license.what"></a><p><strong>2.1.</strong></p></td><td align="left" valign="top"><p>
+ What are the license terms for libstdc++?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what"></a></td><td align="left" valign="top"><p>
+ See <a class="link" href="manual/license.html" title="License">our license description</a>
+ for these and related questions.
+- </p></td></tr><tr class="question" title="2.2."><td align="left" valign="top"><a id="faq.license.any_program"></a><a id="q-license.any_program"></a><p><strong>2.2.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.any_program"></a><a id="q-license.any_program"></a><p><strong>2.2.</strong></p></td><td align="left" valign="top"><p>
+ So any program which uses libstdc++ falls under the GPL?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.any_program"></a></td><td align="left" valign="top"><p>
+ No. The special exception permits use of the library in
+ proprietary applications.
+- </p></td></tr><tr class="question" title="2.3."><td align="left" valign="top"><a id="faq.license.lgpl"></a><a id="q-license.lgpl"></a><p><strong>2.3.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.lgpl"></a><a id="q-license.lgpl"></a><p><strong>2.3.</strong></p></td><td align="left" valign="top"><p>
+ How is that different from the GNU {Lesser,Library} GPL?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.lgpl"></a></td><td align="left" valign="top"><p>
+ The LGPL requires that users be able to replace the LGPL code with a
+@@ -221,7 +220,7 @@
+ are expanded inside the code that uses the library. So to allow people
+ to replace the library code, someone using the library would have to
+ distribute their own source, rendering the LGPL equivalent to the GPL.
+- </p></td></tr><tr class="question" title="2.4."><td align="left" valign="top"><a id="faq.license.what_restrictions"></a><a id="q-license.what_restrictions"></a><p><strong>2.4.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.what_restrictions"></a><a id="q-license.what_restrictions"></a><p><strong>2.4.</strong></p></td><td align="left" valign="top"><p>
+ I see. So, what restrictions are there on programs that use the library?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what_restrictions"></a></td><td align="left" valign="top"><p>
+ None. We encourage such programs to be released as open source,
+@@ -234,7 +233,7 @@
+ What's libsupc++?
+ </a></dt><dt>3.6. <a href="faq.html#faq.size">
+ This library is HUGE!
+- </a></dt></dl></td></tr><tr class="question" title="3.1."><td align="left" valign="top"><a id="faq.how_to_install"></a><a id="q-how_to_install"></a><p><strong>3.1.</strong></p></td><td align="left" valign="top"><p>How do I install libstdc++?
++ </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how_to_install"></a><a id="q-how_to_install"></a><p><strong>3.1.</strong></p></td><td align="left" valign="top"><p>How do I install libstdc++?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_install"></a></td><td align="left" valign="top"><p>
+ Often libstdc++ comes pre-installed as an integral part of many
+ existing GNU/Linux and Unix systems, as well as many embedded
+@@ -247,7 +246,7 @@
+ documentation</a> for detailed
+ instructions. You may wish to browse those files ahead
+ of time to get a feel for what's required.
+- </p></td></tr><tr class="question" title="3.2."><td align="left" valign="top"><a id="faq.how_to_get_sources"></a><a id="q-how_to_get_sources"></a><p><strong>3.2.</strong></p></td><td align="left" valign="top"><p>How does one get current libstdc++ sources?
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how_to_get_sources"></a><a id="q-how_to_get_sources"></a><p><strong>3.2.</strong></p></td><td align="left" valign="top"><p>How does one get current libstdc++ sources?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_get_sources"></a></td><td align="left" valign="top"><p>
+ Libstdc++ sources for all official releases can be obtained as
+ part of the GCC sources, available from various sites and
+@@ -272,7 +271,7 @@
+ For more information
+ see <a class="link" href="http://gcc.gnu.org/svn.html" target="_top"><acronym class="acronym">SVN</acronym>
+ details</a>.
+- </p></td></tr><tr class="question" title="3.3."><td align="left" valign="top"><a id="faq.how_to_test"></a><a id="q-how_to_test"></a><p><strong>3.3.</strong></p></td><td align="left" valign="top"><p>How do I know if it works?
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how_to_test"></a><a id="q-how_to_test"></a><p><strong>3.3.</strong></p></td><td align="left" valign="top"><p>How do I know if it works?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_test"></a></td><td align="left" valign="top"><p>
+ Libstdc++ comes with its own validation testsuite, which includes
+ conformance testing, regression testing, ABI testing, and
+@@ -283,7 +282,7 @@
+ If you find bugs in the testsuite programs themselves, or if you
+ think of a new test program that should be added to the suite,
+ <span class="emphasis"><em>please</em></span> write up your idea and send it to the list!
+- </p></td></tr><tr class="question" title="3.4."><td align="left" valign="top"><a id="faq.how_to_set_paths"></a><a id="q-how_to_set_paths"></a><p><strong>3.4.</strong></p></td><td align="left" valign="top"><p>How do I insure that the dynamically linked library will be found?
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how_to_set_paths"></a><a id="q-how_to_set_paths"></a><p><strong>3.4.</strong></p></td><td align="left" valign="top"><p>How do I insure that the dynamically linked library will be found?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_set_paths"></a></td><td align="left" valign="top"><p>
+ Depending on your platform and library version, the error message might
+ be similar to one of the following:
+@@ -318,7 +317,7 @@
+ </p><p>
+ Using LD_LIBRARY_PATH is not always the best solution, <a class="link" href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic" title="Finding Dynamic or Shared Libraries">Finding Dynamic or Shared
+ Libraries</a> in the manual gives some alternatives.
+- </p></td></tr><tr class="question" title="3.5."><td align="left" valign="top"><a id="faq.what_is_libsupcxx"></a><a id="q-what_is_libsupcxx"></a><p><strong>3.5.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what_is_libsupcxx"></a><a id="q-what_is_libsupcxx"></a><p><strong>3.5.</strong></p></td><td align="left" valign="top"><p>
+ What's libsupc++?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_libsupcxx"></a></td><td align="left" valign="top"><p>
+ If the only functions from <code class="filename">libstdc++.a</code>
+@@ -335,7 +334,7 @@
+ using anything from the rest of the library, such as IOStreams
+ or vectors, then you'll still need pieces from
+ <code class="filename">libstdc++.a</code>.
+- </p></td></tr><tr class="question" title="3.6."><td align="left" valign="top"><a id="faq.size"></a><a id="q-size"></a><p><strong>3.6.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.size"></a><a id="q-size"></a><p><strong>3.6.</strong></p></td><td align="left" valign="top"><p>
+ This library is HUGE!
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-size"></a></td><td align="left" valign="top"><p>
+ Usually the size of libraries on disk isn't noticeable. When a
+@@ -382,7 +381,7 @@
+ Recent GNU/Linux glibc required?
+ </a></dt><dt>4.8. <a href="faq.html#faq.freebsd_wchar">
+ Can't use wchar_t/wstring on FreeBSD
+- </a></dt></dl></td></tr><tr class="question" title="4.1."><td align="left" valign="top"><a id="faq.other_compilers"></a><a id="q-other_compilers"></a><p><strong>4.1.</strong></p></td><td align="left" valign="top"><p>
++ </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.other_compilers"></a><a id="q-other_compilers"></a><p><strong>4.1.</strong></p></td><td align="left" valign="top"><p>
+ Can libstdc++ be used with non-GNU compilers?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-other_compilers"></a></td><td align="left" valign="top"><p>
+ Perhaps.
+@@ -402,7 +401,7 @@
+ been known to work with versions of the EDG C++ compiler, and
+ vendor-specific proprietary C++ compilers such as the Intel ICC
+ C++ compiler.
+- </p></td></tr><tr class="question" title="4.2."><td align="left" valign="top"><a id="faq.solaris_long_long"></a><a id="q-solaris_long_long"></a><p><strong>4.2.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.solaris_long_long"></a><a id="q-solaris_long_long"></a><p><strong>4.2.</strong></p></td><td align="left" valign="top"><p>
+ No 'long long' type on Solaris?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-solaris_long_long"></a></td><td align="left" valign="top"><p>
+ By default we try to support the C99 <span class="type">long long</span> type.
+@@ -414,7 +413,7 @@
+ commonly reported platform affected was Solaris.
+ </p><p>
+ This has been fixed for libstdc++ releases greater than 3.0.3.
+- </p></td></tr><tr class="question" title="4.3."><td align="left" valign="top"><a id="faq.predefined"></a><a id="q-predefined"></a><p><strong>4.3.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.predefined"></a><a id="q-predefined"></a><p><strong>4.3.</strong></p></td><td align="left" valign="top"><p>
+ <code class="constant">_XOPEN_SOURCE</code> and <code class="constant">_GNU_SOURCE</code> are always defined?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-predefined"></a></td><td align="left" valign="top"><p>On Solaris, g++ (but not gcc) always defines the preprocessor
+ macro <code class="constant">_XOPEN_SOURCE</code>. On GNU/Linux, the same happens
+@@ -443,13 +442,13 @@
+ <a class="link" href="http://gcc.gnu.org/cgi-bin/htsearch?method=and&amp;format=builtin-long&amp;sort=score&amp;words=_XOPEN_SOURCE+Solaris" target="_top">quite a bit</a>.
+ </p><p>This method is something of a wart. We'd like to find a cleaner
+ solution, but nobody yet has contributed the time.
+- </p></td></tr><tr class="question" title="4.4."><td align="left" valign="top"><a id="faq.darwin_ctype"></a><a id="q-darwin_ctype"></a><p><strong>4.4.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.darwin_ctype"></a><a id="q-darwin_ctype"></a><p><strong>4.4.</strong></p></td><td align="left" valign="top"><p>
+ Mac OS X <code class="filename">ctype.h</code> is broken! How can I fix it?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-darwin_ctype"></a></td><td align="left" valign="top"><p>This is a long-standing bug in the OS X support. Fortunately,
+ the patch is quite simple, and well-known.
+ <a class="link" href="http://gcc.gnu.org/ml/gcc/2002-03/msg00817.html" target="_top"> Here's a
+ link to the solution</a>.
+- </p></td></tr><tr class="question" title="4.5."><td align="left" valign="top"><a id="faq.threads_i386"></a><a id="q-threads_i386"></a><p><strong>4.5.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.threads_i386"></a><a id="q-threads_i386"></a><p><strong>4.5.</strong></p></td><td align="left" valign="top"><p>
+ Threading is broken on i386?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-threads_i386"></a></td><td align="left" valign="top"><p>
+ </p><p>Support for atomic integer operations is/was broken on i386
+@@ -459,7 +458,7 @@
+ on an i686, then you would encounter no problems. Only when
+ actually running the code on a i386 will the problem appear.
+ </p><p>This is fixed in 3.2.2.
+- </p></td></tr><tr class="question" title="4.6."><td align="left" valign="top"><a id="faq.atomic_mips"></a><a id="q-atomic_mips"></a><p><strong>4.6.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.atomic_mips"></a><a id="q-atomic_mips"></a><p><strong>4.6.</strong></p></td><td align="left" valign="top"><p>
+ MIPS atomic operations
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-atomic_mips"></a></td><td align="left" valign="top"><p>
+ The atomic locking routines for MIPS targets requires MIPS II
+@@ -469,7 +468,7 @@
+ </p><p>
+ The mips*-*-linux* port continues to use the MIPS II routines, and more
+ work in this area is expected.
+- </p></td></tr><tr class="question" title="4.7."><td align="left" valign="top"><a id="faq.linux_glibc"></a><a id="q-linux_glibc"></a><p><strong>4.7.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.linux_glibc"></a><a id="q-linux_glibc"></a><p><strong>4.7.</strong></p></td><td align="left" valign="top"><p>
+ Recent GNU/Linux glibc required?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-linux_glibc"></a></td><td align="left" valign="top"><p>When running on GNU/Linux, libstdc++ 3.2.1 (shared library version
+ 5.0.1) and later uses localization and formatting code from the system
+@@ -480,7 +479,7 @@
+ </p><p>The guideline is simple: the more recent the C++ library, the
+ more recent the C library. (This is also documented in the main
+ GCC installation instructions.)
+- </p></td></tr><tr class="question" title="4.8."><td align="left" valign="top"><a id="faq.freebsd_wchar"></a><a id="q-freebsd_wchar"></a><p><strong>4.8.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.freebsd_wchar"></a><a id="q-freebsd_wchar"></a><p><strong>4.8.</strong></p></td><td align="left" valign="top"><p>
+ Can't use wchar_t/wstring on FreeBSD
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-freebsd_wchar"></a></td><td align="left" valign="top"><p>
+ Older versions of FreeBSD's C library do not have sufficient
+@@ -499,7 +498,7 @@
+ Bugs in the ISO C++ language or library specification
+ </a></dt><dt>5.3. <a href="faq.html#faq.compiler_bugs">
+ Bugs in the compiler (gcc/g++) and not libstdc++
+- </a></dt></dl></td></tr><tr class="question" title="5.1."><td align="left" valign="top"><a id="faq.what_works"></a><a id="q-what_works"></a><p><strong>5.1.</strong></p></td><td align="left" valign="top"><p>
++ </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what_works"></a><a id="q-what_works"></a><p><strong>5.1.</strong></p></td><td align="left" valign="top"><p>
+ What works already?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_works"></a></td><td align="left" valign="top"><p>
+ Short answer: Pretty much everything <span class="emphasis"><em>works</em></span>
+@@ -513,7 +512,7 @@
+ <a class="link" href="manual/status.html#status.iso.1998" title="C++ 1998/2003">C++98</a>,
+ <a class="link" href="manual/status.html#status.iso.tr1" title="C++ TR1">TR1</a>, and
+ <a class="link" href="manual/status.html#status.iso.2011" title="C++ 2011">C++11</a>.
+- </p></td></tr><tr class="question" title="5.2."><td align="left" valign="top"><a id="faq.standard_bugs"></a><a id="q-standard_bugs"></a><p><strong>5.2.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.standard_bugs"></a><a id="q-standard_bugs"></a><p><strong>5.2.</strong></p></td><td align="left" valign="top"><p>
+ Bugs in the ISO C++ language or library specification
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-standard_bugs"></a></td><td align="left" valign="top"><p>
+ Unfortunately, there are some.
+@@ -528,7 +527,7 @@
+ If you think you've discovered a new bug that is not listed,
+ please post a message describing your problem to the author of
+ the library issues list or the Usenet group comp.lang.c++.moderated.
+- </p></td></tr><tr class="question" title="5.3."><td align="left" valign="top"><a id="faq.compiler_bugs"></a><a id="q-compiler_bugs"></a><p><strong>5.3.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.compiler_bugs"></a><a id="q-compiler_bugs"></a><p><strong>5.3.</strong></p></td><td align="left" valign="top"><p>
+ Bugs in the compiler (gcc/g++) and not libstdc++
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-compiler_bugs"></a></td><td align="left" valign="top"><p>
+ On occasion, the compiler is wrong. Please be advised that this
+@@ -563,7 +562,7 @@
+ list::size() is O(n)!
+ </a></dt><dt>6.9. <a href="faq.html#faq.easy_to_fix">
+ Aw, that's easy to fix!
+- </a></dt></dl></td></tr><tr class="question" title="6.1."><td align="left" valign="top"><a id="faq.stream_reopening_fails"></a><a id="q-stream_reopening_fails"></a><p><strong>6.1.</strong></p></td><td align="left" valign="top"><p>
++ </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.stream_reopening_fails"></a><a id="q-stream_reopening_fails"></a><p><strong>6.1.</strong></p></td><td align="left" valign="top"><p>
+ Reopening a stream fails
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-stream_reopening_fails"></a></td><td align="left" valign="top"><p>
+ One of the most-reported non-bug reports. Executing a sequence like:
+@@ -590,7 +589,7 @@
+ <span class="emphasis"><em>Update:</em></span> for GCC 4.0 we implemented the resolution
+ of <a class="link" href="manual/bugs.html" title="Bugs">DR #409</a> and open()
+ now calls <code class="function">clear()</code> on success!
+- </p></td></tr><tr class="question" title="6.2."><td align="left" valign="top"><a id="faq.wefcxx_verbose"></a><a id="q-wefcxx_verbose"></a><p><strong>6.2.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.wefcxx_verbose"></a><a id="q-wefcxx_verbose"></a><p><strong>6.2.</strong></p></td><td align="left" valign="top"><p>
+ -Weffc++ complains too much
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-wefcxx_verbose"></a></td><td align="left" valign="top"><p>
+ Many warnings are emitted when <code class="literal">-Weffc++</code> is used. Making
+@@ -602,7 +601,7 @@
+ We do, however, try to have libstdc++ sources as clean as possible. If
+ you see some simple changes that pacify <code class="literal">-Weffc++</code>
+ without other drawbacks, send us a patch.
+- </p></td></tr><tr class="question" title="6.3."><td align="left" valign="top"><a id="faq.ambiguous_overloads"></a><a id="q-ambiguous_overloads"></a><p><strong>6.3.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.ambiguous_overloads"></a><a id="q-ambiguous_overloads"></a><p><strong>6.3.</strong></p></td><td align="left" valign="top"><p>
+ Ambiguous overloads after including an old-style header
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-ambiguous_overloads"></a></td><td align="left" valign="top"><p>
+ Another problem is the <code class="literal">rel_ops</code> namespace and the template
+@@ -614,7 +613,7 @@
+ <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2001-01/msg00247.html" target="_top">sums
+ things up here</a>. The collisions with vector/string iterator
+ types have been fixed for 3.1.
+- </p></td></tr><tr class="question" title="6.4."><td align="left" valign="top"><a id="faq.v2_headers"></a><a id="q-v2_headers"></a><p><strong>6.4.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.v2_headers"></a><a id="q-v2_headers"></a><p><strong>6.4.</strong></p></td><td align="left" valign="top"><p>
+ The g++-3 headers are <span class="emphasis"><em>not ours</em></span>
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-v2_headers"></a></td><td align="left" valign="top"><p>
+ If you are using headers in
+@@ -630,7 +629,7 @@
+ 'v'?). Starting with version 3.2 the headers are installed in
+ <code class="filename">${prefix}/include/c++/${version}</code> as this prevents
+ headers from previous versions being found by mistake.
+- </p></td></tr><tr class="question" title="6.5."><td align="left" valign="top"><a id="faq.boost_concept_checks"></a><a id="q-boost_concept_checks"></a><p><strong>6.5.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.boost_concept_checks"></a><a id="q-boost_concept_checks"></a><p><strong>6.5.</strong></p></td><td align="left" valign="top"><p>
+ Errors about <span class="emphasis"><em>*Concept</em></span> and
+ <span class="emphasis"><em>constraints</em></span> in the STL
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-boost_concept_checks"></a></td><td align="left" valign="top"><p>
+@@ -647,7 +646,7 @@
+ checks, is available in the
+ <a class="link" href="manual/bk01pt02ch05s02.html" title="Concept Checking">Diagnostics</a>.
+ chapter of the manual.
+- </p></td></tr><tr class="question" title="6.6."><td align="left" valign="top"><a id="faq.dlopen_crash"></a><a id="q-dlopen_crash"></a><p><strong>6.6.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.dlopen_crash"></a><a id="q-dlopen_crash"></a><p><strong>6.6.</strong></p></td><td align="left" valign="top"><p>
+ Program crashes when using library code in a
+ dynamically-loaded library
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-dlopen_crash"></a></td><td align="left" valign="top"><p>
+@@ -666,7 +665,7 @@
+ <br />
+     // link the executable<br />
+     g++ -fPIC -rdynamic -o foo ... -L. -lfoo -ldl<br />
+-    </p></div></td></tr><tr class="question" title="6.7."><td align="left" valign="top"><a id="faq.memory_leaks"></a><a id="q-memory_leaks"></a><p><strong>6.7.</strong></p></td><td align="left" valign="top"><p>
++    </p></div></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.memory_leaks"></a><a id="q-memory_leaks"></a><p><strong>6.7.</strong></p></td><td align="left" valign="top"><p>
+ <span class="quote">“<span class="quote">Memory leaks</span>”</span> in containers
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-memory_leaks"></a></td><td align="left" valign="top"><p>
+ A few people have reported that the standard containers appear
+@@ -679,13 +678,13 @@
+ want to test the library for memory leaks please read
+ <a class="link" href="manual/debug.html#debug.memory" title="Memory Leak Hunting">Tips for memory leak hunting</a>
+ first.
+- </p></td></tr><tr class="question" title="6.8."><td align="left" valign="top"><a id="faq.list_size_on"></a><a id="q-list_size_on"></a><p><strong>6.8.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.list_size_on"></a><a id="q-list_size_on"></a><p><strong>6.8.</strong></p></td><td align="left" valign="top"><p>
+ list::size() is O(n)!
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-list_size_on"></a></td><td align="left" valign="top"><p>
+ See
+ the <a class="link" href="manual/containers.html" title="Chapter 9.  Containers">Containers</a>
+ chapter.
+- </p></td></tr><tr class="question" title="6.9."><td align="left" valign="top"><a id="faq.easy_to_fix"></a><a id="q-easy_to_fix"></a><p><strong>6.9.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.easy_to_fix"></a><a id="q-easy_to_fix"></a><p><strong>6.9.</strong></p></td><td align="left" valign="top"><p>
+ Aw, that's easy to fix!
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-easy_to_fix"></a></td><td align="left" valign="top"><p>
+ If you have found a bug in the library and you think you have
+@@ -718,7 +717,7 @@
+ What's an ABI and why is it so messy?
+ </a></dt><dt>7.8. <a href="faq.html#faq.size_equals_capacity">
+ How do I make std::vector&lt;T&gt;::capacity() == std::vector&lt;T&gt;::size?
+- </a></dt></dl></td></tr><tr class="question" title="7.1."><td align="left" valign="top"><a id="faq.iterator_as_pod"></a><a id="faq.iterator_as_pod_q"></a><p><strong>7.1.</strong></p></td><td align="left" valign="top"><p>
++ </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.iterator_as_pod"></a><a id="faq.iterator_as_pod_q"></a><p><strong>7.1.</strong></p></td><td align="left" valign="top"><p>
+ string::iterator is not char*; vector&lt;T&gt;::iterator is not T*
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="faq.iterator_as_pod_a"></a></td><td align="left" valign="top"><p>
+ If you have code that depends on container&lt;T&gt; iterators
+@@ -737,7 +736,7 @@
+ certain expressions to <code class="varname">&amp;*i</code>. Future revisions
+ of the Standard are expected to bless this usage for
+ vector&lt;&gt; (but not for basic_string&lt;&gt;).
+- </p></td></tr><tr class="question" title="7.2."><td align="left" valign="top"><a id="faq.what_is_next"></a><a id="q-what_is_next"></a><p><strong>7.2.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what_is_next"></a><a id="q-what_is_next"></a><p><strong>7.2.</strong></p></td><td align="left" valign="top"><p>
+ What's next after libstdc++?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_next"></a></td><td align="left" valign="top"><p>
+ Hopefully, not much. The goal of libstdc++ is to produce a
+@@ -750,7 +749,7 @@
+ this effort is described in
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf" target="_top">
+ The C++ Library Technical Report 1</a>.
+- </p></td></tr><tr class="question" title="7.3."><td align="left" valign="top"><a id="faq.sgi_stl"></a><a id="q-sgi_stl"></a><p><strong>7.3.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.sgi_stl"></a><a id="q-sgi_stl"></a><p><strong>7.3.</strong></p></td><td align="left" valign="top"><p>
+ What about the STL from SGI?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-sgi_stl"></a></td><td align="left" valign="top"><p>
+ The <a class="link" href="http://www.sgi.com/tech/stl/" target="_top">STL from SGI</a>,
+@@ -773,11 +772,11 @@
+ </p><p>
+ The FAQ for SGI's STL (one jump off of their main page) is
+ still recommended reading.
+- </p></td></tr><tr class="question" title="7.4."><td align="left" valign="top"><a id="faq.extensions_and_backwards_compat"></a><a id="q-extensions_and_backwards_compat"></a><p><strong>7.4.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.extensions_and_backwards_compat"></a><a id="q-extensions_and_backwards_compat"></a><p><strong>7.4.</strong></p></td><td align="left" valign="top"><p>
+ Extensions and Backward Compatibility
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-extensions_and_backwards_compat"></a></td><td align="left" valign="top"><p>
+ See the <a class="link" href="manual/backwards.html" title="Backwards Compatibility">link</a> on backwards compatibility and <a class="link" href="manual/api.html" title="API Evolution and Deprecation History">link</a> on evolution.
+- </p></td></tr><tr class="question" title="7.5."><td align="left" valign="top"><a id="faq.tr1_support"></a><a id="q-tr1_support"></a><p><strong>7.5.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.tr1_support"></a><a id="q-tr1_support"></a><p><strong>7.5.</strong></p></td><td align="left" valign="top"><p>
+ Does libstdc++ support TR1?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-tr1_support"></a></td><td align="left" valign="top"><p>
+ Yes.
+@@ -789,7 +788,7 @@
+ </p><p>
+ The implementation status of TR1 in libstdc++ can be tracked <a class="link" href="manual/status.html#status.iso.tr1" title="C++ TR1">on the TR1 status
+ page</a>.
+- </p></td></tr><tr class="question" title="7.6."><td align="left" valign="top"><a id="faq.get_iso_cxx"></a><a id="q-get_iso_cxx"></a><p><strong>7.6.</strong></p></td><td align="left" valign="top"><p>How do I get a copy of the ISO C++ Standard?
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.get_iso_cxx"></a><a id="q-get_iso_cxx"></a><p><strong>7.6.</strong></p></td><td align="left" valign="top"><p>How do I get a copy of the ISO C++ Standard?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-get_iso_cxx"></a></td><td align="left" valign="top"><p>
+ Copies of the full ISO 14882 standard are available on line via
+ the ISO mirror site for committee members. Non-members, or those
+@@ -808,7 +807,7 @@
+ </p><p>
+ The 2003 version of the standard (the 1998 version plus TC1) is
+ available in print, ISBN 0-470-84674-7.
+- </p></td></tr><tr class="question" title="7.7."><td align="left" valign="top"><a id="faq.what_is_abi"></a><a id="q-what_is_abi"></a><p><strong>7.7.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what_is_abi"></a><a id="q-what_is_abi"></a><p><strong>7.7.</strong></p></td><td align="left" valign="top"><p>
+ What's an ABI and why is it so messy?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_abi"></a></td><td align="left" valign="top"><p>
+ <acronym class="acronym">ABI</acronym> stands for <span class="quote">“<span class="quote">Application Binary
+@@ -856,7 +855,7 @@
+ so they may later be changed. Deciding which, and implementing
+ the decisions, must happen before you can reasonably document a
+ candidate C++ ABI that encompasses the standard library.
+- </p></td></tr><tr class="question" title="7.8."><td align="left" valign="top"><a id="faq.size_equals_capacity"></a><a id="q-size_equals_capacity"></a><p><strong>7.8.</strong></p></td><td align="left" valign="top"><p>
++ </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.size_equals_capacity"></a><a id="q-size_equals_capacity"></a><p><strong>7.8.</strong></p></td><td align="left" valign="top"><p>
+ How do I make std::vector&lt;T&gt;::capacity() == std::vector&lt;T&gt;::size?
+ </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-size_equals_capacity"></a></td><td align="left" valign="top"><p>
+ The standard idiom for deallocating a <code class="classname">vector&lt;T&gt;</code>'s
+@@ -869,4 +868,4 @@
+ </p><p>
+ See <a class="link" href="manual/strings.html#strings.string.shrink" title="Shrink to Fit">Shrink-to-fit
+ strings</a> for a similar solution for strings.
+- </p></td></tr></tbody></table></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk03.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
++ </p></td></tr></tbody></table></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk03.html">Up</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/index.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/index.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/index.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="description" content="Short Contents Copyright 2008, 2009, 2011 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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="The GNU C++ Library" 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" title="Short Contents"><a id="contents"></a><p class="title"><strong>Short Contents</strong></p><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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 2008, 2009, 2011 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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ Copyright 2008, 2009, 2011
+ <a class="link" href="http://www.fsf.org/" target="_top">FSF
+ </a>
+@@ -14,7 +13,7 @@
+ This is the top level of the libstdc++ documentation set. The
+ documentation is divided into the following three sections.
+ </p><p>
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <a class="link" href="manual/index.html" title="The GNU C++ Library Manual">Manual</a>
+ </p></li><li class="listitem"><p>
+ <a class="link" href="faq.html" title="Frequently Asked Questions">Frequently Asked Questions</a>
+@@ -21,7 +20,7 @@
+ </p></li><li class="listitem"><p>
+ <a class="link" href="api.html" title="The GNU C++ Library API Reference">API and Source Documentation</a>
+ </p></li></ul></div><p>
+- </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.
++ </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.
+ Introduction
+
+ </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/bk01pt02.html">II.
+@@ -35,13 +34,13 @@
+ </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/bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="manual/utilities.html">6.
+ Utilities
+
+-</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#idp13894640">Interface Design</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp13898192">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp13911488">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#idp15484560">Class Hierarchy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15507072">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15514368">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15528992">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#idp15545344">Examples</a></span></dt><dt><span class="section"><a href="manual/memory.html#idp15548928">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.
++</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#idm269988298944">Interface Design</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269988295392">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269988282096">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#idm269986714912">Class Hierarchy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269986692400">Thread Safety</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269986685104">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269986670480">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#idm269986654128">Examples</a></span></dt><dt><span class="section"><a href="manual/memory.html#idm269986650544">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.
+ Strings
+
+ </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.
+ Localization
+
+-</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#idp15752864">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.
++</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#idm269986448912">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.
+ Containers
+
+ </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/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.
+@@ -163,4 +162,4 @@
+
+ </a></span></dt><dt><span class="appendix"><a href="manual/appendix_gpl.html">D.
+ <acronym class="acronym">GNU</acronym> General Public License version 3
+- </a></span></dt><dt><span class="appendix"><a href="manual/appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></dd><dt><span class="book"><a href="bk02.html"></a></span></dt><dd><dl><dt><span class="article"><a href="api.html">The GNU C++ Library API Reference</a></span></dt></dl></dd><dt><span class="book"><a href="bk03.html"></a></span></dt><dd><dl><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="manual/index.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> The GNU C++ Library Manual</td></tr></table></div></body></html>
++ </a></span></dt><dt><span class="appendix"><a href="manual/appendix_gfdl.html">E. GNU Free Documentation License</a></span></dt></dl></dd></dl></dd><dt><span class="book"><a href="bk02.html"></a></span></dt><dd><dl><dt><span class="article"><a href="api.html">The GNU C++ Library API Reference</a></span></dt></dl></dd><dt><span class="book"><a href="bk03.html"></a></span></dt><dd><dl><dt><span class="article"><a href="faq.html">Frequently Asked Questions</a></span></dt></dl></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="manual/index.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> The GNU C++ Library Manual</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/api.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/api.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/api.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="The GNU C++ Library API Reference"><div class="titlepage"><div><div><h2 class="title"><a id="api"></a>The GNU C++ Library API Reference</h2></div><div><p class="copyright">Copyright ©
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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 ©
+ 2008
+ ,
+ 2010
+@@ -7,7 +6,7 @@
+
+ <a class="link" href="http://www.fsf.org/" target="_top">FSF
+ </a>
+- </p></div><div><div class="legalnotice" title="Legal Notice"><a id="idp3637504"></a><p>
++ </p></div><div><div class="legalnotice"><a id="idm269994087488"></a><p>
+ <a class="link" href="manual/license.html" title="License">License
+ </a>
+ </p></div></div></div><hr /></div><p>
+@@ -20,7 +19,7 @@
+ particular include file, looking at inheritance diagrams, etc.
+ </p><p>
+ The API documentation, rendered into HTML, can be viewed online:
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/index.html" target="_top">for the 3.4 release
+ </a>
+ </p></li><li class="listitem"><p>
+@@ -56,4 +55,4 @@
+ </p><p>
+ In addition, a rendered set of man pages are available in the same
+ location specified above. Start with C++Intro(3).
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/iterators.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/iterators.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/iterators.html (.../branches/gcc-4_7-branch)
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
+ Iterators
+
+ </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. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 10.  Iterators"><div class="titlepage"><div><div><h2 class="title"><a id="std.iterators"></a>Chapter 10. 
++ </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. 
+ Iterators
+- <a id="idp16120304" class="indexterm"></a>
+-</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" title="Predefined"><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" title="Iterators vs. Pointers"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.vs_pointers"></a>Iterators vs. Pointers</h3></div></div></div><p>
++ <a id="idm269986083376" class="indexterm"></a>
++</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>
+ The following
+ FAQ <a class="link" href="../faq.html#faq.iterator_as_pod" title="7.1.">entry</a> points out that
+ iterators are not implemented as pointers. They are a generalization
+@@ -44,7 +43,7 @@
+ down through inheritance, so while the compiler has to do work
+ looking up all the names, your runtime code does not. (This has
+ been a prime concern from the beginning.)
+- </p></div><div class="section" title="One Past the End"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.end"></a>One Past the End</h3></div></div></div><p>This starts off sounding complicated, but is actually very easy,
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="iterators.predefined.end"></a>One Past the End</h3></div></div></div><p>This starts off sounding complicated, but is actually very easy,
+ especially towards the end. Trust me.
+ </p><p>Beginners usually have a little trouble understand the whole
+ 'past-the-end' thing, until they remember their early algebra classes
+@@ -127,4 +126,4 @@
+ </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="containers_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="algorithms.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 11. 
+ Algorithms
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/dynamic_memory.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/dynamic_memory.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/dynamic_memory.html (.../branches/gcc-4_7-branch)
+@@ -1,13 +1,12 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Support
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr></table><hr /></div><div class="section" title="Dynamic Memory"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.memory"></a>Dynamic Memory</h2></div></div></div><p>
++</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>
+ There are six flavors each of <code class="function">new</code> and
+ <code class="function">delete</code>, so make certain that you're using the right
+ ones. Here are quickie descriptions of <code class="function">new</code>:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ single object form, throwing a
+ <code class="classname">bad_alloc</code> on errors; this is what most
+ people are used to using
+@@ -69,4 +68,4 @@
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="support.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="support.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="termination.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 4. 
+ Support
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Termination</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Termination</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/generalized_numeric_operations.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/generalized_numeric_operations.html (.../branches/gcc-4_7-branch)
+@@ -1,15 +1,14 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Numerics
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr></table><hr /></div><div class="section" title="Generalized Operations"><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>
++</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>
+ </p><p>There are four generalized functions in the &lt;numeric&gt; header
+ that follow the same conventions as those in &lt;algorithm&gt;. Each
+ of them is overloaded: one signature for common default operations,
+ and a second for fully general operations. Their names are
+ self-explanatory to anyone who works with numerics on a regular basis:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">accumulate</code></p></li><li class="listitem"><p><code class="code">inner_product</code></p></li><li class="listitem"><p><code class="code">chapterial_sum</code></p></li><li class="listitem"><p><code class="code">adjacent_difference</code></p></li></ul></div><p>Here is a simple example of the two forms of <code class="code">accumulate</code>.
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="code">accumulate</code></p></li><li class="listitem"><p><code class="code">inner_product</code></p></li><li class="listitem"><p><code class="code">chapterial_sum</code></p></li><li class="listitem"><p><code class="code">adjacent_difference</code></p></li></ul></div><p>Here is a simple example of the two forms of <code class="code">accumulate</code>.
+ </p><pre class="programlisting">
+ int ar[50];
+ int someval = somefunction();
+@@ -29,4 +28,4 @@
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="numerics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="numerics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="numerics_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 12. 
+ Numerics
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/mt_allocator.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/mt_allocator.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/mt_allocator.html (.../branches/gcc-4_7-branch)
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s07.html" title="Diagnostics" /><link rel="next" href="bk01pt03ch20s02.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="bk01pt03ch19s07.html">Prev</a> </td><th width="60%" align="center">Part III. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s07.html" title="Diagnostics" /><link rel="next" href="bk01pt03ch20s02.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="bk01pt03ch19s07.html">Prev</a> </td><th width="60%" align="center">Part III. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch20s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 20. The mt_allocator"><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="bk01pt03ch20s02.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch20s02.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch20s03.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch20s04.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s05.html">Multiple Thread Example</a></span></dt></dl></div><p>
+-</p><div class="section" title="Intro"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.mt.intro"></a>Intro</h2></div></div></div><p>
++</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch20s02.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="bk01pt03ch20s02.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch20s02.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch20s03.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch20s04.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s05.html">Multiple Thread Example</a></span></dt></dl></div><p>
++</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>
+ The mt allocator [hereinafter referred to simply as "the allocator"]
+ is a fixed size (power of two) allocator that was initially
+ developed specifically to suit the needs of multi threaded
+@@ -20,4 +19,4 @@
+ </p><p>
+ The aim of this document is to describe - from an application point of
+ view - the "inner workings" of the allocator.
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s07.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Diagnostics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design Issues</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s07.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Diagnostics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design Issues</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch18s05.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch18s05.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch18s05.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s04.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="bk01pt03ch18s04.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" title="Testing"><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s04.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="bk01pt03ch18s04.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>
+ Both the normal conformance and regression tests and the
+ supplemental performance tests work.
+ </p><p>
+@@ -23,4 +22,4 @@
+ additional software dependencies than the usual bare-boned text
+ file, and can be generated by using the <code class="code">make
+ doc-performance</code> rule in the testsuite's Makefile.
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s04.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="profile_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 19. Profile Mode</td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s04.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="profile_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 19. Profile Mode</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch19s05.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s05.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s05.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s04.html" title="Empirical Cost Model" /><link rel="next" href="bk01pt03ch19s06.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="bk01pt03ch19s04.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s06.html">Next</a></td></tr></table><hr /></div><div class="section" title="Implementation Issues"><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" title="Stack Traces"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stack"></a>Stack Traces</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s04.html" title="Empirical Cost Model" /><link rel="next" href="bk01pt03ch19s06.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="bk01pt03ch19s04.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s06.html">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>
+ Accurate stack traces are needed during profiling since we group events by
+ call context and dynamic instance. Without accurate traces, diagnostics
+ may be hard to interpret. For instance, when giving advice to the user
+@@ -11,24 +10,24 @@
+ <code class="code">_GLIBCXX_PROFILE_STACK_DEPTH</code> can be set
+ to 0 if you are willing to give up call context information, or to a small
+ positive value to reduce run time overhead.
+- </p></div><div class="section" title="Symbolization of Instruction Addresses"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.symbols"></a>Symbolization of Instruction Addresses</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.symbols"></a>Symbolization of Instruction Addresses</h3></div></div></div><p>
+ The profiling and analysis phases use only instruction addresses.
+ An external utility such as addr2line is needed to postprocess the result.
+ We do not plan to add symbolization support in the profile extension.
+ This would require access to symbol tables, debug information tables,
+ external programs or libraries and other system dependent information.
+- </p></div><div class="section" title="Concurrency"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.concurrency"></a>Concurrency</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.concurrency"></a>Concurrency</h3></div></div></div><p>
+ Our current model is simplistic, but precise.
+ We cannot afford to approximate because some of our diagnostics require
+ precise matching of operations to container instance and call context.
+ During profiling, we keep a single information table per diagnostic.
+ There is a single lock per information table.
+- </p></div><div class="section" title="Using the Standard Library in the Instrumentation Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stdlib-in-proflib"></a>Using the Standard Library in the Instrumentation Implementation</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.stdlib-in-proflib"></a>Using the Standard Library in the Instrumentation Implementation</h3></div></div></div><p>
+ As much as we would like to avoid uses of libstdc++ within our
+ instrumentation library, containers such as unordered_map are very
+ appealing. We plan to use them as long as they are named properly
+ to avoid ambiguity.
+- </p></div><div class="section" title="Malloc Hooks"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.malloc-hooks"></a>Malloc Hooks</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.malloc-hooks"></a>Malloc Hooks</h3></div></div></div><p>
+ User applications/libraries can provide malloc hooks.
+ When the implementation of the malloc hooks uses stdlibc++, there can
+ be an infinite cycle between the profile mode instrumentation and the
+@@ -42,10 +41,10 @@
+ uses non-recursive locks.
+ XXX: A definitive solution to this problem would be for the profile extension
+ to use a custom allocator internally, and perhaps not to use libstdc++.
+- </p></div><div class="section" title="Construction and Destruction of Global Objects"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.construction-destruction"></a>Construction and Destruction of Global Objects</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.implementation.construction-destruction"></a>Construction and Destruction of Global Objects</h3></div></div></div><p>
+ The profiling library state is initialized at the first call to a profiling
+ method. This allows us to record the construction of all global objects.
+ However, we cannot do the same at destruction time. The trace is written
+ by a function registered by <code class="code">atexit</code>, thus invoked by
+ <code class="code">exit</code>.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s06.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Empirical Cost Model </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Developer Information</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s06.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Empirical Cost Model </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Developer Information</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/configure.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/configure.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/configure.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; configure&#10; , &#10; options&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Configure"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.configure"></a>Configure</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; configure&#10; , &#10; options&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ When configuring libstdc++, you'll have to configure the entire
+ <span class="emphasis"><em>gccsrcdir</em></span> directory. Consider using the
+ toplevel gcc configuration option
+@@ -18,7 +17,7 @@
+ </p><p>The canonical way to find out the configure options that are
+ available for a given set of libstdc++ sources is to go to the
+ source directory and then type:<span class="command"><strong>./configure --help</strong></span>.
+-</p><div class="variablelist"><dl><dt><span class="term"><code class="code">--enable-multilib</code>[default]</span></dt><dd><p>This is part of the generic multilib support for building cross
++</p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">--enable-multilib</code>[default]</span></dt><dd><p>This is part of the generic multilib support for building cross
+ compilers. As such, targets like "powerpc-elf" will have
+ libstdc++ built many different ways: "-msoft-float"
+ and not, etc. A different libstdc++ will be built for each of
+@@ -215,4 +214,4 @@
+ <span class="emphasis"><em>freestanding</em></span> environment, in which only a
+ minimal set of headers are provided. This option builds such an
+ environment.
+- </p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="setup.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="setup.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="make.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. Setup </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Make</td></tr></table></div></body></html>
++ </p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="setup.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="setup.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="make.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. Setup </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Make</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/status.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/status.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/status.html (.../branches/gcc-4_7-branch)
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Introduction
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="license.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 1. Status"><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" title="Implementation Status"><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" title="C++ 1998/2003"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.1998"></a>C++ 1998/2003</h3></div></div></div><div class="section" title="Implementation Status"><div class="titlepage"><div><div><h4 class="title"><a id="iso.1998.status"></a>Implementation Status</h4></div></div></div><p>
++</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>
+ This status table is based on the table of contents of ISO/IEC 14882:2003.
+ </p><p>
+ This page describes the C++ support in mainline GCC SVN, not in any
+ particular release.
+-</p><div class="table"><a id="idp4061552"></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">
++</p><div class="table"><a id="idm270001165584"></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">
+ <span class="emphasis"><em>18</em></span>
+ </td><td colspan="3" align="left">
+ <span class="emphasis"><em>Language support</em></span>
+@@ -52,9 +51,9 @@
+ <span class="emphasis"><em>Appendix D</em></span>
+ </td><td colspan="3" align="left">
+ <span class="emphasis"><em>Compatibility features</em></span>
+- </td></tr><tr><td align="left">D.1</td><td align="left">Increment operator with bool operand</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.2</td><td align="left"><code class="code">static</code> keyword</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.3</td><td align="left">Access declarations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.4</td><td align="left">Implicit conversion from const strings</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.5</td><td align="left">C standard library headers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.6</td><td align="left">Old iostreams members</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.7</td><td align="left">char* streams</td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section" title="Implementation Specific Behavior"><div class="titlepage"><div><div><h4 class="title"><a id="iso.1998.specific"></a>Implementation Specific Behavior</h4></div></div></div><p>
++ </td></tr><tr><td align="left">D.1</td><td align="left">Increment operator with bool operand</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.2</td><td align="left"><code class="code">static</code> keyword</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.3</td><td align="left">Access declarations</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.4</td><td align="left">Implicit conversion from const strings</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.5</td><td align="left">C standard library headers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.6</td><td align="left">Old iostreams members</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.7</td><td align="left">char* streams</td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="iso.1998.specific"></a>Implementation Specific Behavior</h4></div></div></div><p>
+ The ISO standard defines the following phrase:
+- </p><div class="blockquote"><blockquote class="blockquote"><div class="variablelist"><dl><dt><span class="term">
++ </p><div class="blockquote"><blockquote class="blockquote"><div class="variablelist"><dl class="variablelist"><dt><span class="term">
+ <code class="code">[1.3.5] implementation-defined behavior</code>
+ </span></dt><dd><p>
+ Behavior, for a well-formed program construct and correct data, that
+@@ -142,7 +141,7 @@
+ <a class="link" href="io.html" title="Chapter 13.  Input and Output">in this chapter</a>.
+ </p><p><span class="emphasis"><em>[27.8.1.4]/16</em></span> Calling <code class="code">fstream::sync</code> when
+ a get area exists will... whatever <code class="code">fflush()</code> does, I think.
+- </p></div></div><div class="section" title="C++ 2011"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.2011"></a>C++ 2011</h3></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.2011"></a>C++ 2011</h3></div></div></div><p>
+ <a id="status.iso.200x"></a>
+ This table is based on the table of contents of ISO/IEC
+ JTC1 SC22 WG21 Doc No: N3290 Date: 2011-04-11
+@@ -158,11 +157,15 @@
+ </p><p>
+ This page describes the C++11 support in mainline GCC SVN, not in any
+ particular release.
+-</p><div class="table"><a id="idp7562848"></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">
++</p><div class="table"><a id="idm269994202752"></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">
+ <span class="emphasis"><em>18</em></span>
+ </td><td colspan="3" align="left">
+ <span class="emphasis"><em>Language support</em></span>
+- </td></tr><tr><td align="left">18.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">18.2</td><td align="left">Types</td><td align="left">Partial</td><td align="left">Missing offsetof, max_align_t</td></tr><tr><td align="left">18.3</td><td align="left">Implementation properties</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.3.2</td><td align="left">Numeric Limits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.3.2.3</td><td align="left">Class template <code class="code">numeric_limits</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.3.2.4</td><td align="left"><code class="code">numeric_limits</code> members</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">18.3.2.5</td><td align="left"><code class="code">float_round_style</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">18.3.2.6</td><td align="left"><code class="code">float_denorm_style</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">18.3.2.7</td><td align="left"><code class="code">numeric_limits</code> specializations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.3.3</td><td align="left">C Library</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.4</td><td align="left">Integer types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.4.1</td><td align="left">Header <code class="code">&lt;cstdint&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">18.5</td><td align="left">Start and termination</td><td align="left">Partial</td><td align="left">C library dependency for quick_exit, at_quick_exit</td></tr><tr><td align="left">18.6</td><td align="left">Dynamic memory management</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.7</td><td align="left">Type identification</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.7.1</td><td align="left">Class type_info</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.7.2</td><td align="left">Class bad_cast</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.7.3</td><td align="left">Class bad_typeid</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8</td><td align="left">Exception handling</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.8.1</td><td align="left">Class exception</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.2</td><td align="left">Class bad_exception</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.3</td><td align="left">Abnormal termination</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.4</td><td align="left"><code class="code">uncaught_exception</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.5</td><td align="left">Exception Propagation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.6</td><td align="left"><code class="code">nested_exception</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.9</td><td align="left">Initializer lists</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.9.1</td><td align="left">Initializer list constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.9.2</td><td align="left">Initializer list access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.9.3</td><td align="left">Initializer list range access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.10</td><td align="left">Other runtime support</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
++ </td></tr><tr><td align="left">18.1</td><td align="left">General</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">18.2</td><td align="left">Types</td><td align="left">Partial</td><td align="left">Missing offsetof, max_align_t</td></tr><tr><td align="left">18.3</td><td align="left">Implementation properties</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.3.2</td><td align="left">Numeric Limits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.3.2.3</td><td align="left">Class template <code class="code">numeric_limits</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.3.2.4</td><td align="left"><code class="code">numeric_limits</code> members</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">18.3.2.5</td><td align="left"><code class="code">float_round_style</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">18.3.2.6</td><td align="left"><code class="code">float_denorm_style</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">18.3.2.7</td><td align="left"><code class="code">numeric_limits</code> specializations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.3.3</td><td align="left">C Library</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.4</td><td align="left">Integer types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.4.1</td><td align="left">Header <code class="code">&lt;cstdint&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">18.5</td><td align="left">Start and termination</td><td align="left">Partial</td><td align="left">C library dependency for quick_exit, at_quick_exit</td></tr><tr bgcolor="#B0B0B0"><td align="left">18.6</td><td align="left">Dynamic memory management</td><td align="left">Partial</td><td align="left">Missing <code class="code">get_new_handler</code>.
++ <code class="code">set_new_handler</code> is not thread-safe.
++ </td></tr><tr><td align="left">18.7</td><td align="left">Type identification</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.7.1</td><td align="left">Class type_info</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.7.2</td><td align="left">Class bad_cast</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.7.3</td><td align="left">Class bad_typeid</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8</td><td align="left">Exception handling</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.8.1</td><td align="left">Class exception</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.2</td><td align="left">Class bad_exception</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">18.8.3</td><td align="left">Abnormal termination</td><td align="left">Partial</td><td align="left">Missing <code class="code">get_terminate</code>.
++ <code class="code">set_terminate</code> is not thread-safe.
++ </td></tr><tr><td align="left">18.8.4</td><td align="left"><code class="code">uncaught_exception</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.5</td><td align="left">Exception Propagation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.8.6</td><td align="left"><code class="code">nested_exception</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.9</td><td align="left">Initializer lists</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">18.9.1</td><td align="left">Initializer list constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.9.2</td><td align="left">Initializer list access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.9.3</td><td align="left">Initializer list range access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">18.10</td><td align="left">Other runtime support</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">
+ <span class="emphasis"><em>19</em></span>
+ </td><td colspan="3" align="left">
+ <span class="emphasis"><em>Diagnostics</em></span>
+@@ -185,7 +188,7 @@
+ is_nothrow_assignable,
+ is_nothrow_copy_assignable, is_nothrow_move_assignable,
+ is_nothrow_destructible
+- </td></tr><tr><td align="left">20.9.5</td><td align="left">Type property queries</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.6</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7</td><td align="left">Transformations between types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.9.7.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.3</td><td align="left">Sign modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.4</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.5</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.6</td><td align="left">Other transformations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10</td><td align="left">Compile-time rational arithmetic</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.2</td><td align="left">Header <code class="code">&lt;ratio&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.3</td><td align="left">Class template <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.4</td><td align="left">Arithmetic on <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.5</td><td align="left">Comparison of <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.6</td><td align="left">SI types for <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11</td><td align="left">Time utilities</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.3</td><td align="left">Clock requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4</td><td align="left">Time-related traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.4.1</td><td align="left"><code class="code">treat_as_floating_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4.2</td><td align="left"><code class="code">duration_values</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4.3</td><td align="left">Specializations of <code class="code">common_type</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.11.5</td><td align="left">Class template <code class="code">duration</code></td><td align="left">Partial</td><td align="left">Missing constexpr for non-member arithmetic operations</td></tr><tr><td align="left">20.11.6</td><td align="left">Class template <code class="code">time_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7</td><td align="left">Clocks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.7.1</td><td align="left">Class <code class="code">system_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7.2</td><td align="left">Class <code class="code">steady_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7.3</td><td align="left">Class <code class="code">high_resolution_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.8</td><td align="left">Date and time functions</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12</td><td align="left">Scoped allocator adaptor</td><td align="left">Partial</td><td align="left"> </td></tr><tr><td align="left">20.12.1</td><td align="left">Header <code class="code">&lt;scoped_allocator&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.12.2</td><td align="left">Scoped allocator adaptor member types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.12.3</td><td align="left">Scoped allocator adaptor constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12.4</td><td align="left">Scoped allocator adaptor members</td><td align="left">Partial</td><td align="left"> </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">
++ </td></tr><tr><td align="left">20.9.5</td><td align="left">Type property queries</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.6</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7</td><td align="left">Transformations between types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.9.7.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.3</td><td align="left">Sign modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.4</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.9.7.5</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.9.7.6</td><td align="left">Other transformations</td><td align="left">Partial</td><td align="left">Missing <code class="code">aligned_union</code>.</td></tr><tr><td align="left">20.10</td><td align="left">Compile-time rational arithmetic</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.1</td><td align="left">In general</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.2</td><td align="left">Header <code class="code">&lt;ratio&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.10.3</td><td align="left">Class template <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.4</td><td align="left">Arithmetic on <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.5</td><td align="left">Comparison of <code class="code">ratio</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.10.6</td><td align="left">SI types for <code class="code">ratio</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11</td><td align="left">Time utilities</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.3</td><td align="left">Clock requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4</td><td align="left">Time-related traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.4.1</td><td align="left"><code class="code">treat_as_floating_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4.2</td><td align="left"><code class="code">duration_values</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.4.3</td><td align="left">Specializations of <code class="code">common_type</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.11.5</td><td align="left">Class template <code class="code">duration</code></td><td align="left">Partial</td><td align="left">Missing constexpr for non-member arithmetic operations</td></tr><tr><td align="left">20.11.6</td><td align="left">Class template <code class="code">time_point</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7</td><td align="left">Clocks</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.11.7.1</td><td align="left">Class <code class="code">system_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7.2</td><td align="left">Class <code class="code">steady_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.7.3</td><td align="left">Class <code class="code">high_resolution_clock</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.11.8</td><td align="left">Date and time functions</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12</td><td align="left">Scoped allocator adaptor</td><td align="left">Partial</td><td align="left"> </td></tr><tr><td align="left">20.12.1</td><td align="left">Header <code class="code">&lt;scoped_allocator&gt;</code> synopsis</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">20.12.2</td><td align="left">Scoped allocator adaptor member types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">20.12.3</td><td align="left">Scoped allocator adaptor constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">20.12.4</td><td align="left">Scoped allocator adaptor members</td><td align="left">Partial</td><td align="left"> </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">
+ <span class="emphasis"><em>21</em></span>
+ </td><td colspan="3" align="left">
+ <span class="emphasis"><em>Strings</em></span>
+@@ -237,7 +240,9 @@
+ <span class="emphasis"><em>Appendix D</em></span>
+ </td><td colspan="3" align="left">
+ <span class="emphasis"><em>Compatibility features</em></span>
+- </td></tr><tr><td align="left">D.1</td><td align="left">Increment operator with <code class="code">bool</code> operand</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.2</td><td align="left"><code class="code">register</code> keyword</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.3</td><td align="left">Implicit declaration of copy functions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.4</td><td align="left">Dynamic exception specifications</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.5</td><td align="left">C standard library headers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.6</td><td align="left">Old iostreams members</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.7</td><td align="left"><code class="code">char*</code> streams</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.8</td><td align="left">Function objects</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.9</td><td align="left">Binders</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.10</td><td align="left"><code class="code">auto_ptr</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.11</td><td align="left">Violating exception-specifications</td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><div class="section" title="Implementation Specific Behavior"><div class="titlepage"><div><div><h4 class="title"><a id="iso.2011.specific"></a>Implementation Specific Behavior</h4></div></div></div><p>For behaviour which is also specified by the 1998 and 2003 standards,
++ </td></tr><tr><td align="left">D.1</td><td align="left">Increment operator with <code class="code">bool</code> operand</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.2</td><td align="left"><code class="code">register</code> keyword</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.3</td><td align="left">Implicit declaration of copy functions</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.4</td><td align="left">Dynamic exception specifications</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.5</td><td align="left">C standard library headers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.6</td><td align="left">Old iostreams members</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.7</td><td align="left"><code class="code">char*</code> streams</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.8</td><td align="left">Function objects</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.9</td><td align="left">Binders</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">D.10</td><td align="left"><code class="code">auto_ptr</code></td><td align="left"> </td><td align="left"> </td></tr><tr bgcolor="#B0B0B0"><td align="left">D.11</td><td align="left">Violating exception-specifications</td><td align="left">Partial</td><td align="left">Missing <code class="code">get_unexpected</code>.
++ <code class="code">set_unexpected</code> is not thread-safe.
++ </td></tr></tbody></table></div></div><br class="table-break" /><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="iso.2011.specific"></a>Implementation Specific Behavior</h4></div></div></div><p>For behaviour which is also specified by the 1998 and 2003 standards,
+ see <a class="link" href="status.html#iso.1998.specific" title="Implementation Specific Behavior">C++ 1998/2003 Implementation
+ Specific Behavior</a>. This section only documents behaviour which
+ is new in the 2011 standard.
+@@ -250,7 +255,7 @@
+ <code class="classname">native_handle_type</code> and
+ <code class="methodname">native_handle</code> are provided. The handle types
+ are defined in terms of the Gthreads abstraction layer.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="classname">thread</code>: The native handle type is
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="classname">thread</code>: The native handle type is
+ a typedef for <code class="code">__gthread_t</code> i.e. <code class="code">pthread_t</code>
+ when GCC is configured with the <code class="literal">posix</code> thread
+ model. The value of the native handle is undefined for a thread
+@@ -275,7 +280,7 @@
+ <code class="code">launch</code> is a scoped enumeration type with
+ overloaded operators to support bitmask operations. There are no
+ additional bitmask elements defined.
+- </p></div></div><div class="section" title="C++ TR1"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.tr1"></a>C++ TR1</h3></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.tr1"></a>C++ TR1</h3></div></div></div><p>
+ This table is based on the table of contents of ISO/IEC DTR 19768
+ Doc No: N1836=05-0096 Date: 2005-06-24
+ Draft Technical Report on C++ Library Extensions
+@@ -286,12 +291,12 @@
+ </p><p>
+ This page describes the TR1 support in mainline GCC SVN, not in any particular
+ release.
+-</p><div class="table"><a id="idp2271168"></a><p class="title"><strong>Table 1.3. C++ TR1 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.2.1</td><td align="left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.2</td><td align="left"><code class="code">reference_wrapper</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.3</td><td align="left"><code class="code">reference_wrapper</code> access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.4</td><td align="left"><code class="code">reference_wrapper</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.5</td><td align="left"><code class="code">reference_wrapper</code> helper functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.1</td><td align="left">Additions to header <code class="code">&lt;memory&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.2</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left"> </td><td align="left">
++</p><div class="table"><a id="idm270000018688"></a><p class="title"><strong>Table 1.3. C++ TR1 Implementation Status</strong></p><div class="table-contents"><table summary="C++ TR1 Implementation Status" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Section</th><th align="left">Description</th><th align="left">Status</th><th align="left">Comments</th></tr></thead><tbody><tr><td align="left"><span class="emphasis"><em>2</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>General Utilities</em></span></td></tr><tr><td align="left">2.1</td><td align="left">Reference wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.1</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2</td><td align="left">Class template <code class="code">reference_wrapper</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.1.2.1</td><td align="left"><code class="code">reference_wrapper</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.2</td><td align="left"><code class="code">reference_wrapper</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.3</td><td align="left"><code class="code">reference_wrapper</code> access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.4</td><td align="left"><code class="code">reference_wrapper</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.1.2.5</td><td align="left"><code class="code">reference_wrapper</code> helper functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2</td><td align="left">Smart pointers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.1</td><td align="left">Additions to header <code class="code">&lt;memory&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.2</td><td align="left">Class <code class="code">bad_weak_ptr</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3</td><td align="left">Class template <code class="code">shared_ptr</code></td><td align="left"> </td><td align="left">
+ <p>
+ Uses code from
+ <a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">boost::shared_ptr</a>.
+ </p>
+- </td></tr><tr><td align="left">2.2.3.1</td><td align="left"><code class="code">shared_ptr</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.2</td><td align="left"><code class="code">shared_ptr</code> destructor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.3</td><td align="left"><code class="code">shared_ptr</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.4</td><td align="left"><code class="code">shared_ptr</code> modifiers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.5</td><td align="left"><code class="code">shared_ptr</code> observers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.6</td><td align="left"><code class="code">shared_ptr</code> comparison</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.7</td><td align="left"><code class="code">shared_ptr</code> I/O</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.8</td><td align="left"><code class="code">shared_ptr</code> specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.9</td><td align="left"><code class="code">shared_ptr</code> casts</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.10</td><td align="left"><code class="code">get_deleter</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4</td><td align="left">Class template <code class="code">weak_ptr</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.4.1</td><td align="left"><code class="code">weak_ptr</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.2</td><td align="left"><code class="code">weak_ptr</code> destructor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.3</td><td align="left"><code class="code">weak_ptr</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.4</td><td align="left"><code class="code">weak_ptr</code> modifiers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.5</td><td align="left"><code class="code">weak_ptr</code> observers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.6</td><td align="left"><code class="code">weak_ptr</code> comparison</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.7</td><td align="left"><code class="code">weak_ptr</code> specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.5</td><td align="left">Class template <code class="code">enable_shared_from_this</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>3</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Function Objects</em></span></td></tr><tr><td align="left">3.1</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.2</td><td align="left">Additions to <code class="code">&lt;functional&gt; synopsis</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.3</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.4</td><td align="left">Function return types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.5</td><td align="left">Function template <code class="code">mem_fn</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6</td><td align="left">Function object binders</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.6.1</td><td align="left">Class template <code class="code">is_bind_expression</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6.2</td><td align="left">Class template <code class="code">is_placeholder</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6.3</td><td align="left">Function template <code class="code">bind</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6.4</td><td align="left">Placeholders</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7</td><td align="left">Polymorphic function wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.7.1</td><td align="left">Class <code class="code">bad_function_call</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.1.1</td><td align="left"><code class="code">bad_function_call</code> constructor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2</td><td align="left">Class template <code class="code">function</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.7.2.1</td><td align="left"><code class="code">function</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.2</td><td align="left"><code class="code">function</code> modifiers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.3</td><td align="left"><code class="code">function</code> capacity</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.4</td><td align="left"><code class="code">function</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.5</td><td align="left"><code class="code">function</code> target access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.6</td><td align="left">undefined operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.7</td><td align="left">null pointer comparison operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.8</td><td align="left">specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>4</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Metaprogramming and type traits</em></span></td></tr><tr><td align="left">4.1</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.2</td><td align="left">Header <code class="code">&lt;type_traits&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.3</td><td align="left">Helper classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.4</td><td align="left">General Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.5</td><td align="left">Unary Type Traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">4.5.1</td><td align="left">Primary Type Categories</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.5.2</td><td align="left">Composite type traits</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.5.3</td><td align="left">Type properties</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.6</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7</td><td align="left">Transformations between types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">4.7.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7.3</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7.4</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.8</td><td align="left">Other transformations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.9</td><td align="left">Implementation requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>5</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Numerical Facilities</em></span></td></tr><tr><td align="left">5.1</td><td align="left">Random number generation</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">5.1.1</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.2</td><td align="left">Header <code class="code">&lt;random&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.3</td><td align="left">Class template <code class="code">variate_generator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4</td><td align="left">Random number engine class templates</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.1</td><td align="left">Class template <code class="code">linear_congruential</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.2</td><td align="left">Class template <code class="code">mersenne_twister</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.3</td><td align="left">Class template <code class="code">subtract_with_carry</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.4</td><td align="left">Class template <code class="code">subtract_with_carry_01</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.5</td><td align="left">Class template <code class="code">discard_block</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.6</td><td align="left">Class template <code class="code">xor_combine</code></td><td align="left">Y</td><td align="left">operator()() per N2079</td></tr><tr><td align="left">5.1.5</td><td align="left">Engines with predefined parameters</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.6</td><td align="left">Class <code class="code">random_device</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7</td><td align="left">Random distribution class templates</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.1</td><td align="left">Class template <code class="code">uniform_int</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.2</td><td align="left">Class <code class="code">bernoulli_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.3</td><td align="left">Class template <code class="code">geometric_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.4</td><td align="left">Class template <code class="code">poisson_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.5</td><td align="left">Class template <code class="code">binomial_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.6</td><td align="left">Class template <code class="code">uniform_real</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.7</td><td align="left">Class template <code class="code">exponential_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.8</td><td align="left">Class template <code class="code">normal_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.9</td><td align="left">Class template <code class="code">gamma_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2</td><td align="left">Mathematical special functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1</td><td align="left">Additions to header <code class="code">&lt;cmath&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.1</td><td align="left">associated Laguerre polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.2</td><td align="left">associated Legendre functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.3</td><td align="left">beta function</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.4</td><td align="left">(complete) elliptic integral of the first kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.5</td><td align="left">(complete) elliptic integral of the second kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.6</td><td align="left">(complete) elliptic integral of the third kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.7</td><td align="left">confluent hypergeometric functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.8</td><td align="left">regular modified cylindrical Bessel functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.9</td><td align="left">cylindrical Bessel functions (of the first kind)</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.10</td><td align="left">irregular modified cylindrical Bessel functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.11</td><td align="left">cylindrical Neumann functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.12</td><td align="left">(incomplete) elliptic integral of the first kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.13</td><td align="left">(incomplete) elliptic integral of the second kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.14</td><td align="left">(incomplete) elliptic integral of the third kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.15</td><td align="left">exponential integral</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.16</td><td align="left">Hermite polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.17</td><td align="left">hypergeometric functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.18</td><td align="left">Laguerre polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.19</td><td align="left">Legendre polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.20</td><td align="left">Riemann zeta function</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.21</td><td align="left">spherical Bessel functions (of the first kind)</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.22</td><td align="left">spherical associated Legendre functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.23</td><td align="left">spherical Neumann functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.2</td><td align="left">Additions to header <code class="code">&lt;math.h&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>6</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Containers</em></span></td></tr><tr><td align="left">6.1</td><td align="left">Tuple types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.1</td><td align="left">Header <code class="code">&lt;tuple&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.2</td><td align="left">Additions to header <code class="code">&lt;utility&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3</td><td align="left">Class template <code class="code">tuple</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.1</td><td align="left">Construction</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.2</td><td align="left">Tuple creation functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.3</td><td align="left">Tuple helper classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.4</td><td align="left">Element access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.5</td><td align="left">Relational operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.4</td><td align="left">Pairs</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2</td><td align="left">Fixed size array</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.1</td><td align="left">Header <code class="code">&lt;array&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2</td><td align="left">Class template <code class="code">array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.1</td><td align="left"><code class="code">array</code> constructors, copy, and assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.2</td><td align="left"><code class="code">array</code> specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.3</td><td align="left"><code class="code">array</code> size</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.4</td><td align="left">Zero sized <code class="code">array</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.5</td><td align="left">Tuple interface to class template <code class="code">array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3</td><td align="left">Unordered associative containers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.1</td><td align="left">Unordered associative container requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.1.1</td><td align="left">Exception safety guarantees</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.2</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.3</td><td align="left">Class template <code class="code">hash</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4</td><td align="left">Unordered associative container classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.1</td><td align="left">Header <code class="code">&lt;unordered_set&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.2</td><td align="left">Header <code class="code">&lt;unordered_map&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.3</td><td align="left">Class template <code class="code">unordered_set</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.3.1</td><td align="left"><code class="code">unordered_set</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.3.2</td><td align="left"><code class="code">unordered_set</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4</td><td align="left">Class template <code class="code">unordered_map</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4.1</td><td align="left"><code class="code">unordered_map</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4.2</td><td align="left"><code class="code">unordered_map</code> element access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4.3</td><td align="left"><code class="code">unordered_map</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.5</td><td align="left">Class template <code class="code">unordered_multiset</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.5.1</td><td align="left"><code class="code">unordered_multiset</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.5.2</td><td align="left"><code class="code">unordered_multiset</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.6</td><td align="left">Class template <code class="code">unordered_multimap</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.6.1</td><td align="left"><code class="code">unordered_multimap</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.6.2</td><td align="left"><code class="code">unordered_multimap</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>7</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Regular Expressions</em></span></td></tr><tr bgcolor="#C8B0B0"><td align="left">7.1</td><td align="left">Definitions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.2</td><td align="left">Requirements</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.3</td><td align="left">Regular expressions summary</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.4</td><td align="left">Header <code class="code">&lt;regex&gt;</code> synopsis</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5</td><td align="left">Namespace <code class="code">tr1::regex_constants</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5.1</td><td align="left">Bitmask Type <code class="code">syntax_option_type</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5.2</td><td align="left">Bitmask Type <code class="code">regex_constants::match_flag_type</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5.3</td><td align="left">Implementation defined <code class="code">error_type</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.6</td><td align="left">Class <code class="code">regex_error</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.7</td><td align="left">Class template <code class="code">regex_traits</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8</td><td align="left">Class template <code class="code">basic_regex</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.1</td><td align="left"><code class="code">basic_regex</code> constants</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.2</td><td align="left"><code class="code">basic_regex</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.3</td><td align="left"><code class="code">basic_regex</code> assign</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.4</td><td align="left"><code class="code">basic_regex</code> constant operations</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.5</td><td align="left"><code class="code">basic_regex</code> locale</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.6</td><td align="left"><code class="code">basic_regex</code> swap</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.7</td><td align="left"><code class="code">basic_regex</code> non-member functions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.7.1</td><td align="left"><code class="code">basic_regex</code> non-member swap</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.9</td><td align="left">Class template <code class="code">sub_match</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.9.1</td><td align="left"><code class="code">sub_match</code> members</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.9.2</td><td align="left"><code class="code">sub_match</code> non-member operators</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10</td><td align="left">Class template <code class="code">match_results</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.1</td><td align="left"><code class="code">match_results</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.2</td><td align="left"><code class="code">match_results</code> size</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.3</td><td align="left"><code class="code">match_results</code> element access</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.4</td><td align="left"><code class="code">match_results</code> formatting</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.5</td><td align="left"><code class="code">match_results</code> allocator</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.6</td><td align="left"><code class="code">match_results</code> swap</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11</td><td align="left">Regular expression algorithms</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.1</td><td align="left">exceptions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.2</td><td align="left"><code class="code">regex_match</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.3</td><td align="left"><code class="code">regex_search</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.4</td><td align="left"><code class="code">regex_replace</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12</td><td align="left">Regular expression Iterators</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1</td><td align="left">Class template <code class="code">regex_iterator</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.1</td><td align="left"><code class="code">regex_iterator</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.2</td><td align="left"><code class="code">regex_iterator</code> comparisons</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.3</td><td align="left"><code class="code">regex_iterator</code> dereference</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.4</td><td align="left"><code class="code">regex_iterator</code> increment</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2</td><td align="left">Class template <code class="code">regex_token_iterator</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.1</td><td align="left"><code class="code">regex_token_iterator</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.2</td><td align="left"><code class="code">regex_token_iterator</code> comparisons</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.3</td><td align="left"><code class="code">regex_token_iterator</code> dereference</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.4</td><td align="left"><code class="code">regex_token_iterator</code> increment</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.13</td><td align="left">Modified ECMAScript regular expression grammar</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>8</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>C Compatibility</em></span></td></tr><tr><td align="left">8.1</td><td align="left">Additions to header <code class="code">&lt;complex&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.2</td><td align="left">Function <code class="code">acos</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.3</td><td align="left">Function <code class="code">asin</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.4</td><td align="left">Function <code class="code">atan</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.5</td><td align="left">Function <code class="code">acosh</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.6</td><td align="left">Function <code class="code">asinh</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.7</td><td align="left">Function <code class="code">atanh</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.8</td><td align="left">Function <code class="code">fabs</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.9</td><td align="left">Additional Overloads</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.2</td><td align="left">Header <code class="code">&lt;ccomplex&gt;</code></td><td align="left">N</td><td align="left">DR 551</td></tr><tr bgcolor="#C8B0B0"><td align="left">8.3</td><td align="left">Header <code class="code">&lt;complex.h&gt;</code></td><td align="left">N</td><td align="left">DR 551</td></tr><tr><td align="left">8.4</td><td align="left">Additions to header <code class="code">&lt;cctype&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.4.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.4.2</td><td align="left">Function <code class="code">isblank</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.5</td><td align="left">Additions to header <code class="code">&lt;ctype.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.6</td><td align="left">Header <code class="code">&lt;cfenv&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.6.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.6.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.7</td><td align="left">Header <code class="code">&lt;fenv.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.8</td><td align="left">Additions to header <code class="code">&lt;cfloat&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.9</td><td align="left">Additions to header <code class="code">&lt;float.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.10</td><td align="left">Additions to header <code class="code">&lt;ios&gt;</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.10.1</td><td align="left">Synopsis</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.10.2</td><td align="left">Function <code class="code">hexfloat</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">8.11</td><td align="left">Header <code class="code">&lt;cinttypes&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.11.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left">DR 557</td></tr><tr><td align="left">8.11.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.12</td><td align="left">Header <code class="code">&lt;inttypes.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.13</td><td align="left">Additions to header <code class="code">&lt;climits&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.14</td><td align="left">Additions to header <code class="code">&lt;limits.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.15</td><td align="left">Additions to header <code class="code">&lt;locale&gt;</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">8.16</td><td align="left">Additions to header <code class="code">&lt;cmath&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.3</td><td align="left">Function template definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.4</td><td align="left">Additional overloads</td><td align="left">Y</td><td align="left">DR 568; DR 550</td></tr><tr><td align="left">8.17</td><td align="left">Additions to header <code class="code">&lt;math.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.18</td><td align="left">Additions to header <code class="code">&lt;cstdarg&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.19</td><td align="left">Additions to header <code class="code">&lt;stdarg.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.20</td><td align="left">The header <code class="code">&lt;cstdbool&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.21</td><td align="left">The header <code class="code">&lt;stdbool.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.22</td><td align="left">The header <code class="code">&lt;cstdint&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.22.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.22.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.23</td><td align="left">The header <code class="code">&lt;stdint.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24</td><td align="left">Additions to header <code class="code">&lt;cstdio&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24.3</td><td align="left">Additional format specifiers</td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">8.24.4</td><td align="left">Additions to header <code class="code">&lt;stdio.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25</td><td align="left">Additions to header <code class="code">&lt;cstdlib&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.3</td><td align="left">Function <code class="code">abs</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.4</td><td align="left">Function <code class="code">div</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.26</td><td align="left">Additions to header <code class="code">&lt;stdlib.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.27</td><td align="left">Header <code class="code">&lt;ctgmath&gt;</code></td><td align="left">Y</td><td align="left">DR 551</td></tr><tr><td align="left">8.28</td><td align="left">Header <code class="code">&lt;tgmath.h&gt;</code></td><td align="left">Y</td><td align="left">DR 551</td></tr><tr><td align="left">8.29</td><td align="left">Additions to header <code class="code">&lt;ctime&gt;</code></td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">8.30</td><td align="left">Additions to header <code class="code">&lt;cwchar&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.30.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.30.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.30.3</td><td align="left">Additional wide format specifiers</td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">8.31</td><td align="left">Additions to header <code class="code">&lt;wchar.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.32</td><td align="left">Additions to header <code class="code">&lt;cwctype&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.32.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.32.2</td><td align="left">Function <code class="code">iswblank</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.33</td><td align="left">Additions to header <code class="code">&lt;wctype.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><div class="section" title="Implementation Specific Behavior"><div class="titlepage"><div><div><h4 class="title"><a id="iso.tr1.specific"></a>Implementation Specific Behavior</h4></div></div></div><p>For behaviour which is specified by the 1998 and 2003 standards,
++ </td></tr><tr><td align="left">2.2.3.1</td><td align="left"><code class="code">shared_ptr</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.2</td><td align="left"><code class="code">shared_ptr</code> destructor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.3</td><td align="left"><code class="code">shared_ptr</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.4</td><td align="left"><code class="code">shared_ptr</code> modifiers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.5</td><td align="left"><code class="code">shared_ptr</code> observers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.6</td><td align="left"><code class="code">shared_ptr</code> comparison</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.7</td><td align="left"><code class="code">shared_ptr</code> I/O</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.8</td><td align="left"><code class="code">shared_ptr</code> specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.9</td><td align="left"><code class="code">shared_ptr</code> casts</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.3.10</td><td align="left"><code class="code">get_deleter</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4</td><td align="left">Class template <code class="code">weak_ptr</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">2.2.4.1</td><td align="left"><code class="code">weak_ptr</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.2</td><td align="left"><code class="code">weak_ptr</code> destructor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.3</td><td align="left"><code class="code">weak_ptr</code> assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.4</td><td align="left"><code class="code">weak_ptr</code> modifiers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.5</td><td align="left"><code class="code">weak_ptr</code> observers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.6</td><td align="left"><code class="code">weak_ptr</code> comparison</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.4.7</td><td align="left"><code class="code">weak_ptr</code> specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">2.2.5</td><td align="left">Class template <code class="code">enable_shared_from_this</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>3</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Function Objects</em></span></td></tr><tr><td align="left">3.1</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.2</td><td align="left">Additions to <code class="code">&lt;functional&gt; synopsis</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.3</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.4</td><td align="left">Function return types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.5</td><td align="left">Function template <code class="code">mem_fn</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6</td><td align="left">Function object binders</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.6.1</td><td align="left">Class template <code class="code">is_bind_expression</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6.2</td><td align="left">Class template <code class="code">is_placeholder</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6.3</td><td align="left">Function template <code class="code">bind</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.6.4</td><td align="left">Placeholders</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7</td><td align="left">Polymorphic function wrappers</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.7.1</td><td align="left">Class <code class="code">bad_function_call</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.1.1</td><td align="left"><code class="code">bad_function_call</code> constructor</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2</td><td align="left">Class template <code class="code">function</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">3.7.2.1</td><td align="left"><code class="code">function</code> construct/copy/destroy</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.2</td><td align="left"><code class="code">function</code> modifiers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.3</td><td align="left"><code class="code">function</code> capacity</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.4</td><td align="left"><code class="code">function</code> invocation</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.5</td><td align="left"><code class="code">function</code> target access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.6</td><td align="left">undefined operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.7</td><td align="left">null pointer comparison operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">3.7.2.8</td><td align="left">specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>4</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Metaprogramming and type traits</em></span></td></tr><tr><td align="left">4.1</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.2</td><td align="left">Header <code class="code">&lt;type_traits&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.3</td><td align="left">Helper classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.4</td><td align="left">General Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.5</td><td align="left">Unary Type Traits</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">4.5.1</td><td align="left">Primary Type Categories</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.5.2</td><td align="left">Composite type traits</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.5.3</td><td align="left">Type properties</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.6</td><td align="left">Relationships between types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7</td><td align="left">Transformations between types</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">4.7.1</td><td align="left">Const-volatile modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7.2</td><td align="left">Reference modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7.3</td><td align="left">Array modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.7.4</td><td align="left">Pointer modifications</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.8</td><td align="left">Other transformations</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">4.9</td><td align="left">Implementation requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>5</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Numerical Facilities</em></span></td></tr><tr><td align="left">5.1</td><td align="left">Random number generation</td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left">5.1.1</td><td align="left">Requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.2</td><td align="left">Header <code class="code">&lt;random&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.3</td><td align="left">Class template <code class="code">variate_generator</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4</td><td align="left">Random number engine class templates</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.1</td><td align="left">Class template <code class="code">linear_congruential</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.2</td><td align="left">Class template <code class="code">mersenne_twister</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.3</td><td align="left">Class template <code class="code">subtract_with_carry</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.4</td><td align="left">Class template <code class="code">subtract_with_carry_01</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.5</td><td align="left">Class template <code class="code">discard_block</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.4.6</td><td align="left">Class template <code class="code">xor_combine</code></td><td align="left">Y</td><td align="left">operator()() per N2079</td></tr><tr><td align="left">5.1.5</td><td align="left">Engines with predefined parameters</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.6</td><td align="left">Class <code class="code">random_device</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7</td><td align="left">Random distribution class templates</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.1</td><td align="left">Class template <code class="code">uniform_int</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.2</td><td align="left">Class <code class="code">bernoulli_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.3</td><td align="left">Class template <code class="code">geometric_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.4</td><td align="left">Class template <code class="code">poisson_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.5</td><td align="left">Class template <code class="code">binomial_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.6</td><td align="left">Class template <code class="code">uniform_real</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.7</td><td align="left">Class template <code class="code">exponential_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.8</td><td align="left">Class template <code class="code">normal_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.1.7.9</td><td align="left">Class template <code class="code">gamma_distribution</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2</td><td align="left">Mathematical special functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1</td><td align="left">Additions to header <code class="code">&lt;cmath&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.1</td><td align="left">associated Laguerre polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.2</td><td align="left">associated Legendre functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.3</td><td align="left">beta function</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.4</td><td align="left">(complete) elliptic integral of the first kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.5</td><td align="left">(complete) elliptic integral of the second kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.6</td><td align="left">(complete) elliptic integral of the third kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.7</td><td align="left">confluent hypergeometric functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.8</td><td align="left">regular modified cylindrical Bessel functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.9</td><td align="left">cylindrical Bessel functions (of the first kind)</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.10</td><td align="left">irregular modified cylindrical Bessel functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.11</td><td align="left">cylindrical Neumann functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.12</td><td align="left">(incomplete) elliptic integral of the first kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.13</td><td align="left">(incomplete) elliptic integral of the second kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.14</td><td align="left">(incomplete) elliptic integral of the third kind</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.15</td><td align="left">exponential integral</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.16</td><td align="left">Hermite polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.17</td><td align="left">hypergeometric functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.18</td><td align="left">Laguerre polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.19</td><td align="left">Legendre polynomials</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.20</td><td align="left">Riemann zeta function</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.21</td><td align="left">spherical Bessel functions (of the first kind)</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.22</td><td align="left">spherical associated Legendre functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.1.23</td><td align="left">spherical Neumann functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">5.2.2</td><td align="left">Additions to header <code class="code">&lt;math.h&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>6</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Containers</em></span></td></tr><tr><td align="left">6.1</td><td align="left">Tuple types</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.1</td><td align="left">Header <code class="code">&lt;tuple&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.2</td><td align="left">Additions to header <code class="code">&lt;utility&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3</td><td align="left">Class template <code class="code">tuple</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.1</td><td align="left">Construction</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.2</td><td align="left">Tuple creation functions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.3</td><td align="left">Tuple helper classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.4</td><td align="left">Element access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.3.5</td><td align="left">Relational operators</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.1.4</td><td align="left">Pairs</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2</td><td align="left">Fixed size array</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.1</td><td align="left">Header <code class="code">&lt;array&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2</td><td align="left">Class template <code class="code">array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.1</td><td align="left"><code class="code">array</code> constructors, copy, and assignment</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.2</td><td align="left"><code class="code">array</code> specialized algorithms</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.3</td><td align="left"><code class="code">array</code> size</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.4</td><td align="left">Zero sized <code class="code">array</code>s</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.2.2.5</td><td align="left">Tuple interface to class template <code class="code">array</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3</td><td align="left">Unordered associative containers</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.1</td><td align="left">Unordered associative container requirements</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.1.1</td><td align="left">Exception safety guarantees</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.2</td><td align="left">Additions to header <code class="code">&lt;functional&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.3</td><td align="left">Class template <code class="code">hash</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4</td><td align="left">Unordered associative container classes</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.1</td><td align="left">Header <code class="code">&lt;unordered_set&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.2</td><td align="left">Header <code class="code">&lt;unordered_map&gt;</code> synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.3</td><td align="left">Class template <code class="code">unordered_set</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.3.1</td><td align="left"><code class="code">unordered_set</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.3.2</td><td align="left"><code class="code">unordered_set</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4</td><td align="left">Class template <code class="code">unordered_map</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4.1</td><td align="left"><code class="code">unordered_map</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4.2</td><td align="left"><code class="code">unordered_map</code> element access</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.4.3</td><td align="left"><code class="code">unordered_map</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.5</td><td align="left">Class template <code class="code">unordered_multiset</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.5.1</td><td align="left"><code class="code">unordered_multiset</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.5.2</td><td align="left"><code class="code">unordered_multiset</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.6</td><td align="left">Class template <code class="code">unordered_multimap</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.6.1</td><td align="left"><code class="code">unordered_multimap</code> constructors</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">6.3.4.6.2</td><td align="left"><code class="code">unordered_multimap</code> swap</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>7</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>Regular Expressions</em></span></td></tr><tr bgcolor="#C8B0B0"><td align="left">7.1</td><td align="left">Definitions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.2</td><td align="left">Requirements</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.3</td><td align="left">Regular expressions summary</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.4</td><td align="left">Header <code class="code">&lt;regex&gt;</code> synopsis</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5</td><td align="left">Namespace <code class="code">tr1::regex_constants</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5.1</td><td align="left">Bitmask Type <code class="code">syntax_option_type</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5.2</td><td align="left">Bitmask Type <code class="code">regex_constants::match_flag_type</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.5.3</td><td align="left">Implementation defined <code class="code">error_type</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.6</td><td align="left">Class <code class="code">regex_error</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.7</td><td align="left">Class template <code class="code">regex_traits</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8</td><td align="left">Class template <code class="code">basic_regex</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.1</td><td align="left"><code class="code">basic_regex</code> constants</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.2</td><td align="left"><code class="code">basic_regex</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.3</td><td align="left"><code class="code">basic_regex</code> assign</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.4</td><td align="left"><code class="code">basic_regex</code> constant operations</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.5</td><td align="left"><code class="code">basic_regex</code> locale</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.6</td><td align="left"><code class="code">basic_regex</code> swap</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.7</td><td align="left"><code class="code">basic_regex</code> non-member functions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.8.7.1</td><td align="left"><code class="code">basic_regex</code> non-member swap</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.9</td><td align="left">Class template <code class="code">sub_match</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.9.1</td><td align="left"><code class="code">sub_match</code> members</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.9.2</td><td align="left"><code class="code">sub_match</code> non-member operators</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10</td><td align="left">Class template <code class="code">match_results</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.1</td><td align="left"><code class="code">match_results</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.2</td><td align="left"><code class="code">match_results</code> size</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.3</td><td align="left"><code class="code">match_results</code> element access</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.4</td><td align="left"><code class="code">match_results</code> formatting</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.5</td><td align="left"><code class="code">match_results</code> allocator</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.10.6</td><td align="left"><code class="code">match_results</code> swap</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11</td><td align="left">Regular expression algorithms</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.1</td><td align="left">exceptions</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.2</td><td align="left"><code class="code">regex_match</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.3</td><td align="left"><code class="code">regex_search</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.11.4</td><td align="left"><code class="code">regex_replace</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12</td><td align="left">Regular expression Iterators</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1</td><td align="left">Class template <code class="code">regex_iterator</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.1</td><td align="left"><code class="code">regex_iterator</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.2</td><td align="left"><code class="code">regex_iterator</code> comparisons</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.3</td><td align="left"><code class="code">regex_iterator</code> dereference</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.1.4</td><td align="left"><code class="code">regex_iterator</code> increment</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2</td><td align="left">Class template <code class="code">regex_token_iterator</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.1</td><td align="left"><code class="code">regex_token_iterator</code> constructors</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.2</td><td align="left"><code class="code">regex_token_iterator</code> comparisons</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.3</td><td align="left"><code class="code">regex_token_iterator</code> dereference</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.12.2.4</td><td align="left"><code class="code">regex_token_iterator</code> increment</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">7.13</td><td align="left">Modified ECMAScript regular expression grammar</td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left"><span class="emphasis"><em>8</em></span></td><td colspan="3" align="left"><span class="emphasis"><em>C Compatibility</em></span></td></tr><tr><td align="left">8.1</td><td align="left">Additions to header <code class="code">&lt;complex&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.2</td><td align="left">Function <code class="code">acos</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.3</td><td align="left">Function <code class="code">asin</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.4</td><td align="left">Function <code class="code">atan</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.5</td><td align="left">Function <code class="code">acosh</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.6</td><td align="left">Function <code class="code">asinh</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.7</td><td align="left">Function <code class="code">atanh</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.8</td><td align="left">Function <code class="code">fabs</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.1.9</td><td align="left">Additional Overloads</td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.2</td><td align="left">Header <code class="code">&lt;ccomplex&gt;</code></td><td align="left">N</td><td align="left">DR 551</td></tr><tr bgcolor="#C8B0B0"><td align="left">8.3</td><td align="left">Header <code class="code">&lt;complex.h&gt;</code></td><td align="left">N</td><td align="left">DR 551</td></tr><tr><td align="left">8.4</td><td align="left">Additions to header <code class="code">&lt;cctype&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.4.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.4.2</td><td align="left">Function <code class="code">isblank</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.5</td><td align="left">Additions to header <code class="code">&lt;ctype.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.6</td><td align="left">Header <code class="code">&lt;cfenv&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.6.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.6.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.7</td><td align="left">Header <code class="code">&lt;fenv.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.8</td><td align="left">Additions to header <code class="code">&lt;cfloat&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.9</td><td align="left">Additions to header <code class="code">&lt;float.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.10</td><td align="left">Additions to header <code class="code">&lt;ios&gt;</code></td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.10.1</td><td align="left">Synopsis</td><td align="left">N</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.10.2</td><td align="left">Function <code class="code">hexfloat</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">8.11</td><td align="left">Header <code class="code">&lt;cinttypes&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.11.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left">DR 557</td></tr><tr><td align="left">8.11.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.12</td><td align="left">Header <code class="code">&lt;inttypes.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.13</td><td align="left">Additions to header <code class="code">&lt;climits&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.14</td><td align="left">Additions to header <code class="code">&lt;limits.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left">8.15</td><td align="left">Additions to header <code class="code">&lt;locale&gt;</code></td><td align="left">N</td><td align="left"> </td></tr><tr><td align="left">8.16</td><td align="left">Additions to header <code class="code">&lt;cmath&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.3</td><td align="left">Function template definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.16.4</td><td align="left">Additional overloads</td><td align="left">Y</td><td align="left">DR 568; DR 550</td></tr><tr><td align="left">8.17</td><td align="left">Additions to header <code class="code">&lt;math.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.18</td><td align="left">Additions to header <code class="code">&lt;cstdarg&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.19</td><td align="left">Additions to header <code class="code">&lt;stdarg.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.20</td><td align="left">The header <code class="code">&lt;cstdbool&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.21</td><td align="left">The header <code class="code">&lt;stdbool.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.22</td><td align="left">The header <code class="code">&lt;cstdint&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.22.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.22.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.23</td><td align="left">The header <code class="code">&lt;stdint.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24</td><td align="left">Additions to header <code class="code">&lt;cstdio&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.24.3</td><td align="left">Additional format specifiers</td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">8.24.4</td><td align="left">Additions to header <code class="code">&lt;stdio.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25</td><td align="left">Additions to header <code class="code">&lt;cstdlib&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.3</td><td align="left">Function <code class="code">abs</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.25.4</td><td align="left">Function <code class="code">div</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.26</td><td align="left">Additions to header <code class="code">&lt;stdlib.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.27</td><td align="left">Header <code class="code">&lt;ctgmath&gt;</code></td><td align="left">Y</td><td align="left">DR 551</td></tr><tr><td align="left">8.28</td><td align="left">Header <code class="code">&lt;tgmath.h&gt;</code></td><td align="left">Y</td><td align="left">DR 551</td></tr><tr><td align="left">8.29</td><td align="left">Additions to header <code class="code">&lt;ctime&gt;</code></td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">8.30</td><td align="left">Additions to header <code class="code">&lt;cwchar&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.30.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.30.2</td><td align="left">Definitions</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.30.3</td><td align="left">Additional wide format specifiers</td><td align="left">Y</td><td align="left">C library dependency</td></tr><tr><td align="left">8.31</td><td align="left">Additions to header <code class="code">&lt;wchar.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.32</td><td align="left">Additions to header <code class="code">&lt;cwctype&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.32.1</td><td align="left">Synopsis</td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.32.2</td><td align="left">Function <code class="code">iswblank</code></td><td align="left">Y</td><td align="left"> </td></tr><tr><td align="left">8.33</td><td align="left">Additions to header <code class="code">&lt;wctype.h&gt;</code></td><td align="left">Y</td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="iso.tr1.specific"></a>Implementation Specific Behavior</h4></div></div></div><p>For behaviour which is specified by the 1998 and 2003 standards,
+ see <a class="link" href="status.html#iso.1998.specific" title="Implementation Specific Behavior">C++ 1998/2003 Implementation
+ Specific Behavior</a>. This section documents behaviour which
+ is required by TR1.
+@@ -299,7 +304,7 @@
+ <span class="emphasis"><em>3.6.4 [tr.func.bind.place]/1</em></span> There are 29
+ placeholders defined and the placeholder types are
+ <code class="literal">Assignable</code>.
+- </p></div></div><div class="section" title="C++ TR 24733"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.tr24733"></a>C++ TR 24733</h3></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="status.iso.tr24733"></a>C++ TR 24733</h3></div></div></div><p>
+ This table is based on the table of contents of
+ ISO/IEC TR 24733 Date: 2009-08-28
+ Extension for the programming language C++ to support
+@@ -307,7 +312,7 @@
+ </p><p>
+ This page describes the TR 24733 support in mainline GCC SVN, not in any
+ particular release.
+-</p><div class="table"><a id="idp12526624"></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">
++</p><div class="table"><a id="idm269989661024"></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">
+ <span class="emphasis"><em>0</em></span>
+ </td><td colspan="3" align="left">
+ <span class="emphasis"><em>Introduction</em></span>
+@@ -330,4 +335,4 @@
+ </td></tr></tbody></table></div></div><br class="table-break" /></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="intro.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="license.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part I. 
+ Introduction
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> License</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> License</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/policy_data_structures_design.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures_design.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures_design.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Design"><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" title="Concepts"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.design.concepts"></a>Concepts</h3></div></div></div><div class="section" title="Null Policy Classes"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.null_type"></a>Null Policy Classes</h4></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ Associative containers are typically parametrized by various
+ policies. For example, a hash-based associative container is
+ parametrized by a hash-functor, transforming each key into an
+@@ -27,7 +26,7 @@
+ places simplifications are made possible with this technique
+ include node updates in tree and trie data structures, and hash
+ and probe functions for hash data structures.
+- </p></div><div class="section" title="Map and Set Semantics"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.associative_semantics"></a>Map and Set Semantics</h4></div></div></div><div class="section" title="Distinguishing Between Maps and Sets"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.associative_semantics.set_vs_map"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.associative_semantics"></a>Map and Set Semantics</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.associative_semantics.set_vs_map"></a>
+ Distinguishing Between Maps and Sets
+ </h5></div></div></div><p>
+ Anyone familiar with the standard knows that there are four kinds
+@@ -93,7 +92,7 @@
+ </p><p>
+ When one uses a "multimap," one should choose with care the
+ type of container used for secondary keys.
+- </p></div><div class="section" title="Alternatives to std::multiset and std::multimap"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.associative_semantics.multi"></a>Alternatives to <code class="classname">std::multiset</code> and <code class="classname">std::multimap</code></h5></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.associative_semantics.multi"></a>Alternatives to <code class="classname">std::multiset</code> and <code class="classname">std::multimap</code></h5></div></div></div><p>
+ Brace onself: this library does not contain containers like
+ <code class="classname">std::multimap</code> or
+ <code class="classname">std::multiset</code>. Instead, these data
+@@ -171,7 +170,7 @@
+ naturally; collision-chaining hash tables (label B) store
+ equivalent-key values in the same bucket, the bucket can be
+ arranged so that equivalent-key values are consecutive.
+- </p><div class="figure"><a id="idp17962720"></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>
++ </p><div class="figure"><a id="idm269984247008"></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>
+ Put differently, the standards' non-unique mapping
+ associative-containers are associative containers that map
+ primary keys to linked lists that are embedded into the
+@@ -253,7 +252,7 @@
+ first graphic above. Labels A and B, respectively. Each shaded
+ box represents some size-type or secondary
+ associative-container.
+- </p><div class="figure"><a id="idp17986224"></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>
++ </p><div class="figure"><a id="idm269984223568"></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>
+ In the first example above, then, one would use an associative
+ container mapping each user to an associative container which
+ maps each application id to a start time (see
+@@ -265,7 +264,7 @@
+ </p><p>
+ See the discussion in list-based container types for containers
+ especially suited as secondary associative-containers.
+- </p></div></div><div class="section" title="Iterator Semantics"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.iterator_semantics"></a>Iterator Semantics</h4></div></div></div><div class="section" title="Point and Range Iterators"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.iterator_semantics.point_and_range"></a>Point and Range Iterators</h5></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.iterator_semantics"></a>Iterator Semantics</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.iterator_semantics.point_and_range"></a>Point and Range Iterators</h5></div></div></div><p>
+ Iterator concepts are bifurcated in this design, and are
+ comprised of point-type and range-type iteration.
+ </p><p>
+@@ -286,7 +285,7 @@
+ implementation, including that of C++ standard library
+ components), but in this design, it is made explicit. They are
+ distinct types.
+- </p></div><div class="section" title="Distinguishing Point and Range Iterators"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.iterator_semantics.both"></a>Distinguishing Point and Range Iterators</h5></div></div></div><p>When using this library, is necessary to differentiate
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.iterator_semantics.both"></a>Distinguishing Point and Range Iterators</h5></div></div></div><p>When using this library, is necessary to differentiate
+ between two types of methods and iterators: point-type methods and
+ iterators, and range-type methods and iterators. Each associative
+ container's interface includes the methods:</p><pre class="programlisting">
+@@ -306,7 +305,7 @@
+ shows invariants for order-preserving containers: point-type
+ iterators are synonymous with range-type iterators.
+ Orthogonally, <span class="emphasis"><em>C</em></span>shows invariants for "set"
+- containers: iterators are synonymous with const iterators.</p><div class="figure"><a id="idp18006032"></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
++ containers: iterators are synonymous with const iterators.</p><div class="figure"><a id="idm269984203760"></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
+ (hash-based associative containers) lack movement
+ operators, such as <code class="literal">operator++</code> - in fact, this
+ is the reason why this library differentiates from the standard C++ librarys
+@@ -322,7 +321,7 @@
+ a concept in C++ standardese, which is the category of iterators
+ with no movement capabilities.) All other standard C++ library
+ tags, such as <code class="literal">forward_iterator_tag</code> retain their
+- common use.</p></div><div class="section" title="Invalidation Guarantees"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.design.concepts.invalidation"></a>Invalidation Guarantees</h5></div></div></div><p>
++ common use.</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.design.concepts.invalidation"></a>Invalidation Guarantees</h5></div></div></div><p>
+ If one manipulates a container object, then iterators previously
+ obtained from it can be invalidated. In some cases a
+ previously-obtained iterator cannot be de-referenced; in other cases,
+@@ -345,7 +344,7 @@
+ to the question of whether point-type iterators and range-type
+ iterators are valid. The graphic below shows tags corresponding to
+ different types of invalidation guarantees.
+- </p><div class="figure"><a id="idp18019376"></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" type="disc"><li class="listitem"><p>
++ </p><div class="figure"><a id="idm269984190416"></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>
+ <code class="classname">basic_invalidation_guarantee</code>
+ corresponds to a basic guarantee that a point-type iterator,
+ a found pointer, or a found reference, remains valid as long
+@@ -376,7 +375,7 @@
+ our opinion, an invalidation-guarantee hierarchy would solve
+ these problems in all container types - not just associative
+ containers.
+- </p></div></div><div class="section" title="Genericity"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.genericity"></a>Genericity</h4></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.concepts.genericity"></a>Genericity</h4></div></div></div><p>
+ The design attempts to address the following problem of
+ data-structure genericity. When writing a function manipulating
+ a generic container object, what is the behavior of the object?
+@@ -391,7 +390,7 @@
+ </pre><p>
+ then one needs to address the following questions in the body
+ of <code class="function">some_op_sequence</code>:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Which types and methods does <code class="literal">Cntnr</code> support?
+ Containers based on hash tables can be queries for the
+ hash-functor type and object; this is meaningless for tree-based
+@@ -418,7 +417,7 @@
+ capabilities? What is the relationship between two different
+ data structures, if anything?
+ </p></li></ul></div><p>The remainder of this section explains these issues in
+- detail.</p><div class="section" title="Tag"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.genericity.tag"></a>Tag</h5></div></div></div><p>
++ detail.</p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.genericity.tag"></a>Tag</h5></div></div></div><p>
+ Tags are very useful for manipulating generic types. For example, if
+ <code class="literal">It</code> is an iterator class, then <code class="literal">typename
+ It::iterator_category</code> or <code class="literal">typename
+@@ -429,11 +428,11 @@
+ </p><p>
+ This library contains a container tag hierarchy corresponding to the
+ diagram below.
+- </p><div class="figure"><a id="idp18049600"></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>
++ </p><div class="figure"><a id="idm269984160256"></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>
+ Given any container <span class="type">Cntnr</span>, the tag of
+ the underlying data structure can be found via <code class="literal">typename
+ Cntnr::container_category</code>.
+- </p></div><div class="section" title="Traits"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.genericity.traits"></a>Traits</h5></div></div></div><p></p><p>Additionally, a traits mechanism can be used to query a
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="concepts.genericity.traits"></a>Traits</h5></div></div></div><p></p><p>Additionally, a traits mechanism can be used to query a
+ container type for its attributes. Given any container
+ <code class="literal">Cntnr</code>, then <code class="literal">&lt;Cntnr&gt;</code>
+ is a traits class identifying the properties of the
+@@ -453,7 +452,7 @@
+ otherwise <code class="classname">container_traits&lt;Cntnr&gt;::split_join_can_throw</code>
+ will yield a compilation error. (This is somewhat similar to a
+ compile-time version of the COM model).
+- </p></div></div></div><div class="section" title="By Container"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.design.container"></a>By Container</h3></div></div></div><div class="section" title="hash"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.hash"></a>hash</h4></div></div></div><div class="section" title="Interface"><div class="titlepage"><div><div><h5 class="title"><a id="container.hash.interface"></a>Interface</h5></div></div></div><p>
++ </p></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.design.container"></a>By Container</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.hash"></a>hash</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.hash.interface"></a>Interface</h5></div></div></div><p>
+ The collision-chaining hash-based container has the
+ following declaration.</p><pre class="programlisting">
+ template&lt;
+@@ -487,8 +486,8 @@
+ </pre><p>The parameters are identical to those of the
+ 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
+ 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
+- other parameters, and are explained below.</p></div><div class="section" title="Details"><div class="titlepage"><div><div><h5 class="title"><a id="container.hash.details"></a>Details</h5></div></div></div><div class="section" title="Hash Policies"><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" title="General"><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
+- involves. The graphic below illustrates the discussion.</p><div class="figure"><a id="idp18089744"></a><p class="title"><strong>Figure 22.14. Hash functions, ranged-hash functions, and
++ 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
++ involves. The graphic below illustrates the discussion.</p><div class="figure"><a id="idm269984120160"></a><p class="title"><strong>Figure 22.14. Hash functions, ranged-hash functions, and
+ 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
+ strings of 3 characters). A hash-table algorithm needs to map
+ elements of U "uniformly" into the range [0,..., m -
+@@ -505,7 +504,7 @@
+ Z<sub>+</sub>,</p><p>which maps a non-negative hash value, and a non-negative
+ range upper-bound into a non-negative integral in the range
+ between 0 (inclusive) and the range upper bound (exclusive),
+- 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="idp18103552"></a><p class="title"><strong>Equation 22.1. Ranged Hash Function</strong></p><div class="equation-contents"><span class="mathphrase">
++ 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="idm269984106352"></a><p class="title"><strong>Equation 22.1. Ranged Hash Function</strong></p><div class="equation-contents"><span class="mathphrase">
+ f(u , m) = g(h(u), m)
+ </span></div></div><br class="equation-break" /><p>From the above, it is obvious that given g and
+ h, f can always be composed (however the converse
+@@ -523,9 +522,9 @@
+ probe function transforming the hash value into a
+ sequence of hash values, and a range-hashing function
+ transforming the sequence of hash values into a sequence of
+- positions.</p></div><div class="section" title="Range Hashing"><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
++ 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
+ 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
+- as</p><div class="equation"><a id="idp18109440"></a><p class="title"><strong>Equation 22.2. Range-Hashing, Division Method</strong></p><div class="equation-contents"><span class="mathphrase">
++ as</p><div class="equation"><a id="idm269984100464"></a><p class="title"><strong>Equation 22.2. Range-Hashing, Division Method</strong></p><div class="equation-contents"><span class="mathphrase">
+ g(r, m) = r mod m
+ </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
+ v (typically powers of 2), and some a. Each of
+@@ -536,9 +535,9 @@
+ implement using the low
+ level % (modulo) operation (for any m), or the
+ low level &amp; (bit-mask) operation (for the case where
+- m is a power of 2), i.e.,</p><div class="equation"><a id="idp18113952"></a><p class="title"><strong>Equation 22.3. Division via Prime Modulo</strong></p><div class="equation-contents"><span class="mathphrase">
++ m is a power of 2), i.e.,</p><div class="equation"><a id="idm269984095952"></a><p class="title"><strong>Equation 22.3. Division via Prime Modulo</strong></p><div class="equation-contents"><span class="mathphrase">
+ g(r, m) = r % m
+- </span></div></div><br class="equation-break" /><p>and</p><div class="equation"><a id="idp18115776"></a><p class="title"><strong>Equation 22.4. Division via Bit Mask</strong></p><div class="equation-contents"><span class="mathphrase">
++ </span></div></div><br class="equation-break" /><p>and</p><div class="equation"><a id="idm269984094128"></a><p class="title"><strong>Equation 22.4. Division via Bit Mask</strong></p><div class="equation-contents"><span class="mathphrase">
+ g(r, m) = r &amp; m - 1, (with m =
+ 2<sup>k</sup> for some k)
+ </span></div></div><br class="equation-break" /><p>respectively.</p><p>The % (modulo) implementation has the advantage that for
+@@ -550,7 +549,7 @@
+ relying on the fast bit-wise and operation. It has the
+ disadvantage that for g(r, m) is affected only by the
+ low order bits of r. This method is hard-wired into
+- Dinkumware's implementation.</p></div><div class="section" title="Ranged Hash"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.ranged"></a>Ranged Hash</h6></div></div></div><p>In cases it is beneficial to allow the
++ Dinkumware's implementation.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.ranged"></a>Ranged Hash</h6></div></div></div><p>In cases it is beneficial to allow the
+ client to directly specify a ranged-hash hash function. It is
+ true, that the writer of the ranged-hash function cannot rely
+ on the values of m having specific numerical properties
+@@ -564,7 +563,7 @@
+ s = [ s<sub>0</sub>,..., s<sub>t - 1</sub>]
+ </p><p>be a string of t characters, each of which is from
+ domain S. Consider the following ranged-hash
+- function:</p><div class="equation"><a id="idp18125408"></a><p class="title"><strong>Equation 22.5. 
++ function:</p><div class="equation"><a id="idm269984084496"></a><p class="title"><strong>Equation 22.5. 
+ A Standard String Hash Function
+ </strong></p><div class="equation-contents"><span class="mathphrase">
+ f<sub>1</sub>(s, m) = ∑ <sub>i =
+@@ -576,7 +575,7 @@
+ of a long DNA sequence (and so S = {'A', 'C', 'G',
+ 'T'}). In this case, scanning the entire string might be
+ prohibitively expensive. A possible alternative might be to use
+- 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="idp18131552"></a><p class="title"><strong>Equation 22.6. 
++ 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="idm269984078352"></a><p class="title"><strong>Equation 22.6. 
+ Only k String DNA Hash
+ </strong></p><div class="equation-contents"><span class="mathphrase">
+ f<sub>2</sub>(s, m) = ∑ <sub>i
+@@ -590,12 +589,12 @@
+ 1</sup> s<sub>r</sub>i a<sup>r<sub>i</sub></sup> mod
+ m ,</p><p>respectively, for r<sub>0</sub>,..., r<sub>k-1</sub>
+ each in the (inclusive) range [0,...,t-1].</p><p>It should be noted that the above functions cannot be
+- decomposed as per a ranged hash composed of hash and range hashing.</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.implementation"></a>Implementation</h6></div></div></div><p>This sub-subsection describes the implementation of
++ decomposed as per a ranged hash composed of hash and range hashing.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="details.hash_policies.implementation"></a>Implementation</h6></div></div></div><p>This sub-subsection describes the implementation of
+ the above in this library. It first explains range-hashing
+ functions in collision-chaining tables, then ranged-hash
+ functions in collision-chaining tables, then probing-based
+ tables, and finally lists the relevant classes in this
+- library.</p><div class="section" title="Range-Hashing and Ranged-Hashes in Collision-Chaining Tables"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.collision-chaining"></a>
++ library.</p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.collision-chaining"></a>
+ Range-Hashing and Ranged-Hashes in Collision-Chaining Tables
+ </h6></div></div></div><p><code class="classname">cc_hash_table</code> is
+ parametrized by <code class="classname">Hash_Fn</code> and <code class="classname">Comb_Hash_Fn</code>, a
+@@ -607,12 +606,12 @@
+ the container transforms the key into a non-negative integral
+ using the hash functor (points B and C), and transforms the
+ result into a position using the combining functor (points D
+- and E).</p><div class="figure"><a id="idp18154176"></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
++ and E).</p><div class="figure"><a id="idm269984055792"></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
+ 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
+ a ranged-hash function. The graphic below shows an <code class="function">insert</code> sequence
+ diagram. The user inserts an element (point A), the container
+ transforms the key into a position using the combining functor
+- (points B and C).</p><div class="figure"><a id="idp18161232"></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" title="Probing tables"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.probe"></a>
++ (points B and C).</p><div class="figure"><a id="idm269984048736"></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>
+ Probing tables
+ </h6></div></div></div><p><code class="classname">gp_hash_table</code> is parametrized by
+ <code class="classname">Hash_Fn</code>, <code class="classname">Probe_Fn</code>,
+@@ -624,7 +623,7 @@
+ functor, <code class="classname">Probe_Fn</code> is a functor for offsets
+ from a hash value, and <code class="classname">Comb_Probe_Fn</code>
+ transforms a probe sequence into a sequence of positions within
+- the table.</p></div><div class="section" title="Pre-Defined Policies"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.predefined"></a>
++ the table.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash_policies.implementation.predefined"></a>
+ Pre-Defined Policies
+ </h6></div></div></div><p>This library contains some pre-defined classes
+ implementing range-hashing and probing functions:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p><code class="classname">direct_mask_range_hashing</code>
+@@ -635,7 +634,7 @@
+ a linear probe and a quadratic probe function,
+ respectively.</p></li></ol></div><p>
+ The graphic below shows the relationships.
+- </p><div class="figure"><a id="idp18178048"></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" title="Resize Policies"><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" title="General"><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
++ </p><div class="figure"><a id="idm269984031920"></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
+ shrink. It is necessary to specify policies to determine how
+ and when a hash table should change its size. Usually, resize
+ 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
+@@ -642,7 +641,7 @@
+ should grow (e.g., it should multiply by powers of
+ 2).</p></li><li class="listitem"><p>A trigger policy indicating when a hash
+ table should grow (e.g., a load factor is
+- exceeded).</p></li></ol></div></div><div class="section" title="Size Policies"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.size"></a>Size Policies</h6></div></div></div><p>Size policies determine how a hash table changes size. These
++ exceeded).</p></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.size"></a>Size Policies</h6></div></div></div><p>Size policies determine how a hash table changes size. These
+ policies are simple, and there are relatively few sensible
+ options. An exponential-size policy (with the initial size and
+ growth factors both powers of 2) works well with a mask-based
+@@ -650,7 +649,7 @@
+ hard-wired policy used by Dinkumware. A
+ prime-list based policy works well with a modulo-prime range
+ hashing function and is the hard-wired policy used by SGI's
+- implementation.</p></div><div class="section" title="Trigger Policies"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.trigger"></a>Trigger Policies</h6></div></div></div><p>Trigger policies determine when a hash table changes size.
++ implementation.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.trigger"></a>Trigger Policies</h6></div></div></div><p>Trigger policies determine when a hash table changes size.
+ Following is a description of two policies: load-check
+ policies, and collision-check policies.</p><p>Load-check policies are straightforward. The user specifies
+ two factors, Α<sub>min</sub> and
+@@ -668,10 +667,10 @@
+ and some load factor be denoted by Α. We would like to
+ calculate the minimal length of k, such that if there were Α
+ m elements in the hash table, a probe sequence of length k would
+- be found with probability at most 1/m.</p><div class="figure"><a id="idp18197088"></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
++ be found with probability at most 1/m.</p><div class="figure"><a id="idm269984012944"></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
+ k appears in bin i by p<sub>i</sub>, the
+ length of the probe sequence of bin i by
+- l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="idp18202592"></a><p class="title"><strong>Equation 22.7. 
++ l<sub>i</sub>, and assume uniform distribution. Then</p><div class="equation"><a id="idm269984007440"></a><p class="title"><strong>Equation 22.7. 
+ Probability of Probe Sequence of Length k
+ </strong></p><div class="equation-contents"><span class="mathphrase">
+ p<sub>1</sub> =
+@@ -685,7 +684,7 @@
+ l<sub>i</sub> are negatively-dependent
+ (<a class="xref" href="policy_data_structures.html#biblio.dubhashi98neg" title="Balls and bins: A study in negative dependence">[biblio.dubhashi98neg]</a>)
+ . Let
+- I(.) denote the indicator function. Then</p><div class="equation"><a id="idp18209360"></a><p class="title"><strong>Equation 22.8. 
++ I(.) denote the indicator function. Then</p><div class="equation"><a id="idm269984000672"></a><p class="title"><strong>Equation 22.8. 
+ Probability Probe Sequence in Some Bin
+ </strong></p><div class="equation-contents"><span class="mathphrase">
+ P( exists<sub>i</sub> l<sub>i</sub> ≥ k ) =
+@@ -697,11 +696,11 @@
+ be applied to negatively-dependent variables (<a class="xref" href="policy_data_structures.html#biblio.dubhashi98neg" title="Balls and bins: A study in negative dependence">[biblio.dubhashi98neg]</a>). Inserting the first probability
+ equation into the second one, and equating with 1/m, we
+ obtain</p><p>k ~ √ ( 2 α ln 2 m ln(m) )
+- ) .</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl"></a>Implementation</h6></div></div></div><p>This sub-subsection describes the implementation of the
++ ) .</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl"></a>Implementation</h6></div></div></div><p>This sub-subsection describes the implementation of the
+ above in this library. It first describes resize policies and
+ their decomposition into trigger and size policies, then
+ describes pre-defined classes, and finally discusses controlled
+- access the policies' internals.</p><div class="section" title="Decomposition"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl.decomposition"></a>Decomposition</h6></div></div></div><p>Each hash-based container is parametrized by a
++ access the policies' internals.</p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl.decomposition"></a>Decomposition</h6></div></div></div><p>Each hash-based container is parametrized by a
+ <code class="classname">Resize_Policy</code> parameter; the container derives
+ <code class="classname">public</code>ly from <code class="classname">Resize_Policy</code>. For
+ example:</p><pre class="programlisting">
+@@ -724,7 +723,7 @@
+ a resize is needed, and if so, what is the new size (points D
+ to G); following the resize, it notifies the policy that a
+ resize has completed (point H); finally, the element is
+- inserted, and the policy notified (point I).</p><div class="figure"><a id="idp18227776"></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
++ inserted, and the policy notified (point I).</p><div class="figure"><a id="idm269983982160"></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
+ decomposed to a size policy and a trigger policy. Consequently,
+ the library contains a single class for instantiating a resize
+ policy: <code class="classname">hash_standard_resize_policy</code>
+@@ -733,9 +732,9 @@
+ 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>)
+ to these policies.</p><p>The two graphics immediately below show sequence diagrams
+ illustrating the interaction between the standard resize policy
+- and its trigger and size policies, respectively.</p><div class="figure"><a id="idp18235600"></a><p class="title"><strong>Figure 22.20. Standard resize policy trigger sequence
+- 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="idp18239760"></a><p class="title"><strong>Figure 22.21. Standard resize policy size sequence
+- 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" title="Predefined Policies"><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
++ and its trigger and size policies, respectively.</p><div class="figure"><a id="idm269983974384"></a><p class="title"><strong>Figure 22.20. Standard resize policy trigger sequence
++ 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="idm269983970224"></a><p class="title"><strong>Figure 22.21. Standard resize policy size sequence
++ 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
+ 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>
+ implements a load check trigger policy.</p></li><li class="listitem"><p><code class="classname">cc_hash_max_collision_check_resize_trigger</code>
+ implements a collision check trigger policy.</p></li><li class="listitem"><p><code class="classname">hash_exponential_size_policy</code>
+@@ -753,7 +752,7 @@
+ instantiated by <code class="classname">hash_load_check_resize_trigger</code>,
+ or <code class="classname">cc_hash_max_collision_check_resize_trigger</code>;
+ <code class="classname">Size_Policy</code> is instantiated by <code class="classname">hash_exponential_size_policy</code>,
+- or <code class="classname">hash_prime_size_policy</code>.</p></div><div class="section" title="Controling Access to Internals"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl.internals"></a>Controling Access to Internals</h6></div></div></div><p>There are cases where (controlled) access to resize
++ or <code class="classname">hash_prime_size_policy</code>.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="resize_policies.impl.internals"></a>Controling Access to Internals</h6></div></div></div><p>There are cases where (controlled) access to resize
+ policies' internals is beneficial. E.g., it is sometimes
+ useful to query a hash-table for the table's actual size (as
+ opposed to its <code class="function">size()</code> - the number of values it
+@@ -798,11 +797,11 @@
+ </pre><p>which resizes the container. Implementations of
+ <code class="classname">Resize_Policy</code> can export public methods for resizing
+ the container externally; these methods internally call
+- <code class="classname">do_resize</code> to resize the table.</p></div></div></div><div class="section" title="Policy Interactions"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.policy_interaction"></a>Policy Interactions</h6></div></div></div><p>
++ <code class="classname">do_resize</code> to resize the table.</p></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.hash.details.policy_interaction"></a>Policy Interactions</h6></div></div></div><p>
+ </p><p>Hash-tables are unfortunately especially susceptible to
+ choice of policies. One of the more complicated aspects of this
+ is that poor combinations of good policies can form a poor
+- container. Following are some considerations.</p><div class="section" title="probe/size/trigger"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.probesizetrigger"></a>probe/size/trigger</h6></div></div></div><p>Some combinations do not work well for probing containers.
++ container. Following are some considerations.</p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.probesizetrigger"></a>probe/size/trigger</h6></div></div></div><p>Some combinations do not work well for probing containers.
+ For example, combining a quadratic probe policy with an
+ exponential size policy can yield a poor container: when an
+ element is inserted, a trigger policy might decide that there
+@@ -811,13 +810,13 @@
+ the unused entries.</p><p>Unfortunately, this library cannot detect such problems at
+ compilation (they are halting reducible). It therefore defines
+ an exception class <code class="classname">insert_error</code> to throw an
+- exception in this case.</p></div><div class="section" title="hash/trigger"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.hashtrigger"></a>hash/trigger</h6></div></div></div><p>Some trigger policies are especially susceptible to poor
++ exception in this case.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.hashtrigger"></a>hash/trigger</h6></div></div></div><p>Some trigger policies are especially susceptible to poor
+ hash functions. Suppose, as an extreme case, that the hash
+ function transforms each key to the same hash value. After some
+ inserts, a collision detecting policy will always indicate that
+ the container needs to grow.</p><p>The library, therefore, by design, limits each operation to
+ one resize. For each <code class="classname">insert</code>, for example, it queries
+- only once whether a resize is needed.</p></div><div class="section" title="equivalence functors/storing hash values/hash"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.eqstorehash"></a>equivalence functors/storing hash values/hash</h6></div></div></div><p><code class="classname">cc_hash_table</code> and
++ only once whether a resize is needed.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.eqstorehash"></a>equivalence functors/storing hash values/hash</h6></div></div></div><p><code class="classname">cc_hash_table</code> and
+ <code class="classname">gp_hash_table</code> are
+ parametrized by an equivalence functor and by a
+ <code class="classname">Store_Hash</code> parameter. If the latter parameter is
+@@ -828,7 +827,7 @@
+ collisions for other types.</p><p>If a ranged-hash function or ranged probe function is
+ directly supplied, however, then it makes no sense to store the
+ hash value with each entry. This library's container will
+- fail at compilation, by design, if this is attempted.</p></div><div class="section" title="size/load-check trigger"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.sizeloadtrigger"></a>size/load-check trigger</h6></div></div></div><p>Assume a size policy issues an increasing sequence of sizes
++ fail at compilation, by design, if this is attempted.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="policy_interaction.sizeloadtrigger"></a>size/load-check trigger</h6></div></div></div><p>Assume a size policy issues an increasing sequence of sizes
+ a, a q, a q<sup>1</sup>, a q<sup>2</sup>, ... For
+ example, an exponential size policy might issue the sequence of
+ sizes 8, 16, 32, 64, ...</p><p>If a load-check trigger policy is used, with loads
+@@ -836,7 +835,7 @@
+ respectively, then it is a good idea to have:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>α<sub>max</sub> ~ 1 / q</p></li><li class="listitem"><p>α<sub>min</sub> &lt; 1 / (2 q)</p></li></ol></div><p>This will ensure that the amortized hash cost of each
+ modifying operation is at most approximately 3.</p><p>α<sub>min</sub> ~ α<sub>max</sub> is, in
+ any case, a bad choice, and α<sub>min</sub> &gt;
+- α <sub>max</sub> is horrendous.</p></div></div></div></div><div class="section" title="tree"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.tree"></a>tree</h4></div></div></div><div class="section" title="Interface"><div class="titlepage"><div><div><h5 class="title"><a id="container.tree.interface"></a>Interface</h5></div></div></div><p>The tree-based container has the following declaration:</p><pre class="programlisting">
++ α <sub>max</sub> is horrendous.</p></div></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.tree"></a>tree</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.tree.interface"></a>Interface</h5></div></div></div><p>The tree-based container has the following declaration:</p><pre class="programlisting">
+ template&lt;
+ typename Key,
+ typename Mapped,
+@@ -861,7 +860,7 @@
+ Note that containers based on the former two contain more types
+ and methods than the latter (e.g.,
+ <code class="classname">reverse_iterator</code> and <code class="classname">rbegin</code>), and different
+- exception and invalidation guarantees.</p></div><div class="section" title="Details"><div class="titlepage"><div><div><h5 class="title"><a id="container.tree.details"></a>Details</h5></div></div></div><div class="section" title="Node Invariants"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.node"></a>Node Invariants</h6></div></div></div><p>Consider the two trees in the graphic below, labels A and B. The first
++ exception and invalidation guarantees.</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.tree.details"></a>Details</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.node"></a>Node Invariants</h6></div></div></div><p>Consider the two trees in the graphic below, labels A and B. The first
+ is a tree of floats; the second is a tree of pairs, each
+ signifying a geometric line interval. Each element in a tree is refered to as a node of the tree. Of course, each of
+ these trees can support the usual queries: the first can easily
+@@ -877,7 +876,7 @@
+ 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
+ each node the size of the sub-tree rooted at the node; the
+ second stores at each node the maximal endpoint of the
+- intervals at the sub-tree rooted at the node.</p><div class="figure"><a id="idp18317728"></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
++ intervals at the sub-tree rooted at the node.</p><div class="figure"><a id="idm269983892128"></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
+ 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
+ should be (if any).</p></li><li class="listitem"><p>Various operations can invalidate node
+ invariants. The graphic below shows how a right rotation,
+@@ -891,9 +890,9 @@
+ metadata.</p></li><li class="listitem"><p>It is not feasible to know in advance which methods trees
+ can support. Besides the usual <code class="classname">find</code> method, the
+ first tree can support a <code class="classname">find_by_order</code> method, while
+- the second can support an <code class="classname">overlaps</code> method.</p></li></ol></div><div class="figure"><a id="idp18327168"></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:
++ the second can support an <code class="classname">overlaps</code> method.</p></li></ol></div><div class="figure"><a id="idm269983882688"></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:
+ node iterators, and template-template node updater
+- parameters.</p><div class="section" title="Node Iterators"><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
++ 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
+ types, <code class="classname">const_node_iterator</code>
+ and <code class="classname">node_iterator</code>.
+ These iterators allow descending from a node to one of its
+@@ -913,7 +912,7 @@
+ node_end();
+ </pre><p>The first pairs return node iterators corresponding to the
+ root node of the tree; the latter pair returns node iterators
+- corresponding to a just-after-leaf node.</p></div><div class="section" title="Node Updator"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.node.updator"></a>Node Updator</h6></div></div></div><p>The tree-based containers are parametrized by a
++ corresponding to a just-after-leaf node.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.tree.node.updator"></a>Node Updator</h6></div></div></div><p>The tree-based containers are parametrized by a
+ <code class="classname">Node_Update</code> template-template parameter. A
+ tree-based container instantiates
+ <code class="classname">Node_Update</code> to some
+@@ -920,7 +919,7 @@
+ <code class="classname">node_update</code> class, and publicly subclasses
+ <code class="classname">node_update</code>. The graphic below shows this
+ scheme, as well as some predefined policies (which are explained
+- below).</p><div class="figure"><a id="idp18340336"></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
++ below).</p><div class="figure"><a id="idm269983869584"></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
+ <code class="classname">Node_Update</code>) must define <code class="classname">metadata_type</code> as
+ the type of metadata it requires. For order statistics,
+ e.g., <code class="classname">metadata_type</code> might be <code class="classname">size_t</code>.
+@@ -939,7 +938,7 @@
+ <code class="classname">nd_it</code>. For example, say node x in the
+ graphic below label A has an invalid invariant, but its' children,
+ y and z have valid invariants. After the invocation, all three
+- nodes should have valid invariants, as in label B.</p><div class="figure"><a id="idp18352000"></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,
++ nodes should have valid invariants, as in label B.</p><div class="figure"><a id="idm269983857920"></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,
+ it invokes this method in its <code class="classname">node_update</code> base to
+ restore the invariant. For example, the graphic below shows
+ an <code class="function">insert</code> operation (point A); the tree performs some
+@@ -947,7 +946,7 @@
+ C, and D). (It is well known that any <code class="function">insert</code>,
+ <code class="function">erase</code>, <code class="function">split</code> or <code class="function">join</code>, can restore
+ 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>)
+- .</p><div class="figure"><a id="idp18360176"></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
++ .</p><div class="figure"><a id="idm269983849744"></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
+ 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
+ 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
+ tree?</p></li><li class="listitem"><p>How can the following cyclic dependency be resolved?
+@@ -989,9 +988,9 @@
+ node's metadata (this is halting reducible). In the graphic
+ below, assume the shaded node is inserted. The tree would have
+ to traverse the useless path shown to the root, applying
+- redundant updates all the way.</p></li></ol></div><div class="figure"><a id="idp18382432"></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>
++ redundant updates all the way.</p></li></ol></div><div class="figure"><a id="idm269983827488"></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>
+ solves both these problems. The tree detects that node
+- invariants are irrelevant, and defines all accordingly.</p></div></div><div class="section" title="Split and Join"><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.
++ 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.
+ It is possible to split a tree so that it passes
+ all nodes with keys larger than a given key to a different
+ tree. These methods have the following advantages over the
+@@ -1001,7 +1000,7 @@
+ trees are split and joined at linear complexity. The
+ alternatives have super-linear complexity.</p></li><li class="listitem"><p>Aside from orders of growth, these operations perform
+ few allocations and de-allocations. For red-black trees, allocations are not performed,
+- and the methods are exception-free. </p></li></ol></div></div></div></div><div class="section" title="Trie"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.trie"></a>Trie</h4></div></div></div><div class="section" title="Interface"><div class="titlepage"><div><div><h5 class="title"><a id="container.trie.interface"></a>Interface</h5></div></div></div><p>The trie-based container has the following declaration:</p><pre class="programlisting">
++ and the methods are exception-free. </p></li></ol></div></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.trie"></a>Trie</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.trie.interface"></a>Interface</h5></div></div></div><p>The trie-based container has the following declaration:</p><pre class="programlisting">
+ template&lt;typename Key,
+ typename Mapped,
+ typename Cmp_Fn = std::less&lt;Key&gt;,
+@@ -1035,7 +1034,7 @@
+ complexity and size).</p></li><li class="listitem"><p>It works well for common-prefix keys.</p></li><li class="listitem"><p>It can support efficiently queries such as which
+ keys match a certain prefix. This is sometimes useful in file
+ systems and routers, and for "type-ahead" aka predictive text matching
+- on mobile devices.</p></li></ol></div></div><div class="section" title="Details"><div class="titlepage"><div><div><h5 class="title"><a id="container.trie.details"></a>Details</h5></div></div></div><div class="section" title="Element Access Traits"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.etraits"></a>Element Access Traits</h6></div></div></div><p>A trie inherently views its keys as sequences of elements.
++ on mobile devices.</p></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.trie.details"></a>Details</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.etraits"></a>Element Access Traits</h6></div></div></div><p>A trie inherently views its keys as sequences of elements.
+ For example, a trie can view a string as a sequence of
+ characters. A trie needs to map each of n elements to a
+ number in {0, n - 1}. For example, a trie can map a
+@@ -1072,7 +1071,7 @@
+ sub-tree with leafs "a" and "as". The maximal common prefix is
+ "a". The internal node contains, consequently, to const
+ iterators, one pointing to <code class="varname">'a'</code>, and the other to
+- <code class="varname">'s'</code>.</p><div class="figure"><a id="idp18427056"></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" title="Node Invariants"><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
++ <code class="varname">'s'</code>.</p><div class="figure"><a id="idm269983782736"></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
+ tree-based containers. There are two minor
+ differences, though, which, unfortunately, thwart sharing them
+ 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
+@@ -1081,15 +1080,15 @@
+ parametrized by <code class="classname">Cmp_Fn</code>.</p></li><li class="listitem"><p>Tree-based containers store values in all nodes, while
+ trie-based containers (at least in this implementation) store
+ values in leafs.</p></li></ol></div><p>The graphic below shows the scheme, as well as some predefined
+- policies (which are explained below).</p><div class="figure"><a id="idp18437488"></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
++ policies (which are explained below).</p><div class="figure"><a id="idm269983772240"></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
+ updating policies:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ <code class="classname">trie_order_statistics_node_update</code>
+ supports order statistics.
+ </p></li><li class="listitem"><p><code class="classname">trie_prefix_search_node_update</code>
+ supports searching for ranges that match a given prefix.</p></li><li class="listitem"><p><code class="classname">null_node_update</code>
+- is the null node updater.</p></li></ol></div></div><div class="section" title="Split and Join"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.split"></a>Split and Join</h6></div></div></div><p>Trie-based containers support split and join methods; the
++ is the null node updater.</p></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.trie.details.split"></a>Split and Join</h6></div></div></div><p>Trie-based containers support split and join methods; the
+ rationale is equal to that of tree-based containers supporting
+- these methods.</p></div></div></div><div class="section" title="List"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.list"></a>List</h4></div></div></div><div class="section" title="Interface"><div class="titlepage"><div><div><h5 class="title"><a id="container.list.interface"></a>Interface</h5></div></div></div><p>The list-based container has the following declaration:</p><pre class="programlisting">
++ these methods.</p></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.list"></a>List</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.list.interface"></a>Interface</h5></div></div></div><p>The list-based container has the following declaration:</p><pre class="programlisting">
+ template&lt;typename Key,
+ typename Mapped,
+ typename Eq_Fn = std::equal_to&lt;Key&gt;,
+@@ -1124,12 +1123,12 @@
+ useful manner? Remarkably, many on-line competitive
+ algorithms exist for reordering lists to reflect access
+ prediction. (See <a class="xref" href="policy_data_structures.html#biblio.motwani95random" title="Randomized Algorithms">[biblio.motwani95random]</a> and <a class="xref" href="policy_data_structures.html#biblio.andrew04mtf" title="MTF, Bit, and COMB: A Guide to Deterministic and Randomized Algorithms for the List Update Problem">[biblio.andrew04mtf]</a>).
+- </p></div><div class="section" title="Details"><div class="titlepage"><div><div><h5 class="title"><a id="container.list.details"></a>Details</h5></div></div></div><p>
+- </p><div class="section" title="Underlying Data Structure"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.ds"></a>Underlying Data Structure</h6></div></div></div><p>The graphic below shows a
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.list.details"></a>Details</h5></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.ds"></a>Underlying Data Structure</h6></div></div></div><p>The graphic below shows a
+ simple list of integer keys. If we search for the integer 6, we
+ are paying an overhead: the link with key 6 is only the fifth
+ link; if it were the first link, it could be accessed
+- faster.</p><div class="figure"><a id="idp18468000"></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
++ faster.</p><div class="figure"><a id="idm269983741664"></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
+ accessed. They try to determine, by the access history, which
+ keys to move to the front of the list. Some of these algorithms
+ require adding some metadata alongside each entry.</p><p>For example, in the graphic below label A shows the counter
+@@ -1139,7 +1138,7 @@
+ predetermined value, say 10, as shown in label C, the count is set
+ to 0 and the node is moved to the front of the list, as in label
+ D.
+- </p><div class="figure"><a id="idp18473584"></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" title="Policies"><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
++ </p><div class="figure"><a id="idm269983736080"></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
+ implementing any algorithm moving nodes to the front of the
+ list (policies implementing algorithms interchanging nodes are
+ unsupported).</p><p>Associative containers based on lists are parametrized by a
+@@ -1174,7 +1173,7 @@
+ the list. The latter type is very useful in this library,
+ since there is no need to associate metadata with each element.
+ (See <a class="xref" href="policy_data_structures.html#biblio.andrew04mtf" title="MTF, Bit, and COMB: A Guide to Deterministic and Randomized Algorithms for the List Update Problem">[biblio.andrew04mtf]</a>
+- </p></div><div class="section" title="Use in Multimaps"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.mapped"></a>Use in Multimaps</h6></div></div></div><p>In this library, there are no equivalents for the standard's
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.list.details.mapped"></a>Use in Multimaps</h6></div></div></div><p>In this library, there are no equivalents for the standard's
+ multimaps and multisets; instead one uses an associative
+ container mapping primary keys to secondary keys.</p><p>List-based containers are especially useful as associative
+ containers for secondary keys. In fact, they are implemented
+@@ -1203,7 +1202,7 @@
+ object (a hash-based container object holds a
+ hash functor). List-based containers, conversely, only have
+ class-wide policy objects.
+- </p></li></ol></div></div></div></div><div class="section" title="Priority Queue"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.priority_queue"></a>Priority Queue</h4></div></div></div><div class="section" title="Interface"><div class="titlepage"><div><div><h5 class="title"><a id="container.priority_queue.interface"></a>Interface</h5></div></div></div><p>The priority queue container has the following
++ </p></li></ol></div></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.design.container.priority_queue"></a>Priority Queue</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.priority_queue.interface"></a>Interface</h5></div></div></div><p>The priority queue container has the following
+ declaration:
+ </p><pre class="programlisting">
+ template&lt;typename Value_Type,
+@@ -1239,7 +1238,7 @@
+ insufficient for manipulating priority-queues. </p><p>Different settings require different priority-queue
+ implementations which are described in later; see traits
+ discusses ways to differentiate between the different traits of
+- different implementations.</p></div><div class="section" title="Details"><div class="titlepage"><div><div><h5 class="title"><a id="container.priority_queue.details"></a>Details</h5></div></div></div><div class="section" title="Iterators"><div class="titlepage"><div><div><h6 class="title"><a id="container.priority_queue.details.iterators"></a>Iterators</h6></div></div></div><p>There are many different underlying-data structures for
++ different implementations.</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="container.priority_queue.details"></a>Details</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.priority_queue.details.iterators"></a>Iterators</h6></div></div></div><p>There are many different underlying-data structures for
+ implementing priority queues. Unfortunately, most such
+ structures are oriented towards making <code class="function">push</code> and
+ <code class="function">top</code> efficient, and consequently don't allow efficient
+@@ -1306,12 +1305,12 @@
+ this data and a priority queue's iterator. Using the embedded
+ method would need to use two associative containers. Similar
+ problems might arise in cases where a value can reside
+- simultaneously in many priority queues.</p></div><div class="section" title="Underlying Data Structure"><div class="titlepage"><div><div><h6 class="title"><a id="container.priority_queue.details.d"></a>Underlying Data Structure</h6></div></div></div><p>There are three main implementations of priority queues: the
++ simultaneously in many priority queues.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.priority_queue.details.d"></a>Underlying Data Structure</h6></div></div></div><p>There are three main implementations of priority queues: the
+ first employs a binary heap, typically one which uses a
+ sequence; the second uses a tree (or forest of trees), which is
+ typically less structured than an associative container's tree;
+ the third simply uses an associative container. These are
+- shown in the graphic below, in labels A1 and A2, label B, and label C.</p><div class="figure"><a id="idp18537424"></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
++ shown in the graphic below, in labels A1 and A2, label B, and label C.</p><div class="figure"><a id="idm269983672320"></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
+ from a priority queue must incur a logarithmic expense (in the
+ amortized sense). Any priority queue implementation that would
+ avoid this, would violate known bounds on comparison-based
+@@ -1381,7 +1380,7 @@
+ at all; the priority queue itself is an associative container.
+ Most associative containers are too structured to compete with
+ priority queues in terms of <code class="function">push</code> and <code class="function">pop</code>
+- performance.</p></div><div class="section" title="Traits"><div class="titlepage"><div><div><h6 class="title"><a id="container.priority_queue.details.traits"></a>Traits</h6></div></div></div><p>It would be nice if all priority queues could
++ performance.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="container.priority_queue.details.traits"></a>Traits</h6></div></div></div><p>It would be nice if all priority queues could
+ share exactly the same behavior regardless of implementation. Sadly, this is not possible. Just one for instance is in join operations: joining
+ two binary heaps might throw an exception (not corrupt
+ any of the heaps on which it operates), but joining two pairing
+@@ -1391,7 +1390,7 @@
+ container <code class="classname">Cntnr</code>, the tag of the underlying
+ data structure can be found via <code class="classname">typename
+ Cntnr::container_category</code>; this is one of the possible tags shown in the graphic below.
+- </p><div class="figure"><a id="idp18572464"></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
++ </p><div class="figure"><a id="idm269983637280"></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
+ container type for its attributes. Given any container
+ <code class="classname">Cntnr</code>, then </p><pre class="programlisting">__gnu_pbds::container_traits&lt;Cntnr&gt;</pre><p>
+ is a traits class identifying the properties of the
+@@ -1427,4 +1426,4 @@
+ <code class="function">erase</code> operations is non-negligible (say
+ super-logarithmic in the total sequence of operations) - binary
+ heaps will perform badly.
+- </p></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures_using.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_based_data_structures_test.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Testing</td></tr></table></div></body></html>
++ </p></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures_using.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_based_data_structures_test.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Testing</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/using.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/using.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/using.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Introduction
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 3. Using"><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" title="Command Options"><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>
++</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>
+ The set of features available in the GNU C++ library is shaped
+ by
+ several <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Invoking-GCC.html" target="_top">GCC
+@@ -11,5 +10,5 @@
+ enumerated and detailed in the table below.
+ </p><p>
+ 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.
+- </p><div class="table"><a id="idp13018432"></a><p class="title"><strong>Table 3.1. C++ Command Options</strong></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std=c++98</code></td><td align="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td align="left"><code class="literal">-std=gnu++98</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++11</code></td><td align="left">Use the 2011 ISO C++ standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++11</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-fexceptions</code></td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left"><code class="literal">-frtti</code></td><td align="left">As above, but RTTI-free dialect.</td></tr><tr><td align="left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td align="left">For ISO C++11 &lt;thread&gt;, &lt;future&gt;,
+- &lt;mutex&gt;, or &lt;condition_variable&gt;.</td></tr><tr><td align="left"><code class="literal">-fopenmp</code></td><td align="left">For <a class="link" href="parallel_mode.html" title="Chapter 18. Parallel Mode">parallel</a> mode.</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="intro.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Make </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Headers</td></tr></table></div></body></html>
++ </p><div class="table"><a id="idm269989171392"></a><p class="title"><strong>Table 3.1. C++ Command Options</strong></p><div class="table-contents"><table summary="C++ Command Options" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Option Flags</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left"><code class="literal">-std=c++98</code></td><td align="left">Use the 1998 ISO C++ standard plus amendments.</td></tr><tr><td align="left"><code class="literal">-std=gnu++98</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-std=c++11</code></td><td align="left">Use the 2011 ISO C++ standard.</td></tr><tr><td align="left"><code class="literal">-std=gnu++11</code></td><td align="left">As directly above, with GNU extensions.</td></tr><tr><td align="left"><code class="literal">-fexceptions</code></td><td align="left">See <a class="link" href="using_exceptions.html#intro.using.exception.no" title="Doing without">exception-free dialect</a></td></tr><tr><td align="left"><code class="literal">-frtti</code></td><td align="left">As above, but RTTI-free dialect.</td></tr><tr><td align="left"><code class="literal">-pthread</code> or <code class="literal">-pthreads</code></td><td align="left">For ISO C++11 &lt;thread&gt;, &lt;future&gt;,
++ &lt;mutex&gt;, or &lt;condition_variable&gt;.</td></tr><tr><td align="left"><code class="literal">-fopenmp</code></td><td align="left">For <a class="link" href="parallel_mode.html" title="Chapter 18. Parallel Mode">parallel</a> mode.</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="make.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="intro.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_headers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Make </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Headers</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/ext_containers.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/ext_containers.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/ext_containers.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch23s02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch23s02.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. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch23s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 23. HP/SGI Extensions"><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="bk01pt03ch23s02.html">Deprecated</a></span></dt></dl></div><div class="section" title="Backwards Compatibility"><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
++</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch23s02.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="bk01pt03ch23s02.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
+ been made with containers. Those dealing with older SGI-style
+ allocators are dealt with elsewhere. The remaining ones all deal
+ with bits:
+@@ -39,4 +38,4 @@
+ </p><pre class="programlisting">
+ size_t _Find_first() const;
+ size_t _Find_next (size_t prev) const;</pre><p>The same caveat given for the _Unchecked_* functions applies here also.
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures_ack.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch23s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Acknowledgments </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Deprecated</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures_ack.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch23s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Acknowledgments </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Deprecated</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/ext_io.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/ext_io.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/ext_io.html (.../branches/gcc-4_7-branch)
+@@ -1,18 +1,17 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 28. Input and Output"><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>
++</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>
+ Extensions allowing <code class="code">filebuf</code>s to be constructed from
+ "C" types like FILE*s and file descriptors.
+- </p><div class="section" title="Derived filebufs"><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
++ </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
+ <code class="code">std::filebuf</code>s from C stdio types such as
+ <code class="code">FILE*</code>s and POSIX file descriptors.
+ Today the recommended way to use stdio types with libstdc++
+ IOStreams is via the <code class="code">stdio_filebuf</code> class (see below),
+ but earlier releases provided slightly different mechanisms.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>3.0.x <code class="code">filebuf</code>s have another ctor with this signature:
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>3.0.x <code class="code">filebuf</code>s have another ctor with this signature:
+ <code class="code">basic_filebuf(__c_file_type*, ios_base::openmode, int_type);
+ </code>
+ This comes in very handy in a number of places, such as
+@@ -19,7 +18,7 @@
+ attaching Unix sockets, pipes, and anything else which uses file
+ descriptors, into the IOStream buffering classes. The three
+ arguments are as follows:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p><code class="code">__c_file_type* F </code>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p><code class="code">__c_file_type* F </code>
+ // the __c_file_type typedef usually boils down to stdio's FILE
+ </p></li><li class="listitem"><p><code class="code">ios_base::openmode M </code>
+ // same as all the other uses of openmode
+@@ -42,4 +41,4 @@
+ <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00074.html" target="_top"><code class="code">__gnu_cxx::stdio_filebuf</code></a>.
+ This class can be constructed from a C <code class="code">FILE*</code> or a file
+ descriptor, and provides the <code class="code">fd()</code> function.
+- </p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 27. Iterators </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 29. Demangling</td></tr></table></div></body></html>
++ </p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_iterators.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_demangling.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 27. Iterators </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 29. Demangling</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/using_macros.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/using_macros.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/using_macros.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Macros"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.macros"></a>Macros</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ All library macros begin with <code class="code">_GLIBCXX_</code>.
+ </p><p>
+ Furthermore, all pre-processor macros, switches, and
+@@ -18,7 +17,7 @@
+ those macros listed below are offered for consideration by the
+ general public.
+ </p><p>Below is the macro which users may check for library version
+- information. </p><div class="variablelist"><dl><dt><span class="term"><code class="code">__GLIBCXX__</code></span></dt><dd><p>The current version of
++ information. </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">__GLIBCXX__</code></span></dt><dd><p>The current version of
+ libstdc++ in compressed ISO date format, form of an unsigned
+ long. For details on the value of this particular macro for a
+ particular release, please consult this <a class="link" href="abi.html" title="ABI Policy and Guidelines">
+@@ -40,7 +39,7 @@
+ Experimenting with different values with the expectation of
+ consistent linkage requires changing the config headers before
+ building/installing the library.
+- </p><div class="variablelist"><dl><dt><span class="term"><code class="code">_GLIBCXX_USE_DEPRECATED</code></span></dt><dd><p>
++ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">_GLIBCXX_USE_DEPRECATED</code></span></dt><dd><p>
+ Defined by default. Not configurable. ABI-changing. Turning this off
+ removes older ARM-style iostreams code, and other anachronisms
+ from the API. This macro is dependent on the version of the
+@@ -74,4 +73,4 @@
+ </p></dd><dt><span class="term"><code class="code">_GLIBCXX_PROFILE</code></span></dt><dd><p>Undefined by default. When defined, compiles user code
+ using the <a class="link" href="profile_mode.html" title="Chapter 19. Profile Mode">profile
+ mode</a>.
+- </p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_namespaces.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Headers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Namespaces</td></tr></table></div></body></html>
++ </p></dd></dl></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_headers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_namespaces.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Headers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Namespaces</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/termination.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/termination.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/termination.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Support
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="diagnostics.html">Next</a></td></tr></table><hr /></div><div class="section" title="Termination"><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" title="Termination Handlers"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.handlers"></a>Termination Handlers</h3></div></div></div><p>
++</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>
+ Not many changes here to <code class="filename">cstdlib</code>. You should note that the
+ <code class="function">abort()</code> function does not call the
+ destructors of automatic nor static objects, so if you're
+@@ -45,7 +44,7 @@
+ functions, and the compiler/library might already be using some of
+ those slots. If you think you may run out, we recommend using
+ the <code class="function">xatexit</code>/<code class="function">xexit</code> combination from <code class="literal">libiberty</code>, which has no such limit.
+- </p></div><div class="section" title="Verbose Terminate Handler"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.verbose"></a>Verbose Terminate Handler</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="support.termination.verbose"></a>Verbose Terminate Handler</h3></div></div></div><p>
+ If you are having difficulty with uncaught exceptions and want a
+ little bit of help debugging the causes of the core dumps, you can
+ make use of a GNU extension, the verbose terminate handler.
+@@ -121,4 +120,4 @@
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="dynamic_memory.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="support.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="diagnostics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Dynamic Memory </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 5. 
+ Diagnostics
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/concurrency.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/concurrency.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/concurrency.html (.../branches/gcc-4_7-branch)
+@@ -1,16 +1,15 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; , &#10; mutex&#10; , &#10; thread&#10; , &#10; future&#10; , &#10; condition_variable&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; , &#10; mutex&#10; , &#10; thread&#10; , &#10; future&#10; , &#10; condition_variable&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
+ Concurrency
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="atomics.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="extensions.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 15.  Concurrency"><div class="titlepage"><div><div><h2 class="title"><a id="std.concurrency"></a>Chapter 15. 
++ </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. 
+ Concurrency
+- <a id="idp16368576" class="indexterm"></a>
+-</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>
++ <a id="idm269985837952" class="indexterm"></a>
++</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>
+ Facilities for concurrent operation, and control thereof.
+-</p><div class="section" title="API Reference"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.concurrency.api"></a>API Reference</h2></div></div></div><p>
++</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>
+ All items are declared in one of four standard header files.
+ </p><p>
+ In header <code class="filename">mutex</code>, class
+@@ -39,4 +38,4 @@
+  </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Part III. 
+ Extensions
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/ext_utilities.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/ext_utilities.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/ext_utilities.html (.../branches/gcc-4_7-branch)
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch23s02.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="bk01pt03ch23s02.html">Prev</a> </td><th width="60%" align="center">Part III. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch23s02.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="bk01pt03ch23s02.html">Prev</a> </td><th width="60%" align="center">Part III. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 24. Utilities"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.util"></a>Chapter 24. Utilities</h2></div></div></div><p>
++</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>
+ The <code class="filename">&lt;functional&gt;</code> header
+ contains many additional functors
+ and helper functions, extending section 20.3. They are
+ implemented in the file stl_function.h:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">identity_element</code> for addition and multiplication.
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="code">identity_element</code> for addition and multiplication.
+ </p></li><li class="listitem"><p>The functor <code class="code">identity</code>, whose <code class="code">operator()</code>
+ returns the argument unchanged.
+ </p></li><li class="listitem"><p>Composition functors <code class="code">unary_function</code> and
+@@ -39,4 +38,4 @@
+ </p><p>
+ The specialized algorithms of section 20.4.4 are extended with
+ <code class="code">uninitialized_copy_n</code>.
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch23s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Deprecated </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 25. Algorithms</td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch23s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_algorithms.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Deprecated </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 25. Algorithms</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/policy_data_structures.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch21s02.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="bk01pt03ch21s02.html">Prev</a> </td><th width="60%" align="center">Part III. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch21s02.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="bk01pt03ch21s02.html">Prev</a> </td><th width="60%" align="center">Part III. 
+ Extensions
+
+-</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" title="Chapter 22. Policy-Based Data Structures"><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">
++</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">
+ Configuring via Template Parameters
+ </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits">
+ Querying Container Attributes
+@@ -65,7 +64,7 @@
+ Text <code class="function">modify</code> Up
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_modify_down">
+ Text <code class="function">modify</code> Down
+- </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.performance.observations">Observations</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.priority_queue">Priority_Queue</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_ack.html">Acknowledgments</a></span></dt><dt><span class="bibliography"><a href="policy_data_structures.html#pbds.biblio">Bibliography</a></span></dt></dl></div><div class="section" title="Intro"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.intro"></a>Intro</h2></div></div></div><p>
++ </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.performance.observations">Observations</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.priority_queue">Priority_Queue</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_ack.html">Acknowledgments</a></span></dt><dt><span class="bibliography"><a href="policy_data_structures.html#pbds.biblio">Bibliography</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.intro"></a>Intro</h2></div></div></div><p>
+ This is a library of policy-based elementary data structures:
+ associative containers and priority queues. It is designed for
+ high-performance, flexibility, semantic safety, and conformance to
+@@ -73,7 +72,7 @@
+ <code class="literal">std::tr1</code> (except for some points where it differs
+ by design).
+ </p><p>
+- </p><div class="section" title="Performance Issues"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.intro.issues"></a>Performance Issues</h3></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.intro.issues"></a>Performance Issues</h3></div></div></div><p>
+ </p><p>
+ An attempt is made to categorize the wide variety of possible
+ container designs in terms of performance-impacting factors. These
+@@ -93,7 +92,7 @@
+ </p><p>
+ Specific issues found while unraveling performance factors in the
+ design of associative containers and priority queues follow.
+- </p><div class="section" title="Associative"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.issues.associative"></a>Associative</h4></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.issues.associative"></a>Associative</h4></div></div></div><p>
+ Associative containers depend on their composite policies to a very
+ large extent. Implicitly hard-wiring policies can hamper their
+ performance and limit their functionality. An efficient hash-based
+@@ -134,7 +133,7 @@
+ is a red-black tree, then splitting a reference to the container is
+ exception-free; if it is an ordered-vector tree, exceptions can be
+ thrown.
+- </p></div><div class="section" title="Priority Que"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.issues.priority_queue"></a>Priority Que</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.issues.priority_queue"></a>Priority Que</h4></div></div></div><p>
+ Priority queues are useful when one needs to efficiently access a
+ minimum (or maximum) value as the set of values changes.
+ </p><p>
+@@ -176,7 +175,7 @@
+ expense of more difference in the the kinds of operations that the
+ underlying data structure can support. These differences pose a
+ challenge when creating a uniform interface for priority queues.
+- </p></div></div><div class="section" title="Goals"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.intro.motivation"></a>Goals</h3></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.intro.motivation"></a>Goals</h3></div></div></div><p>
+ Many fine associative-container libraries were already written,
+ most notably, the C++ standard's associative containers. Why
+ then write another library? This section shows some possible
+@@ -187,8 +186,8 @@
+ only then adding hash-based containers, which are fundamentally
+ different), did not standardize priority queues as containers,
+ and (in our opinion) overloads the iterator concept.
+- </p><div class="section" title="Associative"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.motivation.associative"></a>Associative</h4></div></div></div><p>
+- </p><div class="section" title="Policy Choices"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.policy"></a>Policy Choices</h5></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.motivation.associative"></a>Associative</h4></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.policy"></a>Policy Choices</h5></div></div></div><p>
+ Associative containers require a relatively large number of
+ policies to function efficiently in various settings. In some
+ cases this is needed for making their common operations more
+@@ -249,7 +248,7 @@
+ these invariants, one must supply some policy that is aware
+ of these changes. Without this, it would be better to use a
+ linked list (in itself very efficient for these purposes).
+- </p></li></ol></div><div class="figure"><a id="idp17575248"></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" title="Underlying Data Structures"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
++ </p></li></ol></div><div class="figure"><a id="idm269984634416"></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>
+ The standard C++ library contains associative containers based on
+ red-black trees and collision-chaining hash tables. These are
+ very useful, but they are not ideal for all types of
+@@ -257,7 +256,7 @@
+ </p><p>
+ The figure below shows the different underlying data structures
+ currently supported in this library.
+- </p><div class="figure"><a id="idp17581968"></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>
++ </p><div class="figure"><a id="idm269984627696"></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>
+ A shows a collision-chaining hash-table, B shows a probing
+ hash-table, C shows a red-black tree, D shows a splay tree, E shows
+ a tree based on an ordered vector(implicit in the order of the
+@@ -334,7 +333,7 @@
+ library iterators, for example) can ease generic manipulation of
+ associative containers based on different underlying data
+ structures.
+- </p></div><div class="section" title="Iterators"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.iterators"></a>Iterators</h5></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.iterators"></a>Iterators</h5></div></div></div><p>
+ Iterators are centric to the design of the standard library
+ containers, because of the container/algorithm/iterator
+ decomposition that allows an algorithm to operate on a range
+@@ -359,7 +358,7 @@
+ "ds_gen.html#find_range"&gt;Design::Associative
+ Containers::Data-Structure Genericity::Point-Type and Range-Type
+ Methods</span></em>.
+- </p><div class="section" title="Using Point Iterators for Range Operations"><div class="titlepage"><div><div><h6 class="title"><a id="associative.iterators.using"></a>Using Point Iterators for Range Operations</h6></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="associative.iterators.using"></a>Using Point Iterators for Range Operations</h6></div></div></div><p>
+ Suppose <code class="classname">cntnr</code> is some associative
+ container, and say <code class="varname">c</code> is an object of
+ type <code class="classname">cntnr</code>. Then what will be the outcome
+@@ -376,7 +375,7 @@
+ no guarantee that the elements traversed will coincide with the
+ <span class="emphasis"><em>logical</em></span> elements between 1 and 5, as in
+ label B.
+- </p><div class="figure"><a id="idp17613664"></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>
++ </p><div class="figure"><a id="idm269984596064"></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>
+ In our opinion, this problem is not caused just because
+ red-black trees are order preserving while
+ collision-chaining hash tables are (generally) not - it
+@@ -397,7 +396,7 @@
+ Consequently, applying an algorithm to a sequence obtained from most
+ containers may or may not make sense, but applying it to a
+ sub-sequence of a self-organizing container does not.
+- </p></div><div class="section" title="Cost to Point Iterators to Enable Range Operations"><div class="titlepage"><div><div><h6 class="title"><a id="associative.iterators.cost"></a>Cost to Point Iterators to Enable Range Operations</h6></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="associative.iterators.cost"></a>Cost to Point Iterators to Enable Range Operations</h6></div></div></div><p>
+ Suppose <code class="varname">c</code> is some collision-chaining
+ hash-based container object, and one calls
+ </p><pre class="programlisting">c.find(3)</pre><p>
+@@ -427,11 +426,11 @@
+ list, as in the graphic below, label B. Here the iterators are as
+ light as can be, but the hash-table's operations are more
+ complicated.
+- </p><div class="figure"><a id="idp17628576"></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>
++ </p><div class="figure"><a id="idm269984581152"></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>
+ It should be noted that containers based on collision-chaining
+ hash-tables are not the only ones with this type of behavior;
+ many other self-organizing data structures display it as well.
+- </p></div><div class="section" title="Invalidation Guarantees"><div class="titlepage"><div><div><h6 class="title"><a id="associative.iterators.invalidation"></a>Invalidation Guarantees</h6></div></div></div><p>Consider the following snippet:</p><pre class="programlisting">
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="associative.iterators.invalidation"></a>Invalidation Guarantees</h6></div></div></div><p>Consider the following snippet:</p><pre class="programlisting">
+ it = c.find(3);
+ c.erase(5);
+ </pre><p>
+@@ -443,7 +442,7 @@
+ container. The graphic below shows three cases: A1 and A2 show
+ a red-black tree; B1 and B2 show a probing hash-table; C1 and C2
+ show a collision-chaining hash table.
+- </p><div class="figure"><a id="idp17637776"></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>
++ </p><div class="figure"><a id="idm269984571888"></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>
+ Erasing 5 from A1 yields A2. Clearly, an iterator to 3 can
+ be de-referenced and incremented. The sequence of iterators
+ changed, but in a way that is well-defined by the interface.
+@@ -465,7 +464,7 @@
+ to express whether <code class="varname">it</code> is valid or not. This
+ is true also for <code class="function">insert</code>. Again, the
+ iterator concept seems overloaded.
+- </p></div></div><div class="section" title="Functional"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.functions"></a>Functional</h5></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.associative.functions"></a>Functional</h5></div></div></div><p>
+ </p><p>
+ The design of the functional overlay to the underlying data
+ structures differs slightly from some of the conventions used in
+@@ -476,7 +475,7 @@
+ rubric, the standard associative containers lack some useful
+ methods, and provide other methods which would be better
+ removed.
+- </p><div class="section" title="erase"><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.erase"></a><code class="function">erase</code></h6></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
++ </p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.erase"></a><code class="function">erase</code></h6></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ Order-preserving standard associative containers provide the
+ method
+ </p><pre class="programlisting">
+@@ -548,7 +547,7 @@
+ is almost certain to do something
+ different than erasing all elements whose keys are between 2
+ and 5, and is likely to produce other undefined behavior.
+- </p></li></ol></div></div><div class="section" title="split and join"><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.split"></a>
++ </p></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.split"></a>
+ <code class="function">split</code> and <code class="function">join</code>
+ </h6></div></div></div><p>
+ It is well-known that tree-based and trie-based container
+@@ -559,7 +558,7 @@
+ choices for tree-based container methods, especially, since as
+ noted just before, they are efficient replacements for erasing
+ sub-sequences.
+- </p></div><div class="section" title="insert"><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.insert"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.insert"></a>
+ <code class="function">insert</code>
+ </h6></div></div></div><p>
+ The standard associative containers provide methods of the form
+@@ -575,7 +574,7 @@
+ similar to constructors taking a range given by a pair of
+ iterators; the constructors, however, are transactional, whereas
+ the insert methods are not; this is possibly confusing.
+- </p></div><div class="section" title="operator== and operator&lt;="><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.compare"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="motivation.associative.functions.compare"></a>
+ <code class="function">operator==</code> and <code class="function">operator&lt;=</code>
+ </h6></div></div></div><p>
+ Associative containers are parametrized by policies allowing to
+@@ -595,7 +594,7 @@
+ equivalence; also, are two containers considered equivalent if
+ they store the same values in different order? this is an
+ arbitrary decision.
+- </p></div></div></div><div class="section" title="Priority Queues"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.motivation.priority_queue"></a>Priority Queues</h4></div></div></div><div class="section" title="Policy Choices"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.priority_queue.policy"></a>Policy Choices</h5></div></div></div><p>
++ </p></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.intro.motivation.priority_queue"></a>Priority Queues</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.priority_queue.policy"></a>Policy Choices</h5></div></div></div><p>
+ Priority queues are containers that allow efficiently inserting
+ values and accessing the maximal value (in the sense of the
+ container's comparison functor). Their interface
+@@ -672,7 +671,7 @@
+ comparing the iterator returned by <code class="function">find</code> to the
+ iterator returned by <code class="function">end</code>, and not by comparing a
+ pointer returned by <code class="function">find</code> to <span class="type">NULL</span>.
+- </p></li></ol></div></li></ol></div></div><div class="section" title="Underlying Data Structures"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.priority_queue.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
++ </p></li></ol></div></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.priority_queue.underlying"></a>Underlying Data Structures</h5></div></div></div><p>
+ There are three main implementations of priority queues: the
+ first employs a binary heap, typically one which uses a
+ sequence; the second uses a tree (or forest of trees), which is
+@@ -679,7 +678,7 @@
+ typically less structured than an associative container's tree;
+ the third simply uses an associative container. These are
+ shown in the figure below with labels A1 and A2, B, and C.
+- </p><div class="figure"><a id="idp17705360"></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>
++ </p><div class="figure"><a id="idm269984504224"></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>
+ No single implementation can completely replace any of the
+ others. Some have better <code class="function">push</code>
+ and <code class="function">pop</code> amortized performance, some have
+@@ -694,7 +693,7 @@
+ important for priority queues, since the invalidation guarantees
+ of one of the most useful data structures - binary heaps - is
+ markedly different than those of most of the others.
+- </p></div><div class="section" title="Binary Heaps"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.priority_queue.binary_heap"></a>Binary Heaps</h5></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="motivation.priority_queue.binary_heap"></a>Binary Heaps</h5></div></div></div><p>
+ Binary heaps are one of the most useful underlying
+ data structures for priority queues. They are very efficient in
+ terms of memory (since they don't require per-value structure
+@@ -771,7 +770,7 @@
+ <code class="classname">std::priority_queue</code>, however, this will generally
+ change the order of growth of the entire sequence of
+ operations.
+- </p></li></ol></div></div></div></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="pbds.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry" title="STL Exception Handling Contract"><a id="biblio.abrahams97exception"></a><p>[biblio.abrahams97exception] <span class="title"><em>
++ </p></li></ol></div></div></div></div></div><div class="bibliography"><div class="titlepage"><div><div><h2 class="title"><a id="pbds.biblio"></a>Bibliography</h2></div></div></div><div class="biblioentry"><a id="biblio.abrahams97exception"></a><p>[biblio.abrahams97exception] <span class="title"><em>
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1075.pdf" target="_top">
+ STL Exception Handling Contract
+ </a>
+@@ -781,7 +780,7 @@
+ Abrahams
+ </span>. </span><span class="publisher"><span class="publishername">
+ ISO SC22/WG21
+- . </span></span></p></div><div class="biblioentry" title="Modern C++ Design: Generic Programming and Design Patterns Applied"><a id="biblio.alexandrescu01modern"></a><p>[biblio.alexandrescu01modern] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.alexandrescu01modern"></a><p>[biblio.alexandrescu01modern] <span class="title"><em>
+ Modern C++ Design: Generic Programming and Design Patterns Applied
+ </em>. </span><span class="date">
+ 2001
+@@ -791,7 +790,7 @@
+ Alexandrescu
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="MTF, Bit, and COMB: A Guide to Deterministic and Randomized Algorithms for the List Update Problem"><a id="biblio.andrew04mtf"></a><p>[biblio.andrew04mtf] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.andrew04mtf"></a><p>[biblio.andrew04mtf] <span class="title"><em>
+ MTF, Bit, and COMB: A Guide to Deterministic and Randomized
+ Algorithms for the List Update Problem
+ </em>. </span><span class="authorgroup"><span class="firstname">
+@@ -802,7 +801,7 @@
+ D.
+ </span> <span class="surname">
+ Gleich
+- </span>. </span></p></div><div class="biblioentry" title="Why You Shouldn't Use set - and What You Should Use Instead"><a id="biblio.austern00noset"></a><p>[biblio.austern00noset] <span class="title"><em>
++ </span>. </span></p></div><div class="biblioentry"><a id="biblio.austern00noset"></a><p>[biblio.austern00noset] <span class="title"><em>
+ Why You Shouldn't Use set - and What You Should Use Instead
+ </em>. </span><span class="date">
+ April, 2000
+@@ -812,7 +811,7 @@
+ Austern
+ </span>. </span><span class="publisher"><span class="publishername">
+ C++ Report
+- . </span></span></p></div><div class="biblioentry" title="A Proposal to Add Hashtables to the Standard Library"><a id="biblio.austern01htprop"></a><p>[biblio.austern01htprop] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.austern01htprop"></a><p>[biblio.austern01htprop] <span class="title"><em>
+ <a class="link" href="http://www.open-std.org/JTC1/sc22/wg21/docs/papers/2001/n1326.html" target="_top">
+ A Proposal to Add Hashtables to the Standard Library
+ </a>
+@@ -824,7 +823,7 @@
+ Austern
+ </span>. </span><span class="publisher"><span class="publishername">
+ ISO SC22/WG21
+- . </span></span></p></div><div class="biblioentry" title="Segmented iterators and hierarchical algorithms"><a id="biblio.austern98segmentedit"></a><p>[biblio.austern98segmentedit] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.austern98segmentedit"></a><p>[biblio.austern98segmentedit] <span class="title"><em>
+ Segmented iterators and hierarchical algorithms
+ </em>. </span><span class="date">
+ April, 1998
+@@ -834,7 +833,7 @@
+ Austern
+ </span>. </span><span class="publisher"><span class="publishername">
+ Generic Programming
+- . </span></span></p></div><div class="biblioentry" title="Boost Timer Library"><a id="biblio.dawestimer"></a><p>[biblio.dawestimer] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.dawestimer"></a><p>[biblio.dawestimer] <span class="title"><em>
+ <a class="link" href="www.boost.org/doc/libs/release/libs/timer/" target="_top">
+ Boost Timer Library
+ </a>
+@@ -844,7 +843,7 @@
+ Dawes
+ </span>. </span><span class="publisher"><span class="publishername">
+ Boost
+- . </span></span></p></div><div class="biblioentry" title="Boost Pool Library"><a id="biblio.clearypool"></a><p>[biblio.clearypool] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.clearypool"></a><p>[biblio.clearypool] <span class="title"><em>
+ <a class="link" href="www.boost.org/doc/libs/release/libs/pool/" target="_top">
+ Boost Pool Library
+ </a>
+@@ -854,7 +853,7 @@
+ Cleary
+ </span>. </span><span class="publisher"><span class="publishername">
+ Boost
+- . </span></span></p></div><div class="biblioentry" title="Boost Type Traits Library"><a id="biblio.maddocktraits"></a><p>[biblio.maddocktraits] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.maddocktraits"></a><p>[biblio.maddocktraits] <span class="title"><em>
+ <a class="link" href="www.boost.org/doc/libs/release/libs/type_traits/" target="_top">
+ Boost Type Traits Library
+ </a>
+@@ -868,7 +867,7 @@
+ Cleary
+ </span>. </span><span class="publisher"><span class="publishername">
+ Boost
+- . </span></span></p></div><div class="biblioentry" title="Worst-case efficient priority queues"><a id="biblio.brodal96priority"></a><p>[biblio.brodal96priority] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.brodal96priority"></a><p>[biblio.brodal96priority] <span class="title"><em>
+ <a class="link" href="https://dl.acm.org/citation.cfm?id=313883" target="_top">
+ Worst-case efficient priority queues
+ </a>
+@@ -876,7 +875,7 @@
+ Gerth
+ </span> <span class="surname">
+ Stolting Brodal
+- </span>. </span></p></div><div class="biblioentry" title="Efficient C++ Programming Techniques"><a id="biblio.bulkamayheweff"></a><p>[biblio.bulkamayheweff] <span class="title"><em>
++ </span>. </span></p></div><div class="biblioentry"><a id="biblio.bulkamayheweff"></a><p>[biblio.bulkamayheweff] <span class="title"><em>
+ Efficient C++ Programming Techniques
+ </em>. </span><span class="date">
+ 1997
+@@ -890,7 +889,7 @@
+ Mayhew
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="Introduction to Algorithms, 2nd edition"><a id="biblio.clrs2001"></a><p>[biblio.clrs2001] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.clrs2001"></a><p>[biblio.clrs2001] <span class="title"><em>
+ Introduction to Algorithms, 2nd edition
+ </em>. </span><span class="date">
+ 2001
+@@ -912,7 +911,7 @@
+ Stein
+ </span>. </span><span class="publisher"><span class="publishername">
+ MIT Press
+- . </span></span></p></div><div class="biblioentry" title="Balls and bins: A study in negative dependence"><a id="biblio.dubhashi98neg"></a><p>[biblio.dubhashi98neg] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.dubhashi98neg"></a><p>[biblio.dubhashi98neg] <span class="title"><em>
+ Balls and bins: A study in negative dependence
+ </em>. </span><span class="date">
+ 1998
+@@ -926,7 +925,7 @@
+ Ranjan
+ </span>. </span><span class="publisher"><span class="publishername">
+ Random Structures and Algorithms 13
+- . </span></span></p></div><div class="biblioentry" title="Extendible hashing - a fast access method for dynamic files"><a id="biblio.fagin79extendible"></a><p>[biblio.fagin79extendible] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.fagin79extendible"></a><p>[biblio.fagin79extendible] <span class="title"><em>
+ Extendible hashing - a fast access method for dynamic files
+ </em>. </span><span class="date">
+ 1979
+@@ -948,7 +947,7 @@
+ Strong
+ </span>. </span><span class="publisher"><span class="publishername">
+ ACM Trans. Database Syst. 4
+- . </span></span></p></div><div class="biblioentry" title="Ptset: Sets of integers implemented as Patricia trees"><a id="biblio.filliatre2000ptset"></a><p>[biblio.filliatre2000ptset] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.filliatre2000ptset"></a><p>[biblio.filliatre2000ptset] <span class="title"><em>
+ <a class="link" href="http://cristal.inria.fr/~frisch/icfp06_contest/advtr/applyOmatic/ptset.ml" target="_top">
+ Ptset: Sets of integers implemented as Patricia trees
+ </a>
+@@ -958,7 +957,7 @@
+ Jean-Christophe
+ </span> <span class="surname">
+ Filliatre
+- </span>. </span></p></div><div class="biblioentry" title="The pairing heap: a new form of self-adjusting heap"><a id="biblio.fredman86pairing"></a><p>[biblio.fredman86pairing] <span class="title"><em>
++ </span>. </span></p></div><div class="biblioentry"><a id="biblio.fredman86pairing"></a><p>[biblio.fredman86pairing] <span class="title"><em>
+ <a class="link" href="http://www.cs.cmu.edu/~sleator/papers/pairing-heaps.pdf" target="_top">
+ The pairing heap: a new form of self-adjusting heap
+ </a>
+@@ -980,7 +979,7 @@
+ R. E.
+ </span> <span class="surname">
+ Tarjan
+- </span>. </span></p></div><div class="biblioentry" title="Design Patterns - Elements of Reusable Object-Oriented Software"><a id="biblio.gof"></a><p>[biblio.gof] <span class="title"><em>
++ </span>. </span></p></div><div class="biblioentry"><a id="biblio.gof"></a><p>[biblio.gof] <span class="title"><em>
+ Design Patterns - Elements of Reusable Object-Oriented Software
+ </em>. </span><span class="date">
+ 1995
+@@ -1002,7 +1001,7 @@
+ Vlissides
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="Order-preserving key transformations"><a id="biblio.garg86order"></a><p>[biblio.garg86order] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.garg86order"></a><p>[biblio.garg86order] <span class="title"><em>
+ Order-preserving key transformations
+ </em>. </span><span class="date">
+ 1986
+@@ -1016,7 +1015,7 @@
+ Gotlieb
+ </span>. </span><span class="publisher"><span class="publishername">
+ Trans. Database Syst. 11
+- . </span></span></p></div><div class="biblioentry" title="Making a real hash of things"><a id="biblio.hyslop02making"></a><p>[biblio.hyslop02making] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.hyslop02making"></a><p>[biblio.hyslop02making] <span class="title"><em>
+ Making a real hash of things
+ </em>. </span><span class="date">
+ May 2002
+@@ -1030,7 +1029,7 @@
+ Sutter
+ </span>. </span><span class="publisher"><span class="publishername">
+ C++ Report
+- . </span></span></p></div><div class="biblioentry" title="The C++ Standard Library - A Tutorial and Reference"><a id="biblio.jossutis01stl"></a><p>[biblio.jossutis01stl] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.jossutis01stl"></a><p>[biblio.jossutis01stl] <span class="title"><em>
+ The C++ Standard Library - A Tutorial and Reference
+ </em>. </span><span class="date">
+ 2001
+@@ -1040,7 +1039,7 @@
+ Jossutis
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="New Heap Data Structures"><a id="biblio.kt99fat_heaps"></a><p>[biblio.kt99fat_heaps] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.kt99fat_heaps"></a><p>[biblio.kt99fat_heaps] <span class="title"><em>
+ <a class="link" href="http://www.cs.princeton.edu/research/techreps/TR-597-99" target="_top">
+ New Heap Data Structures
+ </a>
+@@ -1054,7 +1053,7 @@
+ Robert E.
+ </span> <span class="surname">
+ Tarjan
+- </span>. </span></p></div><div class="biblioentry" title="Are Set Iterators Mutable or Immutable?"><a id="biblio.kleft00sets"></a><p>[biblio.kleft00sets] <span class="title"><em>
++ </span>. </span></p></div><div class="biblioentry"><a id="biblio.kleft00sets"></a><p>[biblio.kleft00sets] <span class="title"><em>
+ Are Set Iterators Mutable or Immutable?
+ </em>. </span><span class="date">
+ October 2000
+@@ -1068,7 +1067,7 @@
+ Kleft
+ </span>. </span><span class="publisher"><span class="publishername">
+ C/C++ Users Jornal
+- . </span></span></p></div><div class="biblioentry" title="The Art of Computer Programming - Sorting and Searching"><a id="biblio.knuth98sorting"></a><p>[biblio.knuth98sorting] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.knuth98sorting"></a><p>[biblio.knuth98sorting] <span class="title"><em>
+ The Art of Computer Programming - Sorting and Searching
+ </em>. </span><span class="date">
+ 1998
+@@ -1078,7 +1077,7 @@
+ Knuth
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="Data abstraction and hierarchy"><a id="biblio.liskov98data"></a><p>[biblio.liskov98data] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.liskov98data"></a><p>[biblio.liskov98data] <span class="title"><em>
+ Data abstraction and hierarchy
+ </em>. </span><span class="date">
+ May 1998
+@@ -1088,7 +1087,7 @@
+ Liskov
+ </span>. </span><span class="publisher"><span class="publishername">
+ SIGPLAN Notices 23
+- . </span></span></p></div><div class="biblioentry" title="Linear hashing: A new tool for file and table addressing"><a id="biblio.litwin80lh"></a><p>[biblio.litwin80lh] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.litwin80lh"></a><p>[biblio.litwin80lh] <span class="title"><em>
+ Linear hashing: A new tool for file and table addressing
+ </em>. </span><span class="date">
+ June 1980
+@@ -1098,8 +1097,8 @@
+ Litwin
+ </span>. </span><span class="publisher"><span class="publishername">
+ Proceedings of International Conference on Very Large Data Bases
+- . </span></span></p></div><div class="biblioentry" title="Deamortization - Part 2: Binomial Heaps"><a id="biblio.maverik_lowerbounds"></a><p>[biblio.maverik_lowerbounds] <span class="title"><em>
+- <a class="link" href="http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps" target="_top">
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.maverik_lowerbounds"></a><p>[biblio.maverik_lowerbounds] <span class="title"><em>
++ <a class="link" href="http://magic.aladdin.cs.cmu.edu/2005/08/01/deamortization-part-2-binomial-heaps/" target="_top">
+ Deamortization - Part 2: Binomial Heaps
+ </a>
+ </em>. </span><span class="date">
+@@ -1108,7 +1107,7 @@
+ Maverik
+ </span> <span class="surname">
+ Woo
+- </span>. </span></p></div><div class="biblioentry" title="More Effective C++: 35 New Ways to Improve Your Programs and Designs"><a id="biblio.meyers96more"></a><p>[biblio.meyers96more] <span class="title"><em>
++ </span>. </span></p></div><div class="biblioentry"><a id="biblio.meyers96more"></a><p>[biblio.meyers96more] <span class="title"><em>
+ More Effective C++: 35 New Ways to Improve Your Programs and Designs
+ </em>. </span><span class="date">
+ 1996
+@@ -1118,7 +1117,7 @@
+ Meyers
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="How Non-Member Functions Improve Encapsulation"><a id="biblio.meyers00nonmember"></a><p>[biblio.meyers00nonmember] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.meyers00nonmember"></a><p>[biblio.meyers00nonmember] <span class="title"><em>
+ How Non-Member Functions Improve Encapsulation
+ </em>. </span><span class="date">
+ 2000
+@@ -1128,7 +1127,7 @@
+ Meyers
+ </span>. </span><span class="publisher"><span class="publishername">
+ C/C++ Users Journal
+- . </span></span></p></div><div class="biblioentry" title="Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library"><a id="biblio.meyers01stl"></a><p>[biblio.meyers01stl] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.meyers01stl"></a><p>[biblio.meyers01stl] <span class="title"><em>
+ Effective STL: 50 Specific Ways to Improve Your Use of the Standard Template Library
+ </em>. </span><span class="date">
+ 2001
+@@ -1138,7 +1137,7 @@
+ Meyers
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="Class Template, Member Template - or Both?"><a id="biblio.meyers02both"></a><p>[biblio.meyers02both] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.meyers02both"></a><p>[biblio.meyers02both] <span class="title"><em>
+ Class Template, Member Template - or Both?
+ </em>. </span><span class="date">
+ 2003
+@@ -1148,7 +1147,7 @@
+ Meyers
+ </span>. </span><span class="publisher"><span class="publishername">
+ C/C++ Users Journal
+- . </span></span></p></div><div class="biblioentry" title="Randomized Algorithms"><a id="biblio.motwani95random"></a><p>[biblio.motwani95random] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.motwani95random"></a><p>[biblio.motwani95random] <span class="title"><em>
+ Randomized Algorithms
+ </em>. </span><span class="date">
+ 2003
+@@ -1162,13 +1161,13 @@
+ Raghavan
+ </span>. </span><span class="publisher"><span class="publishername">
+ Cambridge University Press
+- . </span></span></p></div><div class="biblioentry" title="COM: Component Model Object Technologies"><a id="biblio.mscom"></a><p>[biblio.mscom] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.mscom"></a><p>[biblio.mscom] <span class="title"><em>
+ <a class="link" href="https://www.microsoft.com/com/" target="_top">
+ COM: Component Model Object Technologies
+ </a>
+ </em>. </span><span class="publisher"><span class="publishername">
+ Microsoft
+- . </span></span></p></div><div class="biblioentry" title="Rationale for Adding Hash Tables to the C++ Standard Template Library"><a id="biblio.musser95rationale"></a><p>[biblio.musser95rationale] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.musser95rationale"></a><p>[biblio.musser95rationale] <span class="title"><em>
+ Rationale for Adding Hash Tables to the C++ Standard Template Library
+ </em>. </span><span class="date">
+ 1995
+@@ -1176,7 +1175,7 @@
+ David R.
+ </span> <span class="surname">
+ Musser
+- </span>. </span></p></div><div class="biblioentry" title="STL Tutorial and Reference Guide"><a id="biblio.musser96stltutorial"></a><p>[biblio.musser96stltutorial] <span class="title"><em>
++ </span>. </span></p></div><div class="biblioentry"><a id="biblio.musser96stltutorial"></a><p>[biblio.musser96stltutorial] <span class="title"><em>
+ STL Tutorial and Reference Guide
+ </em>. </span><span class="date">
+ 1996
+@@ -1190,8 +1189,8 @@
+ Saini
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="Priority Queues and the STL"><a id="biblio.nelson96stlpq"></a><p>[biblio.nelson96stlpq] <span class="title"><em>
+- <a class="link" href="http://www.dogma.net/markn/articles/pq_stl/priority.htm" target="_top">Priority Queues and the STL
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.nelson96stlpq"></a><p>[biblio.nelson96stlpq] <span class="title"><em>
++ <a class="link" href="http://marknelson.us/1996/01/01/priority-queues/" target="_top">Priority Queues and the STL
+ </a>
+ </em>. </span><span class="date">
+ January 1996
+@@ -1201,7 +1200,7 @@
+ Nelson
+ </span>. </span><span class="publisher"><span class="publishername">
+ Dr. Dobbs Journal
+- . </span></span></p></div><div class="biblioentry" title="Fast mergeable integer maps"><a id="biblio.okasaki98mereable"></a><p>[biblio.okasaki98mereable] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.okasaki98mereable"></a><p>[biblio.okasaki98mereable] <span class="title"><em>
+ Fast mergeable integer maps
+ </em>. </span><span class="date">
+ September 1998
+@@ -1215,7 +1214,7 @@
+ Gill
+ </span>. </span><span class="publisher"><span class="publishername">
+ In Workshop on ML
+- . </span></span></p></div><div class="biblioentry" title="Standard Template Library Programmer's Guide"><a id="biblio.sgi_stl"></a><p>[biblio.sgi_stl] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.sgi_stl"></a><p>[biblio.sgi_stl] <span class="title"><em>
+ <a class="link" href="http://www.sgi.com/tech/stl/" target="_top">
+ Standard Template Library Programmer's Guide
+ </a>
+@@ -1225,11 +1224,11 @@
+ Austern
+ </span>. </span><span class="publisher"><span class="publishername">
+ SGI
+- . </span></span></p></div><div class="biblioentry" title="select"><a id="biblio.select_man"></a><p>[biblio.select_man] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.select_man"></a><p>[biblio.select_man] <span class="title"><em>
+ <a class="link" href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/select.html" target="_top">
+ select
+ </a>
+- </em>. </span></p></div><div class="biblioentry" title="Amortized Efficiency of List Update Problems"><a id="biblio.sleator84amortized"></a><p>[biblio.sleator84amortized] <span class="title"><em>
++ </em>. </span></p></div><div class="biblioentry"><a id="biblio.sleator84amortized"></a><p>[biblio.sleator84amortized] <span class="title"><em>
+ Amortized Efficiency of List Update Problems
+ </em>. </span><span class="date">
+ 1984
+@@ -1243,7 +1242,7 @@
+ Tarjan
+ </span>. </span><span class="publisher"><span class="publishername">
+ ACM Symposium on Theory of Computing
+- . </span></span></p></div><div class="biblioentry" title="Self-Adjusting Binary Search Trees"><a id="biblio.sleator85self"></a><p>[biblio.sleator85self] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.sleator85self"></a><p>[biblio.sleator85self] <span class="title"><em>
+ Self-Adjusting Binary Search Trees
+ </em>. </span><span class="date">
+ 1985
+@@ -1257,7 +1256,7 @@
+ Tarjan
+ </span>. </span><span class="publisher"><span class="publishername">
+ ACM Symposium on Theory of Computing
+- . </span></span></p></div><div class="biblioentry" title="The Standard Template Library"><a id="biblio.stepanov94standard"></a><p>[biblio.stepanov94standard] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.stepanov94standard"></a><p>[biblio.stepanov94standard] <span class="title"><em>
+ The Standard Template Library
+ </em>. </span><span class="date">
+ 1984
+@@ -1269,7 +1268,7 @@
+ M.
+ </span> <span class="surname">
+ Lee
+- </span>. </span></p></div><div class="biblioentry" title="The C++ Programming Langugage"><a id="biblio.stroustrup97cpp"></a><p>[biblio.stroustrup97cpp] <span class="title"><em>
++ </span>. </span></p></div><div class="biblioentry"><a id="biblio.stroustrup97cpp"></a><p>[biblio.stroustrup97cpp] <span class="title"><em>
+ The C++ Programming Langugage
+ </em>. </span><span class="date">
+ 1997
+@@ -1279,7 +1278,7 @@
+ Stroustrup
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="C++ Templates: The Complete Guide"><a id="biblio.vandevoorde2002cpptemplates"></a><p>[biblio.vandevoorde2002cpptemplates] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.vandevoorde2002cpptemplates"></a><p>[biblio.vandevoorde2002cpptemplates] <span class="title"><em>
+ C++ Templates: The Complete Guide
+ </em>. </span><span class="date">
+ 2002
+@@ -1293,7 +1292,7 @@
+ Josuttis
+ </span>. </span><span class="publisher"><span class="publishername">
+ Addison-Wesley Publishing Company
+- . </span></span></p></div><div class="biblioentry" title="Thirty Years Among the Dead"><a id="biblio.wickland96thirty"></a><p>[biblio.wickland96thirty] <span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="biblio.wickland96thirty"></a><p>[biblio.wickland96thirty] <span class="title"><em>
+ <a class="link" href="http://myweb.wvnet.edu/~gsa00121/books/amongdead30.zip" target="_top">
+ Thirty Years Among the Dead
+ </a>
+@@ -1305,4 +1304,4 @@
+ Wickland
+ </span>. </span><span class="publisher"><span class="publishername">
+ National Psychological Institute
+- . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch21s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures_using.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
++ . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch21s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures_using.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/ext_iterators.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/ext_iterators.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/ext_iterators.html (.../branches/gcc-4_7-branch)
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 27. Iterators"><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
++</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
+ original HP STL implementation (the language wasn't rich enough at the
+ time). For backwards compatibility, base classes are provided which
+ declare the same nested typedefs:
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>input_iterator</p></li><li class="listitem"><p>output_iterator</p></li><li class="listitem"><p>forward_iterator</p></li><li class="listitem"><p>bidirectional_iterator</p></li><li class="listitem"><p>random_access_iterator</p></li></ul></div><p>24.3.4 describes iterator operation <code class="code">distance</code>, which takes
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>input_iterator</p></li><li class="listitem"><p>output_iterator</p></li><li class="listitem"><p>forward_iterator</p></li><li class="listitem"><p>bidirectional_iterator</p></li><li class="listitem"><p>random_access_iterator</p></li></ul></div><p>24.3.4 describes iterator operation <code class="code">distance</code>, which takes
+ two iterators and returns a result. It is extended by another signature
+ which takes two iterators and a reference to a result. The result is
+ modified, and the function returns nothing.
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 26. Numerics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 28. Input and Output</td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_numerics.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_io.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 26. Numerics </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 28. Input and Output</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/appendix_contributing.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/appendix_contributing.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/appendix_contributing.html (.../branches/gcc-4_7-branch)
+@@ -1,19 +1,18 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.html" title="Part IV.  Appendices" /><link rel="prev" href="bk01pt04.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.html" title="Part IV.  Appendices" /><link rel="prev" href="bk01pt04.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. 
+ Contributing
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt04.html">Prev</a> </td><th width="60%" align="center">Part IV. 
+ Appendices
+-</th><td width="20%" align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix A.  Contributing"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.contrib"></a>
++</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>
+ Contributing
+- <a id="idp21837344" class="indexterm"></a>
+-</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>
++ <a id="idm269980375424" class="indexterm"></a>
++</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>
+ The GNU C++ Library follows an open development model. Active
+ contributors are assigned maintainer-ship responsibility, and given
+ write access to the source repository. First time contributors
+ should follow this procedure:
+-</p><div class="section" title="Contributor Checklist"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.list"></a>Contributor Checklist</h2></div></div></div><div class="section" title="Reading"><div class="titlepage"><div><div><h3 class="title"><a id="list.reading"></a>Reading</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.list"></a>Contributor Checklist</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="list.reading"></a>Reading</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Get and read the relevant sections of the C++ language
+ specification. Copies of the full ISO 14882 standard are
+ available on line via the ISO mirror site for committee
+@@ -37,7 +36,7 @@
+ for this group is quite useful.
+ </p></li><li class="listitem"><p>
+ Peruse
+- the <a class="link" href="http://www.gnu.org/prep/standards" target="_top">GNU
++ the <a class="link" href="http://www.gnu.org/prep/standards/" target="_top">GNU
+ Coding Standards</a>, and chuckle when you hit the part
+ about <span class="quote">“<span class="quote">Using Languages Other Than C</span>”</span>.
+ </p></li><li class="listitem"><p>
+@@ -48,7 +47,7 @@
+ And last but certainly not least, read the
+ library-specific information found in
+ <a class="link" href="appendix_porting.html" title="Appendix B.  Porting and Maintenance">Porting and Maintenance</a>.
+- </p></li></ul></div></div><div class="section" title="Assignment"><div class="titlepage"><div><div><h3 class="title"><a id="list.copyright"></a>Assignment</h3></div></div></div><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="list.copyright"></a>Assignment</h3></div></div></div><p>
+ Small changes can be accepted without a copyright assignment form on
+ file. New code and additions to the library need completed copyright
+ assignment form on file at the FSF. Note: your employer may be required
+@@ -75,14 +74,14 @@
+ requesting an assignment form from
+ <code class="email">&lt;<a class="email" href="mailto:mailto:assign@gnu.org">mailto:assign@gnu.org</a>&gt;</code>, please cc the libstdc++
+ maintainer above so that progress can be monitored.
+- </p></div><div class="section" title="Getting Sources"><div class="titlepage"><div><div><h3 class="title"><a id="list.getting"></a>Getting Sources</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="list.getting"></a>Getting Sources</h3></div></div></div><p>
+ <a class="link" href="http://gcc.gnu.org/svnwrite.html" target="_top">Getting write access
+ (look for "Write after approval")</a>
+- </p></div><div class="section" title="Submitting Patches"><div class="titlepage"><div><div><h3 class="title"><a id="list.patches"></a>Submitting Patches</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="list.patches"></a>Submitting Patches</h3></div></div></div><p>
+ Every patch must have several pieces of information before it can be
+ properly evaluated. Ideally (and to ensure the fastest possible
+ response from the maintainers) it would have all of these pieces:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ A description of the bug and how your patch fixes this
+ bug. For new features a description of the feature and your
+ implementation.
+@@ -113,4 +112,4 @@
+ libstdc++ mailing list.
+ </p></li></ul></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_organization.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part IV. 
+ Appendices
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Directory Layout and Source Conventions</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Directory Layout and Source Conventions</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/profile_mode.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/profile_mode.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/profile_mode.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s05.html" title="Testing" /><link rel="next" href="bk01pt03ch19s02.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="bk01pt03ch18s05.html">Prev</a> </td><th width="60%" align="center">Part III. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s05.html" title="Testing" /><link rel="next" href="bk01pt03ch19s02.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="bk01pt03ch18s05.html">Prev</a> </td><th width="60%" align="center">Part III. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 19. Profile Mode"><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="bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.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="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.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="bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.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="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.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" title="Intro"><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>
++</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s02.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="bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.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="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.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="bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.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="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.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>
+ <span class="emphasis"><em>Goal: </em></span>Give performance improvement advice based on
+ recognition of suboptimal usage patterns of the standard library.
+ </p><p>
+@@ -16,7 +15,7 @@
+ CGO 2009</a>.
+ </p><p>
+ <span class="emphasis"><em>Strengths: </em></span>
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Unintrusive solution. The application code does not require any
+ modification.
+ </p></li><li class="listitem"><p> The advice is call context sensitive, thus capable of
+@@ -27,7 +26,7 @@
+ </p></li></ul></div><p>
+ </p><p>
+ <span class="emphasis"><em>Drawbacks: </em></span>
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ You must recompile the application code with custom options.
+ </p></li><li class="listitem"><p>You must run the application on representative input.
+ The advice is input dependent.
+@@ -34,7 +33,7 @@
+ </p></li><li class="listitem"><p>
+ The execution time will increase, in some cases by factors.
+ </p></li></ul></div><p>
+- </p><div class="section" title="Using the Profile Mode"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.using"></a>Using the Profile Mode</h3></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.using"></a>Using the Profile Mode</h3></div></div></div><p>
+ This is the anticipated common workflow for program <code class="code">foo.cc</code>:
+ </p><pre class="programlisting">
+ $ cat foo.cc
+@@ -54,7 +53,7 @@
+ </pre><p>
+ </p><p>
+ Anatomy of a warning:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Warning id. This is a short descriptive string for the class
+ that this warning belongs to. E.g., "vector-to-list".
+ </p></li><li class="listitem"><p>
+@@ -94,11 +93,11 @@
+ We believe such warnings can help users understand the performance
+ behavior of their application better, which can lead to changes
+ at a higher abstraction level.
+- </p></div><div class="section" title="Tuning the Profile Mode"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.tuning"></a>Tuning the Profile Mode</h3></div></div></div><p>Compile time switches and environment variables (see also file
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.tuning"></a>Tuning the Profile Mode</h3></div></div></div><p>Compile time switches and environment variables (see also file
+ profiler.h). Unless specified otherwise, they can be set at compile time
+ using -D_&lt;name&gt; or by setting variable &lt;name&gt;
+ in the environment where the program is run, before starting execution.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <code class="code">_GLIBCXX_PROFILE_NO_&lt;diagnostic&gt;</code>:
+ disable specific diagnostics.
+ See section Diagnostics for possible values.
+@@ -138,9 +137,9 @@
+ call context.
+ (Environment variable not supported.)
+ </p></li></ul></div><p>
+- </p></div></div><div class="bibliography" title="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="idp17357280"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269984851168"></a><p><span class="citetitle"><em class="citetitle">
+ Perflint: A Context Sensitive Performance Advisor for C++ Programs
+ </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">
+ Proceedings of the 2009 International Symposium on Code Generation
+ and Optimization
+- . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Testing </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>
++ . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Testing </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>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/stringstreams.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/stringstreams.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/stringstreams.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Input and Output
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr></table><hr /></div><div class="section" title="Memory Based Streams"><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" title="Compatibility With strstream"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.memstreams.compat"></a>Compatibility With strstream</h3></div></div></div><p>
++</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>
+ </p><p>Stringstreams (defined in the header <code class="code">&lt;sstream&gt;</code>)
+ are in this author's opinion one of the coolest things since
+ sliced time. An example of their use is in the Received Wisdom
+@@ -34,4 +33,4 @@
+ memory yourself. The strstreams have been officially deprecated,
+ which means that 1) future revisions of the C++ Standard won't
+ support them, and 2) if you use them, people will laugh at you.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Stream Buffers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> File Based Streams</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="streambufs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="fstreams.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Stream Buffers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> File Based Streams</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/traits.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/traits.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/traits.html (.../branches/gcc-4_7-branch)
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Utilities
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="strings.html">Next</a></td></tr></table><hr /></div><div class="section" title="Traits"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.traits"></a>Traits</h2></div></div></div><p>
++</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>
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="memory.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="strings.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Memory </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 7. 
+ Strings
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch20s05.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch20s05.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch20s05.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s04.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="bk01pt03ch20s04.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" title="Multiple Thread Example"><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s04.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="bk01pt03ch20s04.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>
+ In the ST example we never used the thread_id variable present in each block.
+ Let's start by explaining the purpose of this in a MT application.
+ </p><p>
+@@ -104,4 +103,4 @@
+ a threads freelist mentioned above). The "formula" used can probably
+ be improved to further reduce the risk of blocks being "bounced back
+ and forth" between freelists.
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Single Thread Example </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 21. The bitmap_allocator</td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bitmap_allocator.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Single Thread Example </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 21. The bitmap_allocator</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/policy_data_structures_ack.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures_ack.html (.../branches/gcc-4_7-branch)
+@@ -1,11 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Acknowledgments"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.ack"></a>Acknowledgments</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ Written by Ami Tavory and Vladimir Dreizin (IBM Haifa Research
+ Laboratories), and Benjamin Kosnik (Red Hat).
+ </p><p>
+- This library was partially written at
+- <a class="link" href="http://www.haifa.il.ibm.com/" target="_top">IBM's Haifa Research Labs</a>.
++ This library was partially written at IBM's Haifa Research Labs.
+ It is based heavily on policy-based design and uses many useful
+ techniques from Modern C++ Design: Generic Programming and Design
+ Patterns Applied by Andrei Alexandrescu.
+@@ -26,4 +24,4 @@
+ attributing to him any flaws in the design or implementation of the
+ library).
+ </p><p>We would like to thank Matt Austern for the suggestion to
+- include tries.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_based_data_structures_test.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Testing </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 23. HP/SGI Extensions</td></tr></table></div></body></html>
++ include tries.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_based_data_structures_test.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_containers.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Testing </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 23. HP/SGI Extensions</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/ext_concurrency.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/ext_concurrency.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/ext_concurrency.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch30s02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch30s02.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. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch30s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 30. Concurrency"><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="bk01pt03ch30s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch30s03.html">Use</a></span></dt></dl></div><div class="section" title="Design"><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" title="Interface to Locks and Mutexes"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"></a>Interface to Locks and Mutexes</h3></div></div></div><p>The file <code class="filename">&lt;ext/concurrence.h&gt;</code>
++</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch30s02.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="bk01pt03ch30s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch30s03.html">Use</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.ext.concurrency.design"></a>Design</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.threads"></a>Interface to Locks and Mutexes</h3></div></div></div><p>The file <code class="filename">&lt;ext/concurrence.h&gt;</code>
+ contains all the higher-level
+ constructs for playing with threads. In contrast to the atomics layer,
+ the concurrence layer consists largely of types. All types are defined within <code class="code">namespace __gnu_cxx</code>.
+@@ -17,7 +16,7 @@
+ available locking
+ policies: <code class="code">_S_single</code>, <code class="code">_S_mutex</code>,
+ and <code class="code">_S_atomic</code>.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">_S_single</code></p><p>Indicates single-threaded code that does not need locking.
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="code">_S_single</code></p><p>Indicates single-threaded code that does not need locking.
+ </p></li><li class="listitem"><p><code class="code">_S_mutex</code></p><p>Indicates multi-threaded code using thread-layer abstractions.
+ </p></li><li class="listitem"><p><code class="code">_S_atomic</code></p><p>Indicates multi-threaded code using atomic operations.
+ </p></li></ul></div><p>The compile-time constant <code class="code">__default_lock_policy</code> is set
+@@ -33,7 +32,7 @@
+ These types have been superseded in the ISO C++ 2011 standard by the
+ mutex and lock types defined in the header
+ <code class="filename">&lt;mutex&gt;</code>.
+-</p></div><div class="section" title="Interface to Atomic Functions"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.atomics"></a>Interface to Atomic Functions</h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.design.atomics"></a>Interface to Atomic Functions</h3></div></div></div><p>
+ Two functions and one type form the base of atomic support.
+ </p><p>The type <code class="code">_Atomic_word</code> is a signed integral type
+ supporting atomic operations.
+@@ -47,7 +46,7 @@
+ __atomic_add_dispatch(volatile _Atomic_word*, int);
+ </pre><p>Both of these functions are declared in the header file
+ &lt;ext/atomicity.h&gt;, and are in <code class="code">namespace __gnu_cxx</code>.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <code class="code">
+ __exchange_and_add_dispatch
+ </code>
+@@ -66,7 +65,7 @@
+ </code>
+ </p><p>
+ Calls through to either of:
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">__exchange_and_add</code>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="code">__exchange_and_add</code>
+ </p><p>Multi-thread version. Inlined if compiler-generated builtin atomics
+ can be used, otherwise resolved at link time to a non-builtin code
+ sequence.
+@@ -91,4 +90,4 @@
+ </p><p>
+ Which expand to the appropriate write and read barrier required by the
+ host hardware and operating system.
+-</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch30s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 29. Demangling </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
++</p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_demangling.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch30s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 29. Demangling </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/associative.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/associative.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/associative.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="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">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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="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">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. 
+ Containers
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="containers_and_c.html">Next</a></td></tr></table><hr /></div><div class="section" title="Associative"><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" title="Insertion Hints"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.insert_hints"></a>Insertion Hints</h3></div></div></div><p>
++</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.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>
+ Section [23.1.2], Table 69, of the C++ standard lists this
+ function for all of the associative containers (map, set, etc):
+ </p><pre class="programlisting">
+@@ -39,7 +38,7 @@
+ paragraph. *grin*
+ </p><p>
+ If the <code class="code">hint</code> parameter ('p' above) is equivalent to:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <code class="code">begin()</code>, then the item being inserted should
+ have a key less than all the other keys in the container.
+ The item will be inserted at the beginning of the container,
+@@ -84,7 +83,7 @@
+ the new item would in fact belong there. If the hint does not
+ point to the correct place, then no further local searching is
+ done; the search begins from scratch in logarithmic time.
+- </p></div><div class="section" title="bitset"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.bitset"></a>bitset</h3></div></div></div><div class="section" title="Size Variable"><div class="titlepage"><div><div><h4 class="title"><a id="associative.bitset.size_variable"></a>Size Variable</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.associative.bitset"></a>bitset</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="associative.bitset.size_variable"></a>Size Variable</h4></div></div></div><p>
+ No, you cannot write code of the form
+ </p><pre class="programlisting">
+ #include &lt;bitset&gt;
+@@ -102,7 +101,7 @@
+ There are a couple of ways to handle this kind of thing. Please
+ consider all of them before passing judgement. They include, in
+ no chaptericular order:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>A very large N in <code class="code">bitset&lt;N&gt;</code>.</p></li><li class="listitem"><p>A container&lt;bool&gt;.</p></li><li class="listitem"><p>Extremely weird solutions.</p></li></ul></div><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>A very large N in <code class="code">bitset&lt;N&gt;</code>.</p></li><li class="listitem"><p>A container&lt;bool&gt;.</p></li><li class="listitem"><p>Extremely weird solutions.</p></li></ul></div><p>
+ <span class="emphasis"><em>A very large N in
+ <code class="code">bitset&lt;N&gt;</code>.  </em></span> It has been
+ pointed out a few times in newsgroups that N bits only takes up
+@@ -169,7 +168,7 @@
+ </p><p>
+ Also note that the implementation of bitset used in libstdc++ has
+ <a class="link" href="ext_containers.html#manual.ext.containers.sgi" title="Backwards Compatibility">some extensions</a>.
+- </p></div><div class="section" title="Type String"><div class="titlepage"><div><div><h4 class="title"><a id="associative.bitset.type_string"></a>Type String</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="associative.bitset.type_string"></a>Type String</h4></div></div></div><p>
+ </p><p>
+ Bitmasks do not take char* nor const char* arguments in their
+ constructors. This is something of an accident, but you can read
+@@ -189,4 +188,4 @@
+ </pre></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="containers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="containers_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 9. 
+ Containers
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch17s02.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch17s02.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch17s02.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s03.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="bk01pt03ch17s03.html">Next</a></td></tr></table><hr /></div><div class="section" title="Semantics"><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s03.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="bk01pt03ch17s03.html">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>
+ </p><p>A program that uses the C++ standard library correctly
+ will maintain the same semantics under debug mode as it had with
+ the normal (release) library. All functional and exception-handling
+@@ -36,7 +35,7 @@
+ (N.B. In GCC 3.4.x and 4.0.0, due to a bug,
+ <code class="code">-D_GLIBXX_DEBUG_PEDANTIC</code> was also needed. The problem has
+ been fixed in GCC 4.0.1 and later versions.) </p><p>The following library components provide extra debugging
+- capabilities in debug mode:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">std::basic_string</code> (no safe iterators and see note below)</p></li><li class="listitem"><p><code class="code">std::bitset</code></p></li><li class="listitem"><p><code class="code">std::deque</code></p></li><li class="listitem"><p><code class="code">std::list</code></p></li><li class="listitem"><p><code class="code">std::map</code></p></li><li class="listitem"><p><code class="code">std::multimap</code></p></li><li class="listitem"><p><code class="code">std::multiset</code></p></li><li class="listitem"><p><code class="code">std::set</code></p></li><li class="listitem"><p><code class="code">std::vector</code></p></li><li class="listitem"><p><code class="code">std::unordered_map</code></p></li><li class="listitem"><p><code class="code">std::unordered_multimap</code></p></li><li class="listitem"><p><code class="code">std::unordered_set</code></p></li><li class="listitem"><p><code class="code">std::unordered_multiset</code></p></li></ul></div><p>N.B. although there are precondition checks for some string operations,
++ capabilities in debug mode:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="code">std::basic_string</code> (no safe iterators and see note below)</p></li><li class="listitem"><p><code class="code">std::bitset</code></p></li><li class="listitem"><p><code class="code">std::deque</code></p></li><li class="listitem"><p><code class="code">std::list</code></p></li><li class="listitem"><p><code class="code">std::map</code></p></li><li class="listitem"><p><code class="code">std::multimap</code></p></li><li class="listitem"><p><code class="code">std::multiset</code></p></li><li class="listitem"><p><code class="code">std::set</code></p></li><li class="listitem"><p><code class="code">std::vector</code></p></li><li class="listitem"><p><code class="code">std::unordered_map</code></p></li><li class="listitem"><p><code class="code">std::unordered_multimap</code></p></li><li class="listitem"><p><code class="code">std::unordered_set</code></p></li><li class="listitem"><p><code class="code">std::unordered_multiset</code></p></li></ul></div><p>N.B. although there are precondition checks for some string operations,
+ e.g. <code class="code">operator[]</code>,
+ they will not always be run when using the <code class="code">char</code> and
+ <code class="code">wchar_t</code> specialisations (<code class="code">std::string</code> and
+@@ -52,4 +51,4 @@
+ guaranteed to work. For full debug-mode support you can use the
+ <code class="code">__gnu_debug::basic_string</code> debugging container directly,
+ which always works correctly.
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug_mode.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="bk01pt03ch17s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 17. Debug Mode </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="debug_mode.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="bk01pt03ch17s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 17. Debug Mode </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bitmap_allocator.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bitmap_allocator.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bitmap_allocator.html (.../branches/gcc-4_7-branch)
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s05.html" title="Multiple Thread Example" /><link rel="next" href="bk01pt03ch21s02.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="bk01pt03ch20s05.html">Prev</a> </td><th width="60%" align="center">Part III. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s05.html" title="Multiple Thread Example" /><link rel="next" href="bk01pt03ch21s02.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="bk01pt03ch20s05.html">Prev</a> </td><th width="60%" align="center">Part III. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch21s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 21. The bitmap_allocator"><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="bk01pt03ch21s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></div><p>
+-</p><div class="section" title="Design"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="allocator.bitmap.design"></a>Design</h2></div></div></div><p>
++</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch21s02.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="bk01pt03ch21s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.grow_policy">Overhead and Grow Policy</a></span></dt></dl></dd></dl></div><p>
++</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>
+ As this name suggests, this allocator uses a bit-map to keep track
+ of the used and unused memory locations for its book-keeping
+ purposes.
+@@ -30,4 +29,4 @@
+ Mutex Protection around every allocation/deallocation. The state
+ of the macro is picked up automatically from the gthr abstraction
+ layer.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch21s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Multiple Thread Example </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch21s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Multiple Thread Example </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/support.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/support.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/support.html (.../branches/gcc-4_7-branch)
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="bk01pt02.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. 
+ Support
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt02.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 4.  Support"><div class="titlepage"><div><div><h2 class="title"><a id="std.support"></a>Chapter 4. 
++ </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. 
+ Support
+- <a id="idp13718496" class="indexterm"></a>
+-</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>
++ <a id="idm269988473456" class="indexterm"></a>
++</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>
+ This part deals with the functions called and objects created
+ automatically during the course of a program's existence.
+ </p><p>
+@@ -16,9 +15,9 @@
+ need to get your own copy from your nation's member body; see our
+ homepage for help), we can mention a couple of changes in what
+ kind of support a C++ program gets from the Standard Library.
+- </p><div class="section" title="Types"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.types"></a>Types</h2></div></div></div><div class="section" title="Fundamental Types"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.fundamental"></a>Fundamental Types</h3></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.support.types"></a>Types</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.fundamental"></a>Fundamental Types</h3></div></div></div><p>
+ C++ has the following builtin types:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ char
+ </p></li><li class="listitem"><p>
+ signed char
+@@ -53,7 +52,7 @@
+ </p><p>
+ Specializing parts of the library on these types is prohibited:
+ instead, use a POD.
+- </p></div><div class="section" title="Numeric Properties"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.numeric_limits"></a>Numeric Properties</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.numeric_limits"></a>Numeric Properties</h3></div></div></div><p>
+ The header <code class="filename">limits</code> defines
+ traits classes to give access to various implementation
+ defined-aspects of the fundamental types. The traits classes --
+@@ -99,7 +98,7 @@
+ static const bool tinyness_before;
+ static const float_round_style round_style;
+ };
+- </pre></div><div class="section" title="NULL"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.null"></a>NULL</h3></div></div></div><p>
++ </pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.support.types.null"></a>NULL</h3></div></div></div><p>
+ The only change that might affect people is the type of
+ <code class="constant">NULL</code>: while it is required to be a macro,
+ the definition of that macro is <span class="emphasis"><em>not</em></span> allowed
+@@ -127,4 +126,4 @@
+ Effective C++ CD example</a>
+ </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="dynamic_memory.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part II. 
+ Standard Contents
+-  </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Dynamic Memory</td></tr></table></div></body></html>
++  </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Dynamic Memory</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch18s02.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch18s02.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch18s02.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s03.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="bk01pt03ch18s03.html">Next</a></td></tr></table><hr /></div><div class="section" title="Semantics"><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,
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s03.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="bk01pt03ch18s03.html">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,
+ i.e. user-defined functors must not throw exceptions.
+ Also, the order of execution is not guaranteed for some functions, of course.
+ Therefore, user-defined functors should not have any concurrent side effects.
+@@ -8,4 +7,4 @@
+ OpenMP parallel regions in concurrent threads,
+ it is not possible to call parallel STL algorithm in
+ concurrent threads, either.
+-It might work with other compilers, though.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode.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="bk01pt03ch18s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 18. Parallel Mode </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
++It might work with other compilers, though.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="parallel_mode.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="bk01pt03ch18s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 18. Parallel Mode </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Using</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch19s02.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s02.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s02.html (.../branches/gcc-4_7-branch)
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s03.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="bk01pt03ch19s03.html">Next</a></td></tr></table><hr /></div><div class="section" title="Design"><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>
+-</p><div class="table"><a id="idp16944832"></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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s03.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="bk01pt03ch19s03.html">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>
++</p><div class="table"><a id="idm269985263760"></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
+ only included from <code class="code">impl/profiler.h</code>, which is the only
+ file included from the public headers.</td></tr></tbody></table></div></div><br class="table-break" /><p>
+-</p><div class="section" title="Wrapper Model"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.wrapper"></a>Wrapper Model</h3></div></div></div><p>
++</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>
+ In order to get our instrumented library version included instead of the
+ release one,
+ we use the same wrapper model as the debug mode.
+@@ -25,7 +24,7 @@
+ Currently, mixing the profile mode with debug and parallel extensions is
+ not allowed. Mixing them at compile time will result in preprocessor errors.
+ Mixing them at link time is undefined.
+- </p></div><div class="section" title="Instrumentation"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.instrumentation"></a>Instrumentation</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.instrumentation"></a>Instrumentation</h3></div></div></div><p>
+ Instead of instrumenting every public entry and exit point,
+ we chose to add instrumentation on demand, as needed
+ by individual diagnostics.
+@@ -44,7 +43,7 @@
+ </p><p>
+ All the instrumentation on/off compile time switches live in
+ <code class="code">include/profile/profiler.h</code>.
+- </p></div><div class="section" title="Run Time Behavior"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.rtlib"></a>Run Time Behavior</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.rtlib"></a>Run Time Behavior</h3></div></div></div><p>
+ For practical reasons, the instrumentation library processes the trace
+ partially
+ rather than dumping it to disk in raw form. Each event is processed when
+@@ -63,7 +62,7 @@
+ For details, see
+ <a class="link" href="http://dx.doi.org/10.1109/CGO.2009.36" target="_top">paper presented at
+ CGO 2009</a>.
+- </p></div><div class="section" title="Analysis and Diagnostics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.analysis"></a>Analysis and Diagnostics</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.analysis"></a>Analysis and Diagnostics</h3></div></div></div><p>
+ Final analysis takes place offline, and it is based entirely on the
+ generated trace and debugging info in the application binary.
+ See section Diagnostics for a list of analysis types that we plan to support.
+@@ -70,11 +69,11 @@
+ </p><p>
+ The input to the analysis is a table indexed by profile type and call stack.
+ The data type for each entry depends on the profile type.
+- </p></div><div class="section" title="Cost Model"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.cost-model"></a>Cost Model</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.cost-model"></a>Cost Model</h3></div></div></div><p>
+ While it is likely that cost models become complex as we get into
+ more sophisticated analysis, we will try to follow a simple set of rules
+ at the beginning.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Relative benefit estimation:</em></span>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Relative benefit estimation:</em></span>
+ The idea is to estimate or measure the cost of all operations
+ in the original scenario versus the scenario we advise to switch to.
+ For instance, when advising to change a vector to a list, an occurrence
+@@ -98,7 +97,7 @@
+ For instance, when considering switching from <code class="code">set</code> to
+ <code class="code">unordered_set</code>, if we detect use of operator <code class="code">++</code>,
+ we will simply not issue the advice, since this could signal that the use
+- care require a sorted container.</p></li></ul></div></div><div class="section" title="Reports"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.reports"></a>Reports</h3></div></div></div><p>
++ care require a sorted container.</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.reports"></a>Reports</h3></div></div></div><p>
+ There are two types of reports. First, if we recognize a pattern for which
+ we have a substitute that is likely to give better performance, we print
+ the advice and estimated performance gain. The advice is usually associated
+@@ -110,7 +109,7 @@
+ which have the worst data locality in actual traversals.
+ Although this does not offer a solution,
+ it helps the user focus on the key problems and ignore the uninteresting ones.
+- </p></div><div class="section" title="Testing"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.testing"></a>Testing</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.design.testing"></a>Testing</h3></div></div></div><p>
+ First, we want to make sure we preserve the behavior of the release mode.
+ You can just type <code class="code">"make check-profile"</code>, which
+ builds and runs the whole test suite in profile mode.
+@@ -119,4 +118,4 @@
+ We created a <code class="code">profile</code> directory in the test suite.
+ Each diagnostic must come with at least two tests, one for false positives
+ and one for false negatives.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 19. Profile Mode </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Extensions for Custom Containers</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="profile_mode.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 19. Profile Mode </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Extensions for Custom Containers</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/license.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/license.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/license.html (.../branches/gcc-4_7-branch)
+@@ -1,12 +1,11 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="License"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.status.license"></a>License</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ There are two licenses affecting GNU libstdc++: one for the code,
+ and one for the documentation.
+ </p><p>
+ There is a license section in the FAQ regarding common <a class="link" href="../faq.html#faq.license">questions</a>. If you have more
+ questions, ask the FSF or the <a class="link" href="http://gcc.gnu.org/lists.html" target="_top">gcc mailing list</a>.
+- </p><div class="section" title="The Code: GPL"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.license.gpl"></a>The Code: GPL</h3></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.license.gpl"></a>The Code: GPL</h3></div></div></div><p>
+ The source code is distributed under the <a class="link" href="appendix_gpl.html" title="Appendix D.  GNU General Public License version 3">GNU General Public License version 3</a>,
+ with the addition under section 7 of an exception described in
+ the <span class="quote">“<span class="quote">GCC Runtime Library Exception, version 3.1</span>”</span>
+@@ -87,7 +86,7 @@
+     </p></div><p>
+ Hopefully that text is self-explanatory. If it isn't, you need to speak
+ to your lawyer, or the Free Software Foundation.
+- </p></div><div class="section" title="The Documentation: GPL, FDL"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.license.fdl"></a>The Documentation: GPL, FDL</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.license.fdl"></a>The Documentation: GPL, FDL</h3></div></div></div><p>
+ The documentation shipped with the library and made available over
+ the web, excluding the pages generated from source comments, are
+ copyrighted by the Free Software Foundation, and placed under the
+@@ -102,4 +101,4 @@
+ </p><p>
+ If you plan on making copies of the documentation, please let us know.
+ We can probably offer suggestions.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="status.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="status.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bugs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 1. Status </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Bugs</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="status.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="status.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bugs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 1. Status </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Bugs</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch19s06.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s06.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s06.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s05.html" title="Implementation Issues" /><link rel="next" href="bk01pt03ch19s07.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="bk01pt03ch19s05.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s07.html">Next</a></td></tr></table><hr /></div><div class="section" title="Developer Information"><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" title="Big Picture"><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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s05.html" title="Implementation Issues" /><link rel="next" href="bk01pt03ch19s07.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="bk01pt03ch19s05.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s07.html">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
+ <code class="code">-D_GLIBCXX_PROFILE</code> through preprocessor directives in
+ <code class="code">include/std/*</code>.
+ </p><p>Instrumented implementations are provided in
+@@ -14,7 +13,7 @@
+ must ensure (1) that the call is guarded against reentrance and
+ (2) that the call can be turned off at compile time using a
+ <code class="code">-D_GLIBCXX_PROFILE_...</code> compiler option.
+- </p></div><div class="section" title="How To Add A Diagnostic"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.howto"></a>How To Add A Diagnostic</h3></div></div></div><p>Let's say the diagnostic name is "magic".
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.developer.howto"></a>How To Add A Diagnostic</h3></div></div></div><p>Let's say the diagnostic name is "magic".
+ </p><p>If you need to instrument a header not already under
+ <code class="code">include/profile/*</code>, first edit the corresponding header
+ under <code class="code">include/std/</code> and add a preprocessor directive such
+@@ -42,7 +41,7 @@
+ All names of methods in namespace <code class="code">__gnu_profile</code> called from
+ <code class="code">profiler.h</code> must start with <code class="code">__trace_magic_</code>.
+ </p><p>Add the implementation of the diagnostic.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Create new file <code class="code">include/profile/impl/profiler_magic.h</code>.
+ </p></li><li class="listitem"><p>
+ Define class <code class="code">__magic_info: public __object_info_base</code>.
+@@ -65,4 +64,4 @@
+ <code class="code">include/profile/impl/profiler_trace.h</code>. Use
+ <code class="code">__trace_vector_to_list</code> as an example.
+ </p><p>Add documentation in file <code class="code">doc/xml/manual/profile_mode.xml</code>.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s07.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation Issues </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Diagnostics</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s05.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s07.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation Issues </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Diagnostics</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/numerics.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/numerics.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/numerics.html (.../branches/gcc-4_7-branch)
+@@ -1,15 +1,14 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
+ Numerics
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 12.  Numerics"><div class="titlepage"><div><div><h2 class="title"><a id="std.numerics"></a>Chapter 12. 
++ </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. 
+ Numerics
+- <a id="idp16179040" class="indexterm"></a>
+-</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" title="Complex"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.numerics.complex"></a>Complex</h2></div></div></div><p>
+- </p><div class="section" title="complex Processing"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.complex.processing"></a>complex Processing</h3></div></div></div><p>
++ <a id="idm269986025840" class="indexterm"></a>
++</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>
++ </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>
+ </p><p>Using <code class="code">complex&lt;&gt;</code> becomes even more comple- er, sorry,
+ <span class="emphasis"><em>complicated</em></span>, with the not-quite-gratuitously-incompatible
+ addition of complex types to the C language. David Tribble has
+@@ -27,4 +26,4 @@
+ </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="algorithms.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="generalized_numeric_operations.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 11. 
+ Algorithms
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Generalized Operations</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Generalized Operations</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/using_exceptions.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/using_exceptions.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/using_exceptions.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; exception&#10; , &#10; error&#10; , &#10; exception neutrality&#10; , &#10; exception safety&#10; , &#10; exception propagation&#10; , &#10; -fno-exceptions&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Exceptions"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.using.exceptions"></a>Exceptions</h2></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; exception&#10; , &#10; error&#10; , &#10; exception neutrality&#10; , &#10; exception safety&#10; , &#10; exception propagation&#10; , &#10; -fno-exceptions&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ The C++ language provides language support for stack unwinding
+ with <code class="literal">try</code> and <code class="literal">catch</code> blocks and
+ the <code class="literal">throw</code> keyword.
+@@ -12,7 +11,7 @@
+ </p><p>
+ Two general topics of discussion follow:
+ exception neutrality and exception safety.
+-</p><div class="section" title="Exception Safety"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.safety"></a>Exception Safety</h3></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.safety"></a>Exception Safety</h3></div></div></div><p>
+ What is exception-safe code?
+ </p><p>
+ Will define this as reasonable and well-defined behavior by classes
+@@ -27,7 +26,7 @@
+ Using the layered approach from Abrahams, can classify library
+ components as providing set levels of safety. These will be called
+ exception guarantees, and can be divided into three categories.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ One. Don't throw.
+ </p><p>
+ As specified in 23.2.1 general container requirements. Applicable
+@@ -51,7 +50,7 @@
+ Member functions <code class="function">insert</code> of a single
+ element, <code class="function">push_back</code>, <code class="function">push_front</code>,
+ and <code class="function">rehash</code>.
+- </p></li></ul></div></div><div class="section" title="Exception Neutrality"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.propagating"></a>Exception Neutrality</h3></div></div></div><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.propagating"></a>Exception Neutrality</h3></div></div></div><p>
+ Simply put, once thrown an exception object should continue in
+ flight unless handled explicitly. In practice, this means
+ propagating exceptions should not be swallowed in
+@@ -75,7 +74,7 @@
+ Unfortunately, this tends to be more of a guideline than a strict
+ rule as applied to the standard library. As such, the following is
+ a list of known problem areas where exceptions are not propagated.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Input/Output
+ </p><p>
+ The destructor <code class="function">ios_base::Init::~Init()</code>
+@@ -101,7 +100,7 @@
+ The constructors of <code class="classname">thread</code> that take a
+ callable function argument swallow all exceptions resulting from
+ executing the function argument.
+- </p></li></ul></div></div><div class="section" title="Doing without"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.no"></a>Doing without</h3></div></div></div><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.no"></a>Doing without</h3></div></div></div><p>
+ C++ is a language that strives to be as efficient as is possible
+ in delivering features. As such, considerable care is used by both
+ language implementer and designers to make sure unused features
+@@ -220,7 +219,7 @@
+ substitution of the C language keyword
+ <code class="literal">const</code> with the uglified
+ doppelganger <code class="literal">__const</code>.
+-</p></div><div class="section" title="Compatibility"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.compat"></a>Compatibility</h3></div></div></div><div class="section" title="With C"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.c"></a>With <code class="literal">C</code></h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="intro.using.exception.compat"></a>Compatibility</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.c"></a>With <code class="literal">C</code></h4></div></div></div><p>
+ C language code that is expecting to interoperate with C++ should be
+ compiled with <code class="literal">-fexceptions</code>. This will make
+ debugging a C language function called as part of C++-induced stack
+@@ -235,7 +234,7 @@
+ getting these details right. For GNU systems, all appropriate parts
+ of the GNU C library are already compiled
+ with <code class="literal">-fexceptions</code>.
+-</p></div><div class="section" title="With POSIX thread cancellation"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.posix"></a>With <code class="literal">POSIX</code> thread cancellation</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="using.exception.compat.posix"></a>With <code class="literal">POSIX</code> thread cancellation</h4></div></div></div><p>
+ GNU systems re-use some of the exception handling mechanisms to
+ track control flow for <code class="literal">POSIX</code> thread cancellation.
+ </p><p>
+@@ -266,7 +265,7 @@
+ }
+ catch(...)
+ { this-&gt;_M_setstate(ios_base::badbit); }
+-</pre></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="using.exceptions.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry" title="System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)"><a id="idp13615600"></a><p><span class="title"><em>
++</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="idm269988575088"></a><p><span class="title"><em>
+ <a class="link" href="http://www.opengroup.org/austin" target="_top">
+ System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ </a>
+@@ -275,40 +274,40 @@
+ . </span><span class="copyright">Copyright © 2008
+ The Open Group/The Institute of Electrical and Electronics
+ Engineers, Inc.
+- . </span></p></div><div class="biblioentry" title="Error and Exception Handling"><a id="idp13619296"></a><p><span class="title"><em>
++ . </span></p></div><div class="biblioentry"><a id="idm269988571392"></a><p><span class="title"><em>
+ <a class="link" href="http://www.boost.org/community/error_handling.html" target="_top">
+ Error and Exception Handling
+ </a>
+ </em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams </span>. </span><span class="publisher"><span class="publishername">
+ Boost
+- . </span></span></p></div><div class="biblioentry" title="Exception-Safety in Generic Components"><a id="idp13622992"></a><p><span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="idm269988567696"></a><p><span class="title"><em>
+ <a class="link" href="http://www.boost.org/community/exception_safety.html" target="_top">
+ Exception-Safety in Generic Components
+ </a>
+ </em>. </span><span class="author"><span class="firstname">David</span> <span class="surname">Abrahams</span>. </span><span class="publisher"><span class="publishername">
+ Boost
+- . </span></span></p></div><div class="biblioentry" title="Standard Library Exception Policy"><a id="idp13626704"></a><p><span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="idm269988563984"></a><p><span class="title"><em>
+ <a class="link" href="www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf" target="_top">
+ Standard Library Exception Policy
+ </a>
+ </em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
+ WG21 N1077
+- . </span></span></p></div><div class="biblioentry" title="ia64 c++ abi exception handling"><a id="idp13630416"></a><p><span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="idm269988560272"></a><p><span class="title"><em>
+ <a class="link" href="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html" target="_top">
+ ia64 c++ abi exception handling
+ </a>
+ </em>. </span><span class="author"><span class="firstname">Richard</span> <span class="surname">Henderson</span>. </span><span class="publisher"><span class="publishername">
+ GNU
+- . </span></span></p></div><div class="biblioentry" title="Appendix E: Standard-Library Exception Safety"><a id="idp13634112"></a><p><span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="idm269988556576"></a><p><span class="title"><em>
+ <a class="link" href="http://www.research.att.com/~bs/3rd_safe.pdf" target="_top">
+ Appendix E: Standard-Library Exception Safety
+ </a>
+- </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span></p></div><div class="biblioentry"><a id="idp13636928"></a><p><span class="citetitle"><em class="citetitle">
++ </em>. </span><span class="author"><span class="firstname">Bjarne</span> <span class="surname">Stroustrup</span>. </span></p></div><div class="biblioentry"><a id="idm269988553760"></a><p><span class="citetitle"><em class="citetitle">
+ Exceptional C++
+ </em>. </span><span class="pagenums">
+ Exception-Safety Issues and Techniques
+- . </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry" title="GCC Bug 25191: exception_defines.h #defines try/catch"><a id="idp13639312"></a><p><span class="title"><em>
++ . </span><span class="author"><span class="firstname">Herb</span> <span class="surname">Sutter</span>. </span></p></div><div class="biblioentry"><a id="idm269988551376"></a><p><span class="title"><em>
+ <a class="link" href="http://gcc.gnu.org/PR25191" target="_top">
+ GCC Bug 25191: exception_defines.h #defines try/catch
+ </a>
+- </em>. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Debugging Support</td></tr></table></div></body></html>
++ </em>. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Debugging Support</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/policy_based_data_structures_test.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Testing"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="pbds.test"></a>Testing</h2></div></div></div><div class="section" title="Regression"><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.
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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.
+ For a given container type in this library, the test creates
+ an object of the container type and an object of the
+ corresponding standard type (e.g., <code class="classname">std::set</code>). It
+@@ -23,9 +22,9 @@
+ configured to use this allocator.</p><p>For granularity, the test is split into the
+ several sources, each checking only some containers.</p><p>For more details, consult the files in
+ <code class="filename">testsuite/ext/pb_ds/regression</code>.
+- </p></div><div class="section" title="Performance"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.test.performance"></a>Performance</h3></div></div></div><div class="section" title="Hash-Based"><div class="titlepage"><div><div><h4 class="title"><a id="performance.hash"></a>Hash-Based</h4></div></div></div><p></p><div class="section" title="Text find"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.text_find"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.test.performance"></a>Performance</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="performance.hash"></a>Hash-Based</h4></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.text_find"></a>
+ Text <code class="function">find</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="hash.text_find.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.text_find.info"></a>
+ Description
+ </h6></div></div></div><p>
+ This test inserts a number of values with keys from an
+@@ -41,7 +40,7 @@
+ <code class="filename">filethirty_years_among_the_dead_preproc.txt</code>
+ </p><p>The test checks the effect of different range-hashing
+ functions, trigger policies, and cache-hashing policies.
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="hash.text_find.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.text_find.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for the native
+ and collision-chaining hash types the the function
+@@ -144,7 +143,7 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="hash.text_find.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.text_find.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this setting, the range-hashing scheme affects performance
+ more than other policies. As the results show, containers using
+@@ -159,9 +158,9 @@
+ library's implementation. (Unfortunately, it was not possible to run
+ the tests with <code class="classname">std::tr1::unordered_map</code> 's
+ <code class="classname">cache_hash_code = true</code> , as it appeared to
+- malfuntion.)</p></div></div><div class="section" title="Integer find"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.int_find"></a>
++ malfuntion.)</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.int_find"></a>
+ Integer <code class="function">find</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_find.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_find.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with uniform
+ integer keys into a container, then performs a series of finds
+@@ -172,7 +171,7 @@
+ <code class="filename">performance/ext/pb_ds/random_int_find_timing.cc</code>
+ </p><p>The test checks the effect of different underlying
+ hash-tables,
+- range-hashing functions, and trigger policies.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_find.results"></a>
++ range-hashing functions, and trigger policies.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_find.results"></a>
+ Results
+ </h6></div></div></div><p>
+ There are two sets of results for this type, one for
+@@ -345,7 +344,7 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_find.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_find.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this setting, the choice of underlying hash-table affects
+ performance most, then the range-hashing scheme and, only finally,
+@@ -361,9 +360,9 @@
+ above graphics should be noted that
+ <code class="classname">std::tr1::unordered_map</code> are hard-wired
+ currently to mod-based schemes.
+- </p></div></div><div class="section" title="Integer Subscript find"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.int_subscript_find"></a>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.int_subscript_find"></a>
+ Integer Subscript <code class="function">find</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_find.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_find.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with uniform
+ integer keys into a container, then performs a series of finds
+@@ -373,7 +372,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/random_int_subscript_find_timing.cc</code>
+ </p><p>The test checks the effect of different underlying
+- hash-tables, range-hashing functions, and trigger policies.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_find.results"></a>
++ hash-tables, range-hashing functions, and trigger policies.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_find.results"></a>
+ Results
+ </h6></div></div></div><p>
+ There are two sets of results for this type, one for
+@@ -545,12 +544,12 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_find.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_find.observations"></a>
+ Observations
+ </h6></div></div></div><p>This test shows similar results to Hash-Based
+- Integer <code class="classname">find</code> Find Timing test.</p></div></div><div class="section" title="Integer Subscript insert"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.int_subscript_insert"></a>
++ Integer <code class="classname">find</code> Find Timing test.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.int_subscript_insert"></a>
+ Integer Subscript <code class="function">insert</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_insert.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_insert.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with uniform i.i.d.
+ integer keys into a container, using
+@@ -560,7 +559,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/random_int_subscript_insert_timing.cc</code>
+ </p><p>The test checks the effect of different underlying
+- hash-tables.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_insert.results"></a>
++ hash-tables.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_insert.results"></a>
+ Results
+ </h6></div></div></div><p>
+ There are two sets of results for this type, one for
+@@ -732,7 +731,7 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_insert.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.int_subscript_insert.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this setting, as in Hash-Based Text
+ <code class="function">find</code> Find Timing test and Hash-Based
+@@ -761,9 +760,9 @@
+ <code class="function">find</code> Find Timing Test and Hash-Based
+ Integer <code class="function">find</code> Find Timing Test.
+ Unsurprisingly, however, containers with lower α<sub>max</sub> perform worse in this case,
+- since more re-hashes are performed.</p></div></div><div class="section" title="Integer find with Skewed-Distribution"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.zlob_int_find"></a>
++ since more re-hashes are performed.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.zlob_int_find"></a>
+ Integer <code class="function">find</code> with Skewed-Distribution
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="hash.zlob_int_find.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.zlob_int_find.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with a markedly
+ non-uniform integer keys into a container, then performs
+@@ -774,7 +773,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/hash_zlob_random_int_find_timing.cc</code>
+ </p><p>The test checks the effect of different range-hashing
+- functions and trigger policies.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="hash.zlob_int_find.results"></a>
++ functions and trigger policies.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.zlob_int_find.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for the native, collision-chaining, and general-probing hash types.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_hash_zlob_int_find.png" align="middle" /></div></div><p>
+@@ -857,7 +856,7 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="hash.zlob_int_find.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.zlob_int_find.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this setting, the distribution of keys is so skewed that
+ the underlying hash-table type affects performance marginally.
+@@ -884,9 +883,9 @@
+ performance is bad, a χ<sup>2</sup> test can be used
+ to check how to transform it into a more uniform
+ distribution.</p><p>For this reason, this library's default range-hashing
+- function is mask-based.</p></div></div><div class="section" title="Erase Memory Use"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.erase_mem"></a>
++ function is mask-based.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.hash.erase_mem"></a>
+ Erase Memory Use
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="hash.erase_mem.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.erase_mem.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of uniform integer keys
+ into a container, then erases all keys except one. It measures
+@@ -894,7 +893,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/hash_random_int_erase_mem_usage.cc</code>
+ </p><p>The test checks how containers adjust internally as their
+- logical size decreases.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="hash.erase_mem.results"></a>
++ logical size decreases.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.erase_mem.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for the native, collision-chaining, and general-probing hash types.
+ </p><div class="informalfigure"><div class="mediaobject" align="center"><img src="../images/pbds_hash_int_erase_mem.png" align="middle" /></div></div><p>
+@@ -977,7 +976,7 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="hash.erase_mem.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="hash.erase_mem.observations"></a>
+ Observations
+ </h6></div></div></div><p>The standard's hash-based containers act very differently than trees in
+ this respect. When erasing numerous keys from an standard
+@@ -985,9 +984,9 @@
+ depending on whether the container is tree-based or hash-based.
+ This is a fundamental consequence of the standard's interface for
+ associative containers, and it is not due to a specific
+- implementation.</p></div></div></div><div class="section" title="Branch-Based"><div class="titlepage"><div><div><h4 class="title"><a id="performance.branch"></a>Branch-Based</h4></div></div></div><p></p><div class="section" title="Text insert"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.text_insert"></a>
++ implementation.</p></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="performance.branch"></a>Branch-Based</h4></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.text_insert"></a>
+ Text <code class="function">insert</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_insert.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_insert.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an arbitrary
+ text ([ wickland96thirty ]) into a container
+@@ -997,7 +996,7 @@
+ data structures.</p><p>
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/tree_text_insert_timing.cc</code>
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_insert.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_insert.results"></a>
+ Results
+ </h6></div></div></div><p>The three graphics below show the results for the native
+ tree and this library's node-based trees, the native tree and
+@@ -1078,7 +1077,7 @@
+ <code class="classname">Node_update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_insert.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_insert.observations"></a>
+ Observations
+ </h6></div></div></div><p>Observing the first graphic implies that for this setting, a splay tree
+ (<code class="classname">tree</code> with <code class="classname">Tag
+@@ -1098,9 +1097,9 @@
+ encountered, a new "hash-table" is built A large fan-out PATRICIA
+ trie, however, doe does well in look-ups (see Branch-Based
+ Text <code class="function">find</code> Find Timing Test). It may be
+- beneficial in semi-static settings.</p></div></div><div class="section" title="Text find"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.text_find"></a>
++ beneficial in semi-static settings.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.text_find"></a>
+ Text <code class="function">find</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_find.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_find.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([wickland96thirty]) into
+@@ -1111,7 +1110,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/text_find_timing.cc</code>
+ </p><p>The test checks the effect of different underlying
+- data structures.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_find.results"></a>
++ data structures.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_find.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+@@ -1170,7 +1169,7 @@
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_find.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_find.observations"></a>
+ Observations
+ </h6></div></div></div><p>For this setting, a splay tree (<code class="classname">tree</code>
+ with <code class="classname">Tag
+@@ -1203,9 +1202,9 @@
+ by a sub-trie. A large-fan-out PATRICIA trie does not do well on
+ modifications (see Tree-Based and Trie-Based
+ Text Insert Timing Test). Therefore, it is possibly beneficial in
+- semi-static settings.</p></div></div><div class="section" title="Text find with Locality-of-Reference"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.text_lor_find"></a>
++ semi-static settings.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.text_lor_find"></a>
+ Text <code class="function">find</code> with Locality-of-Reference
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_lor_find.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_lor_find.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+@@ -1219,7 +1218,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/tree_text_lor_find_timing.cc</code>
+ </p><p>The test checks the effect of different underlying
+- data structures in a locality-of-reference setting.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_lor_find.results"></a>
++ data structures in a locality-of-reference setting.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_lor_find.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+@@ -1278,7 +1277,7 @@
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_lor_find.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.text_lor_find.observations"></a>
+ Observations
+ </h6></div></div></div><p>For this setting, an ordered-vector tree
+ (<code class="classname">tree</code> with <code class="classname">Tag</code>
+@@ -1288,9 +1287,9 @@
+ tree all share approximately the same performance.</p><p>A splay tree (<code class="classname">tree</code>
+ with <code class="classname">Tag</code> = <code class="classname">splay_tree_tag</code>) does
+ much better, since each (successful) find "bubbles" the
+- corresponding node to the root of the tree.</p></div></div><div class="section" title="split and join"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.split_join"></a>
++ corresponding node to the root of the tree.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.split_join"></a>
+ <code class="function">split</code> and <code class="function">join</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="branch.split_join.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.split_join.info"></a>
+ Description
+ </h6></div></div></div><p>This test a container, inserts into a number of values, splits
+ the container at the median, and joins the two containers. (If the
+@@ -1307,7 +1306,7 @@
+ implication, this test checks the most efficient way to erase a
+ sub-sequence from a tree-like-based container, since this can
+ always be performed by a small sequence of splits and joins.
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="branch.split_join.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.split_join.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+@@ -1366,7 +1365,7 @@
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">null_node_update</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="branch.split_join.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.split_join.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this test, the native red-black trees must be split and
+ joined externally, through a sequence of <code class="function">erase</code> and
+@@ -1393,9 +1392,9 @@
+ via <code class="classname">container_traits</code>).</p><p>It is important to note that <code class="function">split</code> and
+ <code class="function">join</code> are not esoteric methods - they are the most
+ efficient means of erasing a contiguous range of values from a
+- tree based container.</p></div></div><div class="section" title="Order-Statistics"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.order_statistics"></a>
++ tree based container.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.branch.order_statistics"></a>
+ Order-Statistics
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="branch.order_statistics.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.order_statistics.info"></a>
+ Description
+ </h6></div></div></div><p>This test creates a container, inserts random integers into the
+ the container, and then checks the order-statistics of the
+@@ -1410,7 +1409,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/tree_order_statistics_timing.cc</code>
+ </p><p>The test checks the performance difference of policies based
+- on node-invariant as opposed to a external functions.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="branch.order_statistics.results"></a>
++ on node-invariant as opposed to a external functions.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.order_statistics.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native tree type and several other tree types.
+@@ -1445,7 +1444,7 @@
+ <code class="classname">Node_Update</code>
+ </td><td align="left">
+ <code class="classname">tree_order_statistics_node_update</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="branch.order_statistics.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="branch.order_statistics.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this test, the native red-black tree can support
+ order-statistics queries only externally, by performing a
+@@ -1462,9 +1461,9 @@
+ tree (<code class="classname">tree</code>
+ with <code class="classname">Tag =</code> <code class="classname">rb_tree_tag</code> ) is
+ logarithmic in the number of elements. Consequently, the splay
+- tree has worse performance than the red-black tree.</p></div></div></div><div class="section" title="Multimap"><div class="titlepage"><div><div><h4 class="title"><a id="performance.multimap"></a>Multimap</h4></div></div></div><p></p><div class="section" title="Text find with Small Secondary-to-Primary Key Ratios"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_find_small"></a>
++ tree has worse performance than the red-black tree.</p></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="performance.multimap"></a>Multimap</h4></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_find_small"></a>
+ Text <code class="function">find</code> with Small Secondary-to-Primary Key Ratios
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_small.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_small.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+@@ -1483,7 +1482,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/multimap_text_find_timing_small.cc</code>
+ </p><p>The test checks the find-time scalability of different
+- "multimap" designs.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_small.results"></a>
++ "multimap" designs.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_small.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+@@ -1631,12 +1630,12 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_small.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_small.observations"></a>
+ Observations
+ </h6></div></div></div><p>See Observations::Mapping-Semantics
+- Considerations.</p></div></div><div class="section" title="Text find with Large Secondary-to-Primary Key Ratios"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_find_large"></a>
++ Considerations.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_find_large"></a>
+ Text <code class="function">find</code> with Large Secondary-to-Primary Key Ratios
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_large.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_large.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+@@ -1654,7 +1653,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/multimap_text_find_timing_large.cc</code>
+ </p><p>The test checks the find-time scalability of different
+- "multimap" designs.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_large.results"></a>
++ "multimap" designs.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_large.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+@@ -1802,13 +1801,13 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_large.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_find_large.observations"></a>
+ Observations
+ </h6></div></div></div><p>See Observations::Mapping-Semantics
+- Considerations.</p></div></div><div class="section" title="Text insert with Small Secondary-to-Primary Key Ratios"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_small"></a>
++ Considerations.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_small"></a>
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_small.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_small.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+@@ -1828,7 +1827,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/multimap_text_insert_timing_small.cc</code>
+ </p><p>The test checks the insert-time scalability of different
+- "multimap" designs.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_small.results"></a>
++ "multimap" designs.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_small.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+@@ -1976,13 +1975,13 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_small.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_small.observations"></a>
+ Observations
+ </h6></div></div></div><p>See Observations::Mapping-Semantics
+- Considerations.</p></div></div><div class="section" title="Text insert with Small Secondary-to-Primary Key Ratios"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_large"></a>
++ Considerations.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_large"></a>
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_large.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_large.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+@@ -2002,7 +2001,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/multimap_text_insert_timing_large.cc</code>
+ </p><p>The test checks the insert-time scalability of different
+- "multimap" designs.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_large.results"></a>
++ "multimap" designs.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_large.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+@@ -2150,13 +2149,13 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_large.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_large.observations"></a>
+ Observations
+ </h6></div></div></div><p>See Observations::Mapping-Semantics
+- Considerations.</p></div></div><div class="section" title="Text insert with Small Secondary-to-Primary Key Ratios Memory Use"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_mem_small"></a>
++ Considerations.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_mem_small"></a>
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios Memory Use
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_small.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_small.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+@@ -2171,7 +2170,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/multimap_text_insert_mem_usage_small.cc</code>
+ </p><p>The test checks the memory scalability of different
+- "multimap" designs.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_small.results"></a>
++ "multimap" designs.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_small.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+@@ -2319,13 +2318,13 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_small.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_small.observations"></a>
+ Observations
+ </h6></div></div></div><p>See Observations::Mapping-Semantics
+- Considerations.</p></div></div><div class="section" title="Text insert with Small Secondary-to-Primary Key Ratios Memory Use"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_mem_large"></a>
++ Considerations.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.multimap.text_insert_mem_large"></a>
+ Text <code class="function">insert</code> with Small
+ Secondary-to-Primary Key Ratios Memory Use
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_large.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_large.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of pairs into a container. The
+ first item of each pair is a string from an arbitrary text
+@@ -2340,7 +2339,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/multimap_text_insert_mem_usage_large.cc</code>
+ </p><p>The test checks the memory scalability of different
+- "multimap" designs.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_large.results"></a>
++ "multimap" designs.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_large.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic below show the results for "multimaps" which
+ use a tree-based container for primary keys.
+@@ -2488,12 +2487,12 @@
+ </td><td align="left">
+ <code class="classname">hash_load_check_resize_trigger</code> with
+ α<sub>min</sub> = 1/8 and α<sub>max</sub> = 1/2
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_large.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="multimap.text_insert_mem_large.observations"></a>
+ Observations
+ </h6></div></div></div><p>See Observations::Mapping-Semantics
+- Considerations.</p></div></div></div><div class="section" title="Priority Queue"><div class="titlepage"><div><div><h4 class="title"><a id="performance.priority_queue"></a>Priority Queue</h4></div></div></div><div class="section" title="Text push"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_push"></a>
++ Considerations.</p></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="performance.priority_queue"></a>Priority Queue</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_push"></a>
+ Text <code class="function">push</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+@@ -2504,7 +2503,7 @@
+ <code class="filename">performance/ext/pb_ds/priority_queue_text_push_timing.cc</code>
+ </p><p>The test checks the effect of different underlying data
+ structures.
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push.results"></a>
+ Results
+ </h6></div></div></div><p>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+@@ -2609,7 +2608,7 @@
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push.observations"></a>
+ Observations
+ </h6></div></div></div><p>Pairing heaps (<code class="classname">priority_queue</code> with
+ <code class="classname">Tag</code> = <code class="classname">pairing_heap_tag</code>)
+@@ -2627,9 +2626,9 @@
+ operation, and the deque implementation is possibly hampered by
+ its need to manipulate a relatively-complex type (deques
+ support a O(1) <code class="function">push_front</code>, even though it is
+- not used by <code class="classname">std::priority_queue</code>.)</p></div></div><div class="section" title="Text push and pop"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_push_pop"></a>
++ not used by <code class="classname">std::priority_queue</code>.)</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_push_pop"></a>
+ Text <code class="function">push</code> and <code class="function">pop</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push_pop.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push_pop.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+@@ -2640,7 +2639,7 @@
+ <code class="filename">performance/ext/pb_ds/priority_queue_text_push_pop_timing.cc</code>
+ </p><p>The test checks the effect of different underlying data
+ structures.
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push_pop.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push_pop.results"></a>
+ Results
+ </h6></div></div></div><p>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+@@ -2737,7 +2736,7 @@
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push_pop.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_push_pop.observations"></a>
+ Observations
+ </h6></div></div></div><p>These results are very similar to Priority Queue Text
+ <code class="function">push</code> Timing Test. As stated there, pairing heaps
+@@ -2757,9 +2756,9 @@
+ of <code class="function">push</code> operations, pairing heaps are better
+ in this case. See Priority Queue Random
+ Integer <code class="function">push</code> and <code class="function">pop</code>
+- Timing Test for a case which is different.</p></div></div><div class="section" title="Integer push"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.int_push"></a>
++ Timing Test for a case which is different.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.int_push"></a>
+ Integer <code class="function">push</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with integer keys
+ into a container using <code class="function">push</code>. It
+@@ -2769,7 +2768,7 @@
+ <code class="filename">performance/ext/pb_ds/priority_queue_random_int_push_timing.cc</code>
+ </p><p>The test checks the effect of different underlying data
+ structures.
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push.results"></a>
+ Results
+ </h6></div></div></div><p>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+@@ -2866,7 +2865,7 @@
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">binary_heap_tag</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push.observations"></a>
+ Observations
+ </h6></div></div></div><p>Binary heaps are the most suited for sequences of
+ <code class="function">push</code> and <code class="function">pop</code> operations of primitive types
+@@ -2875,9 +2874,9 @@
+ such types in arrays, they outperform even pairing heaps. (See
+ Priority
+ Queue Text <code class="function">push</code> Timing Test for the case of
+- non-primitive types.)</p></div></div><div class="section" title="Integer push"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.int_push_pop"></a>
++ non-primitive types.)</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.int_push_pop"></a>
+ Integer <code class="function">push</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push_pop.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push_pop.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with integer keys
+ into a container using <code class="function">push</code> , then removes them
+@@ -2888,7 +2887,7 @@
+ <code class="filename">performance/ext/pb_ds/priority_queue_random_int_push_pop_timing.cc</code>
+ </p><p>The test checks the effect of different underlying data
+ structures.
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push_pop.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push_pop.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+@@ -2953,7 +2952,7 @@
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push_pop.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.int_push_pop.observations"></a>
+ Observations
+ </h6></div></div></div><p>Binary heaps are the most suited for sequences of
+ <code class="function">push</code> and <code class="function">pop</code> operations of primitive types
+@@ -2975,9 +2974,9 @@
+ the number of
+ <code class="function">pop</code> operations is at most that of <code class="function">push</code>
+ operations, the test here is the "best" for the standard's
+- priority queue.</p></li></ol></div></div></div><div class="section" title="Text pop Memory Use"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_pop"></a>
++ priority queue.</p></li></ol></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_pop"></a>
+ Text <code class="function">pop</code> Memory Use
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_pop.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_pop.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+@@ -2988,7 +2987,7 @@
+ <code class="filename">performance/ext/pb_ds/priority_queue_text_pop_mem_usage.cc</code>
+ </p><p>The test checks the effect of different underlying data
+ structures.
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_pop.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_pop.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+@@ -3053,7 +3052,7 @@
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_pop.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_pop.observations"></a>
+ Observations
+ </h6></div></div></div><p>The priority queue implementations (excluding the standard's) use
+ memory proportionally to the number of values they hold:
+@@ -3066,9 +3065,9 @@
+ impede performance compared to the standard's priority
+ queues.</p><p>See Hash-Based Erase
+ Memory Use Test for a similar phenomenon regarding priority
+- queues.</p></div></div><div class="section" title="Text join"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_join"></a>
++ queues.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_join"></a>
+ Text <code class="function">join</code>
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_join.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_join.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+@@ -3081,7 +3080,7 @@
+ <code class="filename">performance/ext/pb_ds/priority_queue_text_join_timing.cc</code>
+ </p><p>The test checks the effect of different underlying data
+ structures.
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_join.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_join.results"></a>
+ Results
+ </h6></div></div></div><p>The graphic immediately below shows the results for the
+ native priority_queue type instantiated with different underlying
+@@ -3146,7 +3145,7 @@
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_join.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_join.observations"></a>
+ Observations
+ </h6></div></div></div><p>In this test the node-based heaps perform <code class="function">join</code> in
+ either logarithmic or constant time. The binary heap requires
+@@ -3158,9 +3157,9 @@
+ and <code class="function">size()</code> (since they are enough to expose
+ the underlying array), but this is impossible for
+ a <code class="classname">std::deque</code>-based standard priority queue.
+- Without heapify, the cost is super-linear.</p></div></div><div class="section" title="Text modify Up"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_modify_up"></a>
++ Without heapify, the cost is super-linear.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_modify_up"></a>
+ Text <code class="function">modify</code> Up
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_up.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_up.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+@@ -3178,7 +3177,7 @@
+ arbitrary value larger (in the sense of the priority queue's
+ comparison functor) corresponds to decrease-key in standard graph
+ algorithms [clrs2001].
+- </p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_up.results"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_up.results"></a>
+ Results
+ </h6></div></div></div><p>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+@@ -3267,7 +3266,7 @@
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_up.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_up.observations"></a>
+ Observations
+ </h6></div></div></div><p>As noted above, increasing an arbitrary value (in the sense of
+ the priority queue's comparison functor) is very common in
+@@ -3295,9 +3294,9 @@
+ finding the appropriate value, then use the range-type iterator
+ for the <code class="function">modify</code> operation.</p><p>The explanation for the standard's priority queues' performance
+ is similar to that in Priority Queue Text
+- <code class="function">join</code> Timing Test.</p></div></div><div class="section" title="Text modify Down"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_modify_down"></a>
++ <code class="function">join</code> Timing Test.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="performance.priority_queue.text_modify_down"></a>
+ Text <code class="function">modify</code> Down
+- </h5></div></div></div><p></p><div class="section" title="Description"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_down.info"></a>
++ </h5></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_down.info"></a>
+ Description
+ </h6></div></div></div><p>This test inserts a number of values with keys from an
+ arbitrary text ([ wickland96thirty ]) into
+@@ -3311,7 +3310,7 @@
+ It uses the test file:
+ <code class="filename">performance/ext/pb_ds/priority_queue_text_modify_down_timing.cc</code>
+ </p><p>The main purpose of this test is to contrast Priority Queue
+- Text <code class="classname">modify</code> Up Timing Test.</p></div><div class="section" title="Results"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_down.results"></a>
++ Text <code class="classname">modify</code> Up Timing Test.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_down.results"></a>
+ Results
+ </h6></div></div></div><p>The two graphics below show the results for the native
+ priority_queues and this library's priority_queues.
+@@ -3400,7 +3399,7 @@
+ <code class="classname">Tag</code>
+ </td><td align="left">
+ <code class="classname">pairing_heap_tag</code>
+- </td></tr></tbody></table></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_down.observations"></a>
++ </td></tr></tbody></table></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="priority_queue.text_modify_down.observations"></a>
+ Observations
+ </h6></div></div></div><p>Most points in these results are similar to Priority Queue
+ Text <code class="function">modify</code> Up Timing Test.</p><p>It is interesting to note, however, that as opposed to that
+@@ -3415,7 +3414,7 @@
+ (in the sense of the priority queue's comparison functor), and
+ so Priority Queue
+ Text <code class="classname">modify</code> Up Timing Test - is more interesting
+- than this test.</p></div></div></div><div class="section" title="Observations"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.test.performance.observations"></a>Observations</h4></div></div></div><div class="section" title="Associative"><div class="titlepage"><div><div><h5 class="title"><a id="observations.associative"></a>Associative</h5></div></div></div><div class="section" title="Underlying Data-Structure Families"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.underlying"></a>
++ than this test.</p></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.test.performance.observations"></a>Observations</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="observations.associative"></a>Associative</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.underlying"></a>
+ Underlying Data-Structure Families
+ </h6></div></div></div><p>In general, hash-based containers have better timing performance
+ than containers based on different underlying-data structures. The
+@@ -3424,7 +3423,7 @@
+ order-preservation, or the ability to utilize node invariants. If
+ memory-use is the major factor, an ordered-vector tree gives
+ optimal results (albeit with high modificiation costs), and a
+- list-based container gives reasonable results.</p></div><div class="section" title="Hash-Based Containers"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.hash"></a>
++ list-based container gives reasonable results.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.hash"></a>
+ Hash-Based Containers
+ </h6></div></div></div><p>Hash-based containers are typically either collision
+ chaining or probing. Collision-chaining
+@@ -3439,7 +3438,7 @@
+ useful also in multithreaded applications where each thread
+ manipulates a hash-based container: in the standard, allocators have
+ class-wise semantics (see [meyers96more] - Item 10); a
+- probing container might incur less contention in this case.</p></div><div class="section" title="Hash Policies"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.hash_policies"></a>
++ probing container might incur less contention in this case.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.hash_policies"></a>
+ Hash Policies
+ </h6></div></div></div><p>In hash-based containers, the range-hashing scheme seems to
+ affect performance more than other considerations. In most
+@@ -3458,7 +3457,7 @@
+ function.</p><p>An orthogonal consideration is the trigger policy. This
+ presents difficult tradeoffs. E.g., different load
+ factors in a load-check trigger policy yield a
+- space/amortized-cost tradeoff.</p></div><div class="section" title="Branch-Based Containers"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.branch"></a>
++ space/amortized-cost tradeoff.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.branch"></a>
+ Branch-Based Containers
+ </h6></div></div></div><p>In general, there are several families of tree-based
+ underlying data structures: balanced node-based trees
+@@ -3505,7 +3504,7 @@
+ maintaining such trees is higher than that of balanced trees.
+ Moderate-fan-out trees might be useful for sequences where each
+ element has a limited number of choices, e.g., DNA
+- strings.</p></div><div class="section" title="Mapping-Semantics"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.mapping_semantics"></a>
++ strings.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="observations.associative.mapping_semantics"></a>
+ Mapping-Semantics
+ </h6></div></div></div><p>Different mapping semantics were discussed in the introduction and design sections.Here
+ the focus will be on the case where a keys can be composed into
+@@ -3585,7 +3584,7 @@
+ but with very high constants; using 1 with a tree-based
+ container, the cost is Θ(nlog(mn)). Using 2, 3,
+ and 4, the expected cost is Θ(n), but typically
+- with far lower costs than 1. 5 is similar to 1.</p></div></div><div class="section" title="Priority_Queue"><div class="titlepage"><div><div><h5 class="title"><a id="observations.priority_queue"></a>Priority_Queue</h5></div></div></div><div class="section" title="Complexity"><div class="titlepage"><div><div><h6 class="title"><a id="observations.priority_queue.complexity"></a>Complexity</h6></div></div></div><p>The following table shows the complexities of the different
++ with far lower costs than 1. 5 is similar to 1.</p></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="observations.priority_queue"></a>Priority_Queue</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="observations.priority_queue.complexity"></a>Complexity</h6></div></div></div><p>The following table shows the complexities of the different
+ underlying data structures in terms of orders of growth. It is
+ interesting to note that this table implies something about the
+ constants of the operations as well (see Amortized <code class="function">push</code>
+@@ -3709,7 +3708,7 @@
+ of the priority queue's comparison functor), then the amortized
+ time is O(1), but if II) it decreases it, then the
+ amortized time is the same as the worst case time. Note that
+- for most algorithms, I) is important and II) is not.</p></div><div class="section" title="Amortized push and pop operations"><div class="titlepage"><div><div><h6 class="title"><a id="observations.priority_queue.amortized_ops"></a>
++ for most algorithms, I) is important and II) is not.</p></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="observations.priority_queue.amortized_ops"></a>
+ Amortized <code class="function">push</code>
+ and <code class="function">pop</code> operations
+ </h6></div></div></div><p>In many cases, a priority queue is needed primarily for
+@@ -3739,7 +3738,7 @@
+ Queue Random Integer <code class="function">push</code> Timing Test and
+ Priority
+ Queue Random Integer <code class="function">push</code> and <code class="function">pop</code> Timing
+- Test.</p></li></ol></div></div><div class="section" title="Graph Algorithms"><div class="titlepage"><div><div><h6 class="title"><a id="observations.priority_queue.graphs"></a>
++ Test.</p></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="observations.priority_queue.graphs"></a>
+ Graph Algorithms
+ </h6></div></div></div><p>In some graph algorithms, a decrease-key operation is
+ required [clrs2001];
+@@ -3759,4 +3758,4 @@
+ as well. It is difficult to find an a-priori characterization of
+ graphs in which the actual number of <code class="function">modify</code>
+ operations will dwarf the number of <code class="function">push</code> and
+- <code class="function">pop</code> operations.</p></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures_design.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures_ack.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Acknowledgments</td></tr></table></div></body></html>
++ <code class="function">pop</code> operations.</p></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures_design.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures_ack.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Acknowledgments</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/abi.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/abi.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/abi.html (.../branches/gcc-4_7-branch)
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; ABI&#10; , &#10; version&#10; , &#10; dynamic&#10; , &#10; shared&#10; , &#10; compatibility&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; ABI&#10; , &#10; version&#10; , &#10; dynamic&#10; , &#10; shared&#10; , &#10; compatibility&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Porting and Maintenance
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr></table><hr /></div><div class="section" title="ABI Policy and Guidelines"><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>
+-</p><div class="section" title="The C++ Interface"><div class="titlepage"><div><div><h3 class="title"><a id="abi.cxx_interface"></a>The C++ Interface</h3></div></div></div><p>
++</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>
++</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="abi.cxx_interface"></a>The C++ Interface</h3></div></div></div><p>
+ C++ applications often depend on specific language support
+ routines, say for throwing exceptions, or catching exceptions, and
+ perhaps also depend on features in the C++ Standard Library.
+@@ -58,10 +57,10 @@
+ To use a specific version of the C++ ABI, one must use a
+ corresponding GNU C++ toolchain (i.e., g++ and libstdc++) that
+ implements the C++ ABI in question.
+-</p></div><div class="section" title="Versioning"><div class="titlepage"><div><div><h3 class="title"><a id="abi.versioning"></a>Versioning</h3></div></div></div><p> The C++ interface has evolved throughout the history of the GNU
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="abi.versioning"></a>Versioning</h3></div></div></div><p> The C++ interface has evolved throughout the history of the GNU
+ C++ toolchain. With each release, various details have been changed so
+ as to give distinct versions to the C++ interface.
+-</p><div class="section" title="Goals"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.goals"></a>Goals</h4></div></div></div><p>Extending existing, stable ABIs. Versioning gives subsequent
++</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.goals"></a>Goals</h4></div></div></div><p>Extending existing, stable ABIs. Versioning gives subsequent
+ releases of library binaries the ability to add new symbols and add
+ functionality, all the while retaining compatibility with the previous
+ releases in the series. Thus, program binaries linked with the initial
+@@ -75,7 +74,7 @@
+ in the initial release of the library binary, and remain link
+ compatible.
+ </p><p>Allows multiple, incompatible ABIs to coexist at the same time.
+-</p></div><div class="section" title="History"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.history"></a>History</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.history"></a>History</h4></div></div></div><p>
+ How can this complexity be managed? What does C++ versioning mean?
+ Because library and compiler changes often make binaries compiled
+ with one version of the GNU tools incompatible with binaries
+@@ -87,9 +86,9 @@
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Release versioning on the libgcc_s.so binary. </p><p>This is implemented via file names and the ELF
+ <code class="constant">DT_SONAME</code> mechanism (at least on ELF
+ systems). It is versioned as follows:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.x: libgcc_s.so.1</p></li><li class="listitem"><p>GCC 4.x: libgcc_s.so.1</p></li></ul></div><p>For m68k-linux the versions differ as follows: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.4, GCC 4.x: libgcc_s.so.1
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.x: libgcc_s.so.1</p></li><li class="listitem"><p>GCC 4.x: libgcc_s.so.1</p></li></ul></div><p>For m68k-linux the versions differ as follows: </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.4, GCC 4.x: libgcc_s.so.1
+ when configuring <code class="code">--with-sjlj-exceptions</code>, or
+- libgcc_s.so.2 </p></li></ul></div><p>For hppa-linux the versions differ as follows: </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.4, GCC 4.[0-1]: either libgcc_s.so.1
++ libgcc_s.so.2 </p></li></ul></div><p>For hppa-linux the versions differ as follows: </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.4, GCC 4.[0-1]: either libgcc_s.so.1
+ when configuring <code class="code">--with-sjlj-exceptions</code>, or
+ libgcc_s.so.2 </p></li><li class="listitem"><p>GCC 4.[2-7]: either libgcc_s.so.3 when configuring
+ <code class="code">--with-sjlj-exceptions</code>) or libgcc_s.so.4
+@@ -97,7 +96,7 @@
+ definitions, where the version definition is the maximum for a
+ particular release. Labels are cumulative. If a particular release
+ is not listed, it has the same version labels as the preceding
+- release.</p><p>This corresponds to the mapfile: gcc/libgcc-std.ver</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0.0: GCC_3.0</p></li><li class="listitem"><p>GCC 3.3.0: GCC_3.3</p></li><li class="listitem"><p>GCC 3.3.1: GCC_3.3.1</p></li><li class="listitem"><p>GCC 3.3.2: GCC_3.3.2</p></li><li class="listitem"><p>GCC 3.3.4: GCC_3.3.4</p></li><li class="listitem"><p>GCC 3.4.0: GCC_3.4</p></li><li class="listitem"><p>GCC 3.4.2: GCC_3.4.2</p></li><li class="listitem"><p>GCC 3.4.4: GCC_3.4.4</p></li><li class="listitem"><p>GCC 4.0.0: GCC_4.0.0</p></li><li class="listitem"><p>GCC 4.1.0: GCC_4.1.0</p></li><li class="listitem"><p>GCC 4.2.0: GCC_4.2.0</p></li><li class="listitem"><p>GCC 4.3.0: GCC_4.3.0</p></li><li class="listitem"><p>GCC 4.4.0: GCC_4.4.0</p></li><li class="listitem"><p>GCC 4.5.0: GCC_4.5.0</p></li><li class="listitem"><p>GCC 4.6.0: GCC_4.6.0</p></li><li class="listitem"><p>GCC 4.7.0: GCC_4.7.0</p></li></ul></div></li><li class="listitem"><p>
++ release.</p><p>This corresponds to the mapfile: gcc/libgcc-std.ver</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: GCC_3.0</p></li><li class="listitem"><p>GCC 3.3.0: GCC_3.3</p></li><li class="listitem"><p>GCC 3.3.1: GCC_3.3.1</p></li><li class="listitem"><p>GCC 3.3.2: GCC_3.3.2</p></li><li class="listitem"><p>GCC 3.3.4: GCC_3.3.4</p></li><li class="listitem"><p>GCC 3.4.0: GCC_3.4</p></li><li class="listitem"><p>GCC 3.4.2: GCC_3.4.2</p></li><li class="listitem"><p>GCC 3.4.4: GCC_3.4.4</p></li><li class="listitem"><p>GCC 4.0.0: GCC_4.0.0</p></li><li class="listitem"><p>GCC 4.1.0: GCC_4.1.0</p></li><li class="listitem"><p>GCC 4.2.0: GCC_4.2.0</p></li><li class="listitem"><p>GCC 4.3.0: GCC_4.3.0</p></li><li class="listitem"><p>GCC 4.4.0: GCC_4.4.0</p></li><li class="listitem"><p>GCC 4.5.0: GCC_4.5.0</p></li><li class="listitem"><p>GCC 4.6.0: GCC_4.6.0</p></li><li class="listitem"><p>GCC 4.7.0: GCC_4.7.0</p></li></ul></div></li><li class="listitem"><p>
+ Release versioning on the libstdc++.so binary, implemented in
+ the same way as the libgcc_s.so binary above. Listed is the
+ filename: <code class="constant">DT_SONAME</code> can be deduced from
+@@ -112,7 +111,7 @@
+ has the same filename and <code class="constant">DT_SONAME</code> as the
+ preceding release.
+ </p><p>It is versioned as follows:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0.0: libstdc++.so.3.0.0</p></li><li class="listitem"><p>GCC 3.0.1: libstdc++.so.3.0.1</p></li><li class="listitem"><p>GCC 3.0.2: libstdc++.so.3.0.2</p></li><li class="listitem"><p>GCC 3.0.3: libstdc++.so.3.0.2 (See Note 1)</p></li><li class="listitem"><p>GCC 3.0.4: libstdc++.so.3.0.4</p></li><li class="listitem"><p>GCC 3.1.0: libstdc++.so.4.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>GCC 3.1.1: libstdc++.so.4.0.1</p></li><li class="listitem"><p>GCC 3.2.0: libstdc++.so.5.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>GCC 3.2.1: libstdc++.so.5.0.1</p></li><li class="listitem"><p>GCC 3.2.2: libstdc++.so.5.0.2</p></li><li class="listitem"><p>GCC 3.2.3: libstdc++.so.5.0.3 (See Note 2)</p></li><li class="listitem"><p>GCC 3.3.0: libstdc++.so.5.0.4</p></li><li class="listitem"><p>GCC 3.3.1: libstdc++.so.5.0.5</p></li><li class="listitem"><p>GCC 3.4.0: libstdc++.so.6.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>GCC 3.4.1: libstdc++.so.6.0.1</p></li><li class="listitem"><p>GCC 3.4.2: libstdc++.so.6.0.2</p></li><li class="listitem"><p>GCC 3.4.3: libstdc++.so.6.0.3</p></li><li class="listitem"><p>GCC 4.0.0: libstdc++.so.6.0.4</p></li><li class="listitem"><p>GCC 4.0.1: libstdc++.so.6.0.5</p></li><li class="listitem"><p>GCC 4.0.2: libstdc++.so.6.0.6</p></li><li class="listitem"><p>GCC 4.0.3: libstdc++.so.6.0.7</p></li><li class="listitem"><p>GCC 4.1.0: libstdc++.so.6.0.7</p></li><li class="listitem"><p>GCC 4.1.1: libstdc++.so.6.0.8</p></li><li class="listitem"><p>GCC 4.2.0: libstdc++.so.6.0.9</p></li><li class="listitem"><p>GCC 4.2.1: libstdc++.so.6.0.9 (See Note 3)</p></li><li class="listitem"><p>GCC 4.2.2: libstdc++.so.6.0.9</p></li><li class="listitem"><p>GCC 4.3.0: libstdc++.so.6.0.10</p></li><li class="listitem"><p>GCC 4.4.0: libstdc++.so.6.0.11</p></li><li class="listitem"><p>GCC 4.4.1: libstdc++.so.6.0.12</p></li><li class="listitem"><p>GCC 4.4.2: libstdc++.so.6.0.13</p></li><li class="listitem"><p>GCC 4.5.0: libstdc++.so.6.0.14</p></li><li class="listitem"><p>GCC 4.6.0: libstdc++.so.6.0.15</p></li><li class="listitem"><p>GCC 4.6.1: libstdc++.so.6.0.16</p></li></ul></div><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: libstdc++.so.3.0.0</p></li><li class="listitem"><p>GCC 3.0.1: libstdc++.so.3.0.1</p></li><li class="listitem"><p>GCC 3.0.2: libstdc++.so.3.0.2</p></li><li class="listitem"><p>GCC 3.0.3: libstdc++.so.3.0.2 (See Note 1)</p></li><li class="listitem"><p>GCC 3.0.4: libstdc++.so.3.0.4</p></li><li class="listitem"><p>GCC 3.1.0: libstdc++.so.4.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>GCC 3.1.1: libstdc++.so.4.0.1</p></li><li class="listitem"><p>GCC 3.2.0: libstdc++.so.5.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>GCC 3.2.1: libstdc++.so.5.0.1</p></li><li class="listitem"><p>GCC 3.2.2: libstdc++.so.5.0.2</p></li><li class="listitem"><p>GCC 3.2.3: libstdc++.so.5.0.3 (See Note 2)</p></li><li class="listitem"><p>GCC 3.3.0: libstdc++.so.5.0.4</p></li><li class="listitem"><p>GCC 3.3.1: libstdc++.so.5.0.5</p></li><li class="listitem"><p>GCC 3.4.0: libstdc++.so.6.0.0 <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li><li class="listitem"><p>GCC 3.4.1: libstdc++.so.6.0.1</p></li><li class="listitem"><p>GCC 3.4.2: libstdc++.so.6.0.2</p></li><li class="listitem"><p>GCC 3.4.3: libstdc++.so.6.0.3</p></li><li class="listitem"><p>GCC 4.0.0: libstdc++.so.6.0.4</p></li><li class="listitem"><p>GCC 4.0.1: libstdc++.so.6.0.5</p></li><li class="listitem"><p>GCC 4.0.2: libstdc++.so.6.0.6</p></li><li class="listitem"><p>GCC 4.0.3: libstdc++.so.6.0.7</p></li><li class="listitem"><p>GCC 4.1.0: libstdc++.so.6.0.7</p></li><li class="listitem"><p>GCC 4.1.1: libstdc++.so.6.0.8</p></li><li class="listitem"><p>GCC 4.2.0: libstdc++.so.6.0.9</p></li><li class="listitem"><p>GCC 4.2.1: libstdc++.so.6.0.9 (See Note 3)</p></li><li class="listitem"><p>GCC 4.2.2: libstdc++.so.6.0.9</p></li><li class="listitem"><p>GCC 4.3.0: libstdc++.so.6.0.10</p></li><li class="listitem"><p>GCC 4.4.0: libstdc++.so.6.0.11</p></li><li class="listitem"><p>GCC 4.4.1: libstdc++.so.6.0.12</p></li><li class="listitem"><p>GCC 4.4.2: libstdc++.so.6.0.13</p></li><li class="listitem"><p>GCC 4.5.0: libstdc++.so.6.0.14</p></li><li class="listitem"><p>GCC 4.6.0: libstdc++.so.6.0.15</p></li><li class="listitem"><p>GCC 4.6.1: libstdc++.so.6.0.16</p></li><li class="listitem"><p>GCC 4.7.0: libstdc++.so.6.0.17</p></li></ul></div><p>
+ Note 1: Error should be libstdc++.so.3.0.3.
+ </p><p>
+ Note 2: Not strictly required.
+@@ -130,7 +129,7 @@
+ GLIBCPP_3.2 for symbols that were introduced in the GCC 3.2.0
+ release.) If a particular release is not listed, it has the same
+ version labels as the preceding release.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0.0: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.1: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.2: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.3: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.4: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.1.0: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>GCC 3.1.1: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>GCC 3.2.0: GLIBCPP_3.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.1: GLIBCPP_3.2.1, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.2: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.3: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.3.0: GLIBCPP_3.2.2, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.1: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.2: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.3: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.4.0: GLIBCXX_3.4, CXXABI_1.3</p></li><li class="listitem"><p>GCC 3.4.1: GLIBCXX_3.4.1, CXXABI_1.3</p></li><li class="listitem"><p>GCC 3.4.2: GLIBCXX_3.4.2</p></li><li class="listitem"><p>GCC 3.4.3: GLIBCXX_3.4.3</p></li><li class="listitem"><p>GCC 4.0.0: GLIBCXX_3.4.4, CXXABI_1.3.1</p></li><li class="listitem"><p>GCC 4.0.1: GLIBCXX_3.4.5</p></li><li class="listitem"><p>GCC 4.0.2: GLIBCXX_3.4.6</p></li><li class="listitem"><p>GCC 4.0.3: GLIBCXX_3.4.7</p></li><li class="listitem"><p>GCC 4.1.1: GLIBCXX_3.4.8</p></li><li class="listitem"><p>GCC 4.2.0: GLIBCXX_3.4.9</p></li><li class="listitem"><p>GCC 4.3.0: GLIBCXX_3.4.10, CXXABI_1.3.2</p></li><li class="listitem"><p>GCC 4.4.0: GLIBCXX_3.4.11, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.4.1: GLIBCXX_3.4.12, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.4.2: GLIBCXX_3.4.13, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.5.0: GLIBCXX_3.4.14, CXXABI_1.3.4</p></li><li class="listitem"><p>GCC 4.6.0: GLIBCXX_3.4.15, CXXABI_1.3.5</p></li><li class="listitem"><p>GCC 4.6.1: GLIBCXX_3.4.16, CXXABI_1.3.5</p></li></ul></div></li><li class="listitem"><p>Incremental bumping of a compiler pre-defined macro,
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.1: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.2: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.3: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.0.4: (Error, not versioned)</p></li><li class="listitem"><p>GCC 3.1.0: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>GCC 3.1.1: GLIBCPP_3.1, CXXABI_1</p></li><li class="listitem"><p>GCC 3.2.0: GLIBCPP_3.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.1: GLIBCPP_3.2.1, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.2: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.2.3: GLIBCPP_3.2.2, CXXABI_1.2</p></li><li class="listitem"><p>GCC 3.3.0: GLIBCPP_3.2.2, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.1: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.2: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.3.3: GLIBCPP_3.2.3, CXXABI_1.2.1</p></li><li class="listitem"><p>GCC 3.4.0: GLIBCXX_3.4, CXXABI_1.3</p></li><li class="listitem"><p>GCC 3.4.1: GLIBCXX_3.4.1, CXXABI_1.3</p></li><li class="listitem"><p>GCC 3.4.2: GLIBCXX_3.4.2</p></li><li class="listitem"><p>GCC 3.4.3: GLIBCXX_3.4.3</p></li><li class="listitem"><p>GCC 4.0.0: GLIBCXX_3.4.4, CXXABI_1.3.1</p></li><li class="listitem"><p>GCC 4.0.1: GLIBCXX_3.4.5</p></li><li class="listitem"><p>GCC 4.0.2: GLIBCXX_3.4.6</p></li><li class="listitem"><p>GCC 4.0.3: GLIBCXX_3.4.7</p></li><li class="listitem"><p>GCC 4.1.1: GLIBCXX_3.4.8</p></li><li class="listitem"><p>GCC 4.2.0: GLIBCXX_3.4.9</p></li><li class="listitem"><p>GCC 4.3.0: GLIBCXX_3.4.10, CXXABI_1.3.2</p></li><li class="listitem"><p>GCC 4.4.0: GLIBCXX_3.4.11, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.4.1: GLIBCXX_3.4.12, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.4.2: GLIBCXX_3.4.13, CXXABI_1.3.3</p></li><li class="listitem"><p>GCC 4.5.0: GLIBCXX_3.4.14, CXXABI_1.3.4</p></li><li class="listitem"><p>GCC 4.6.0: GLIBCXX_3.4.15, CXXABI_1.3.5</p></li><li class="listitem"><p>GCC 4.6.1: GLIBCXX_3.4.16, CXXABI_1.3.5</p></li><li class="listitem"><p>GCC 4.7.0: GLIBCXX_3.4.17, CXXABI_1.3.6</p></li></ul></div></li><li class="listitem"><p>Incremental bumping of a compiler pre-defined macro,
+ __GXX_ABI_VERSION. This macro is defined as the version of the
+ compiler v3 ABI, with g++ 3.0 being version 100. This macro will
+ be automatically defined whenever g++ is used (the curious can
+@@ -142,11 +141,11 @@
+ '-fabi-version' command line option.
+ </p><p>
+ It is versioned as follows, where 'n' is given by '-fabi-version=n':
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0: 100</p></li><li class="listitem"><p>GCC 3.1: 100 (Error, should be 101)</p></li><li class="listitem"><p>GCC 3.2: 102</p></li><li class="listitem"><p>GCC 3.3: 102</p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: 102 (when n=1)</p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: 1000 + n (when n&gt;1) </p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: 999999 (when n=0)</p></li></ul></div><p></p></li><li class="listitem"><p>Changes to the default compiler option for
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0: 100</p></li><li class="listitem"><p>GCC 3.1: 100 (Error, should be 101)</p></li><li class="listitem"><p>GCC 3.2: 102</p></li><li class="listitem"><p>GCC 3.3: 102</p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: 102 (when n=1)</p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: 1000 + n (when n&gt;1) </p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: 999999 (when n=0)</p></li></ul></div><p></p></li><li class="listitem"><p>Changes to the default compiler option for
+ <code class="code">-fabi-version</code>.
+ </p><p>
+ It is versioned as follows:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0: (Error, not versioned) </p></li><li class="listitem"><p>GCC 3.1: (Error, not versioned) </p></li><li class="listitem"><p>GCC 3.2: <code class="code">-fabi-version=1</code></p></li><li class="listitem"><p>GCC 3.3: <code class="code">-fabi-version=1</code></p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: <code class="code">-fabi-version=2</code> <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li></ul></div><p></p></li><li class="listitem"><p>Incremental bumping of a library pre-defined macro. For releases
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0: (Error, not versioned) </p></li><li class="listitem"><p>GCC 3.1: (Error, not versioned) </p></li><li class="listitem"><p>GCC 3.2: <code class="code">-fabi-version=1</code></p></li><li class="listitem"><p>GCC 3.3: <code class="code">-fabi-version=1</code></p></li><li class="listitem"><p>GCC 3.4, GCC 4.x: <code class="code">-fabi-version=2</code> <span class="emphasis"><em>(Incompatible with previous)</em></span></p></li></ul></div><p></p></li><li class="listitem"><p>Incremental bumping of a library pre-defined macro. For releases
+ before 3.4.0, the macro is __GLIBCPP__. For later releases, it's
+ __GLIBCXX__. (The libstdc++ project generously changed from CPP to
+ CXX throughout its source to allow the "C" pre-processor the CPP
+@@ -159,7 +158,7 @@
+ the same value as gcc/DATESTAMP.)
+ </p><p>
+ It is versioned as follows:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0.0: 20010615</p></li><li class="listitem"><p>GCC 3.0.1: 20010819</p></li><li class="listitem"><p>GCC 3.0.2: 20011023</p></li><li class="listitem"><p>GCC 3.0.3: 20011220</p></li><li class="listitem"><p>GCC 3.0.4: 20020220</p></li><li class="listitem"><p>GCC 3.1.0: 20020514</p></li><li class="listitem"><p>GCC 3.1.1: 20020725</p></li><li class="listitem"><p>GCC 3.2.0: 20020814</p></li><li class="listitem"><p>GCC 3.2.1: 20021119</p></li><li class="listitem"><p>GCC 3.2.2: 20030205</p></li><li class="listitem"><p>GCC 3.2.3: 20030422</p></li><li class="listitem"><p>GCC 3.3.0: 20030513</p></li><li class="listitem"><p>GCC 3.3.1: 20030804</p></li><li class="listitem"><p>GCC 3.3.2: 20031016</p></li><li class="listitem"><p>GCC 3.3.3: 20040214</p></li><li class="listitem"><p>GCC 3.4.0: 20040419</p></li><li class="listitem"><p>GCC 3.4.1: 20040701</p></li><li class="listitem"><p>GCC 3.4.2: 20040906</p></li><li class="listitem"><p>GCC 3.4.3: 20041105</p></li><li class="listitem"><p>GCC 3.4.4: 20050519</p></li><li class="listitem"><p>GCC 3.4.5: 20051201</p></li><li class="listitem"><p>GCC 3.4.6: 20060306</p></li><li class="listitem"><p>GCC 4.0.0: 20050421</p></li><li class="listitem"><p>GCC 4.0.1: 20050707</p></li><li class="listitem"><p>GCC 4.0.2: 20050921</p></li><li class="listitem"><p>GCC 4.0.3: 20060309</p></li><li class="listitem"><p>GCC 4.1.0: 20060228</p></li><li class="listitem"><p>GCC 4.1.1: 20060524</p></li><li class="listitem"><p>GCC 4.1.2: 20070214</p></li><li class="listitem"><p>GCC 4.2.0: 20070514</p></li><li class="listitem"><p>GCC 4.2.1: 20070719</p></li><li class="listitem"><p>GCC 4.2.2: 20071007</p></li><li class="listitem"><p>GCC 4.2.3: 20080201</p></li><li class="listitem"><p>GCC 4.2.4: 20080519</p></li><li class="listitem"><p>GCC 4.3.0: 20080306</p></li><li class="listitem"><p>GCC 4.3.1: 20080606</p></li><li class="listitem"><p>GCC 4.3.2: 20080827</p></li><li class="listitem"><p>GCC 4.3.3: 20090124</p></li><li class="listitem"><p>GCC 4.3.4: 20090804</p></li><li class="listitem"><p>GCC 4.3.5: 20100522</p></li><li class="listitem"><p>GCC 4.3.6: 20110627</p></li><li class="listitem"><p>GCC 4.4.0: 20090421</p></li><li class="listitem"><p>GCC 4.4.1: 20090722</p></li><li class="listitem"><p>GCC 4.4.2: 20091015</p></li><li class="listitem"><p>GCC 4.4.3: 20100121</p></li><li class="listitem"><p>GCC 4.4.4: 20100429</p></li><li class="listitem"><p>GCC 4.4.5: 20101001</p></li><li class="listitem"><p>GCC 4.4.6: 20110416</p></li><li class="listitem"><p>GCC 4.5.0: 20100414</p></li><li class="listitem"><p>GCC 4.5.1: 20100731</p></li><li class="listitem"><p>GCC 4.5.2: 20101216</p></li><li class="listitem"><p>GCC 4.5.3: 20110428</p></li><li class="listitem"><p>GCC 4.6.0: 20110325</p></li><li class="listitem"><p>GCC 4.6.1: 20110627</p></li><li class="listitem"><p>GCC 4.6.2: 20111026</p></li></ul></div><p></p></li><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: 20010615</p></li><li class="listitem"><p>GCC 3.0.1: 20010819</p></li><li class="listitem"><p>GCC 3.0.2: 20011023</p></li><li class="listitem"><p>GCC 3.0.3: 20011220</p></li><li class="listitem"><p>GCC 3.0.4: 20020220</p></li><li class="listitem"><p>GCC 3.1.0: 20020514</p></li><li class="listitem"><p>GCC 3.1.1: 20020725</p></li><li class="listitem"><p>GCC 3.2.0: 20020814</p></li><li class="listitem"><p>GCC 3.2.1: 20021119</p></li><li class="listitem"><p>GCC 3.2.2: 20030205</p></li><li class="listitem"><p>GCC 3.2.3: 20030422</p></li><li class="listitem"><p>GCC 3.3.0: 20030513</p></li><li class="listitem"><p>GCC 3.3.1: 20030804</p></li><li class="listitem"><p>GCC 3.3.2: 20031016</p></li><li class="listitem"><p>GCC 3.3.3: 20040214</p></li><li class="listitem"><p>GCC 3.4.0: 20040419</p></li><li class="listitem"><p>GCC 3.4.1: 20040701</p></li><li class="listitem"><p>GCC 3.4.2: 20040906</p></li><li class="listitem"><p>GCC 3.4.3: 20041105</p></li><li class="listitem"><p>GCC 3.4.4: 20050519</p></li><li class="listitem"><p>GCC 3.4.5: 20051201</p></li><li class="listitem"><p>GCC 3.4.6: 20060306</p></li><li class="listitem"><p>GCC 4.0.0: 20050421</p></li><li class="listitem"><p>GCC 4.0.1: 20050707</p></li><li class="listitem"><p>GCC 4.0.2: 20050921</p></li><li class="listitem"><p>GCC 4.0.3: 20060309</p></li><li class="listitem"><p>GCC 4.1.0: 20060228</p></li><li class="listitem"><p>GCC 4.1.1: 20060524</p></li><li class="listitem"><p>GCC 4.1.2: 20070214</p></li><li class="listitem"><p>GCC 4.2.0: 20070514</p></li><li class="listitem"><p>GCC 4.2.1: 20070719</p></li><li class="listitem"><p>GCC 4.2.2: 20071007</p></li><li class="listitem"><p>GCC 4.2.3: 20080201</p></li><li class="listitem"><p>GCC 4.2.4: 20080519</p></li><li class="listitem"><p>GCC 4.3.0: 20080306</p></li><li class="listitem"><p>GCC 4.3.1: 20080606</p></li><li class="listitem"><p>GCC 4.3.2: 20080827</p></li><li class="listitem"><p>GCC 4.3.3: 20090124</p></li><li class="listitem"><p>GCC 4.3.4: 20090804</p></li><li class="listitem"><p>GCC 4.3.5: 20100522</p></li><li class="listitem"><p>GCC 4.3.6: 20110627</p></li><li class="listitem"><p>GCC 4.4.0: 20090421</p></li><li class="listitem"><p>GCC 4.4.1: 20090722</p></li><li class="listitem"><p>GCC 4.4.2: 20091015</p></li><li class="listitem"><p>GCC 4.4.3: 20100121</p></li><li class="listitem"><p>GCC 4.4.4: 20100429</p></li><li class="listitem"><p>GCC 4.4.5: 20101001</p></li><li class="listitem"><p>GCC 4.4.6: 20110416</p></li><li class="listitem"><p>GCC 4.4.7: 20120313</p></li><li class="listitem"><p>GCC 4.5.0: 20100414</p></li><li class="listitem"><p>GCC 4.5.1: 20100731</p></li><li class="listitem"><p>GCC 4.5.2: 20101216</p></li><li class="listitem"><p>GCC 4.5.3: 20110428</p></li><li class="listitem"><p>GCC 4.5.4: 20120702</p></li><li class="listitem"><p>GCC 4.6.0: 20110325</p></li><li class="listitem"><p>GCC 4.6.1: 20110627</p></li><li class="listitem"><p>GCC 4.6.2: 20111026</p></li><li class="listitem"><p>GCC 4.6.3: 20120301</p></li><li class="listitem"><p>GCC 4.7.0: 20120322</p></li><li class="listitem"><p>GCC 4.7.1: 20120614</p></li><li class="listitem"><p>GCC 4.7.2: 20120920</p></li></ul></div><p></p></li><li class="listitem"><p>
+ Incremental bumping of a library pre-defined macro,
+ _GLIBCPP_VERSION. This macro is defined as the released version of
+ the library, as a string literal. This is only implemented in
+@@ -172,7 +171,7 @@
+ of config.h.
+ </p><p>
+ It is versioned as follows:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0.0: "3.0.0"</p></li><li class="listitem"><p>GCC 3.0.1: "3.0.0" (Error, should be "3.0.1")</p></li><li class="listitem"><p>GCC 3.0.2: "3.0.0" (Error, should be "3.0.2")</p></li><li class="listitem"><p>GCC 3.0.3: "3.0.0" (Error, should be "3.0.3")</p></li><li class="listitem"><p>GCC 3.0.4: "3.0.0" (Error, should be "3.0.4")</p></li><li class="listitem"><p>GCC 3.1.0: "3.1.0"</p></li><li class="listitem"><p>GCC 3.1.1: "3.1.1"</p></li><li class="listitem"><p>GCC 3.2.0: "3.2"</p></li><li class="listitem"><p>GCC 3.2.1: "3.2.1"</p></li><li class="listitem"><p>GCC 3.2.2: "3.2.2"</p></li><li class="listitem"><p>GCC 3.2.3: "3.2.3"</p></li><li class="listitem"><p>GCC 3.3.0: "3.3"</p></li><li class="listitem"><p>GCC 3.3.1: "3.3.1"</p></li><li class="listitem"><p>GCC 3.3.2: "3.3.2"</p></li><li class="listitem"><p>GCC 3.3.3: "3.3.3"</p></li><li class="listitem"><p>GCC 3.4: "version-unused"</p></li><li class="listitem"><p>GCC 4.x: "version-unused"</p></li></ul></div><p></p></li><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: "3.0.0"</p></li><li class="listitem"><p>GCC 3.0.1: "3.0.0" (Error, should be "3.0.1")</p></li><li class="listitem"><p>GCC 3.0.2: "3.0.0" (Error, should be "3.0.2")</p></li><li class="listitem"><p>GCC 3.0.3: "3.0.0" (Error, should be "3.0.3")</p></li><li class="listitem"><p>GCC 3.0.4: "3.0.0" (Error, should be "3.0.4")</p></li><li class="listitem"><p>GCC 3.1.0: "3.1.0"</p></li><li class="listitem"><p>GCC 3.1.1: "3.1.1"</p></li><li class="listitem"><p>GCC 3.2.0: "3.2"</p></li><li class="listitem"><p>GCC 3.2.1: "3.2.1"</p></li><li class="listitem"><p>GCC 3.2.2: "3.2.2"</p></li><li class="listitem"><p>GCC 3.2.3: "3.2.3"</p></li><li class="listitem"><p>GCC 3.3.0: "3.3"</p></li><li class="listitem"><p>GCC 3.3.1: "3.3.1"</p></li><li class="listitem"><p>GCC 3.3.2: "3.3.2"</p></li><li class="listitem"><p>GCC 3.3.3: "3.3.3"</p></li><li class="listitem"><p>GCC 3.4: "version-unused"</p></li><li class="listitem"><p>GCC 4.x: "version-unused"</p></li></ul></div><p></p></li><li class="listitem"><p>
+ Matching each specific C++ compiler release to a specific set of
+ C++ include files. This is only implemented in GCC 3.1.1 releases
+ and higher.
+@@ -185,13 +184,13 @@
+ file's macro GLIBCXX_CONFIGURE (GLIBCPP_CONFIGURE before GCC 3.4.0).
+ </p><p>
+ C++ includes are versioned as follows:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>GCC 3.0.0: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.1: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.2: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.3: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.4: include/g++-v3</p></li><li class="listitem"><p>GCC 3.1.0: include/g++-v3</p></li><li class="listitem"><p>GCC 3.1.1: include/c++/3.1.1</p></li><li class="listitem"><p>GCC 3.2.0: include/c++/3.2</p></li><li class="listitem"><p>GCC 3.2.1: include/c++/3.2.1</p></li><li class="listitem"><p>GCC 3.2.2: include/c++/3.2.2</p></li><li class="listitem"><p>GCC 3.2.3: include/c++/3.2.3</p></li><li class="listitem"><p>GCC 3.3.0: include/c++/3.3</p></li><li class="listitem"><p>GCC 3.3.1: include/c++/3.3.1</p></li><li class="listitem"><p>GCC 3.3.2: include/c++/3.3.2</p></li><li class="listitem"><p>GCC 3.3.3: include/c++/3.3.3</p></li><li class="listitem"><p>GCC 3.4.x: include/c++/3.4.x</p></li><li class="listitem"><p>GCC 4.x.y: include/c++/4.x.y</p></li></ul></div><p></p></li></ol></div><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.1: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.2: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.3: include/g++-v3</p></li><li class="listitem"><p>GCC 3.0.4: include/g++-v3</p></li><li class="listitem"><p>GCC 3.1.0: include/g++-v3</p></li><li class="listitem"><p>GCC 3.1.1: include/c++/3.1.1</p></li><li class="listitem"><p>GCC 3.2.0: include/c++/3.2</p></li><li class="listitem"><p>GCC 3.2.1: include/c++/3.2.1</p></li><li class="listitem"><p>GCC 3.2.2: include/c++/3.2.2</p></li><li class="listitem"><p>GCC 3.2.3: include/c++/3.2.3</p></li><li class="listitem"><p>GCC 3.3.0: include/c++/3.3</p></li><li class="listitem"><p>GCC 3.3.1: include/c++/3.3.1</p></li><li class="listitem"><p>GCC 3.3.2: include/c++/3.3.2</p></li><li class="listitem"><p>GCC 3.3.3: include/c++/3.3.3</p></li><li class="listitem"><p>GCC 3.4.x: include/c++/3.4.x</p></li><li class="listitem"><p>GCC 4.x.y: include/c++/4.x.y</p></li></ul></div><p></p></li></ol></div><p>
+ Taken together, these techniques can accurately specify interface
+ and implementation changes in the GNU C++ tools themselves. Used
+ properly, they allow both the GNU C++ tools implementation, and
+ programs using them, an evolving yet controlled development that
+ maintains backward compatibility.
+-</p></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.prereq"></a>Prerequisites</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.prereq"></a>Prerequisites</h4></div></div></div><p>
+ Minimum environment that supports a versioned ABI: A supported
+ dynamic linker, a GNU linker of sufficient vintage to understand
+ demangled C++ name globbing (ld) or the Sun linker, a shared
+@@ -206,7 +205,7 @@
+ Most modern GNU/Linux and BSD versions, particularly ones using
+ GCC 3.1 and later, will meet the
+ requirements above, as does Solaris 2.5 and up.
+- </p></div><div class="section" title="Configuring"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.config"></a>Configuring</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.config"></a>Configuring</h4></div></div></div><p>
+ It turns out that most of the configure options that change
+ default behavior will impact the mangled names of exported
+ symbols, and thus impact versioning and compatibility.
+@@ -224,7 +223,7 @@
+ attempts to make sure that all the requirement for symbol
+ versioning are in place. For more information, please consult
+ acinclude.m4.
+- </p></div><div class="section" title="Checking Active"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.active"></a>Checking Active</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="abi.versioning.active"></a>Checking Active</h4></div></div></div><p>
+ When the GNU C++ library is being built with symbol versioning
+ on, you should see the following at configure time for
+ libstdc++:
+@@ -272,12 +271,12 @@
+ libc.so.1 (SUNWprivate_1.1, SYSVABI_1.3);
+ </pre><p>
+ <code class="code">ldd -v</code> works too, but is very verbose.
+-</p></div></div><div class="section" title="Allowed Changes"><div class="titlepage"><div><div><h3 class="title"><a id="abi.changes_allowed"></a>Allowed Changes</h3></div></div></div><p>
++</p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="abi.changes_allowed"></a>Allowed Changes</h3></div></div></div><p>
+ The following will cause the library minor version number to
+ increase, say from "libstdc++.so.3.0.4" to "libstdc++.so.3.0.5".
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Adding an exported global or static data member</p></li><li class="listitem"><p>Adding an exported function, static or non-virtual member function</p></li><li class="listitem"><p>Adding an exported symbol or symbols by additional instantiations</p></li></ol></div><p>
+ Other allowed changes are possible.
+-</p></div><div class="section" title="Prohibited Changes"><div class="titlepage"><div><div><h3 class="title"><a id="abi.changes_no"></a>Prohibited Changes</h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="abi.changes_no"></a>Prohibited Changes</h3></div></div></div><p>
+ The following non-exhaustive list will cause the library major version
+ number to increase, say from "libstdc++.so.3.0.4" to
+ "libstdc++.so.4.0.0".
+@@ -296,13 +295,13 @@
+ section on <a class="link" href="http://mentorembedded.github.com/cxx-abi/abi.html#calls" target="_top">Function
+ Calling Conventions and APIs</a>
+ of the C++ ABI documentation for further details.
+-</p></li></ol></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h3 class="title"><a id="abi.impl"></a>Implementation</h3></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
++</p></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="abi.impl"></a>Implementation</h3></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+ Separation of interface and implementation
+ </p><p>
+ This is accomplished by two techniques that separate the API from
+ the ABI: forcing undefined references to link against a library
+ binary for definitions.
+- </p><div class="variablelist"><dl><dt><span class="term">Include files have declarations, source files have defines</span></dt><dd><p>
++ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">Include files have declarations, source files have defines</span></dt><dd><p>
+ For non-templatized types, such as much of <code class="code">class
+ locale</code>, the appropriate standard C++ include, say
+ <code class="code">locale</code>, can contain full declarations, while
+@@ -336,7 +335,7 @@
+ performance by the underlying dynamic loading mechanism. In
+ addition, they have the possibility of changing without impacting
+ ABI compatibility.
+- </p><p>The following namespaces are transformed by the mapfile:</p><div class="variablelist"><dl><dt><span class="term"><code class="code">namespace std</code></span></dt><dd><p> Defaults to exporting all symbols in label
++ </p><p>The following namespaces are transformed by the mapfile:</p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="code">namespace std</code></span></dt><dd><p> Defaults to exporting all symbols in label
+ <code class="code">GLIBCXX</code> that do not begin with an underscore, i.e.,
+ <code class="code">__test_func</code> would not be exported by default. Select
+ exceptional symbols are allowed to be visible.</p></dd><dt><span class="term"><code class="code">namespace __gnu_cxx</code></span></dt><dd><p> Defaults to not exporting any symbols in label
+@@ -344,7 +343,7 @@
+ <code class="code">CXXABI</code>, select items are allowed to be visible.</p></dd></dl></div><p>
+ </p></li><li class="listitem"><p>Freezing the API</p><p>Disallowed changes, as above, are not made on a stable release
+ branch. Enforcement tends to be less strict with GNU extensions that
+-standard includes.</p></li></ol></div></div><div class="section" title="Testing"><div class="titlepage"><div><div><h3 class="title"><a id="abi.testing"></a>Testing</h3></div></div></div><div class="section" title="Single ABI Testing"><div class="titlepage"><div><div><h4 class="title"><a id="abi.testing.single"></a>Single ABI Testing</h4></div></div></div><p>
++standard includes.</p></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="abi.testing"></a>Testing</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="abi.testing.single"></a>Single ABI Testing</h4></div></div></div><p>
+ Testing for GNU C++ ABI changes is composed of two distinct
+ areas: testing the C++ compiler (g++) for compiler changes, and
+ testing the C++ library (libstdc++) for library changes.
+@@ -410,7 +409,7 @@
+ </p><p>
+ Perhaps there are other C++ ABI checkers. If so, please notify
+ us. We'd like to know about them!
+-</p></div><div class="section" title="Multiple ABI Testing"><div class="titlepage"><div><div><h4 class="title"><a id="abi.testing.multi"></a>Multiple ABI Testing</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="abi.testing.multi"></a>Multiple ABI Testing</h4></div></div></div><p>
+ A "C" application, dynamically linked to two shared libraries, liba,
+ libb. The dependent library liba is a C++ shared library compiled with
+ GCC 3.3, and uses io, exceptions, locale, etc. The dependent library
+@@ -473,7 +472,7 @@
+ This resulting binary, when executed, will be able to safely use
+ code from both liba, and the dependent libstdc++.so.6, and libb,
+ with the dependent libstdc++.so.5.
+-</p></div></div><div class="section" title="Outstanding Issues"><div class="titlepage"><div><div><h3 class="title"><a id="abi.issues"></a>Outstanding Issues</h3></div></div></div><p>
++</p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="abi.issues"></a>Outstanding Issues</h3></div></div></div><p>
+ Some features in the C++ language make versioning especially
+ difficult. In particular, compiler generated constructs such as
+ implicit instantiations for templates, typeinfo information, and
+@@ -486,47 +485,47 @@
+ <a class="link" href="http://gcc.gnu.org/PR24660" target="_top">24660: versioning weak symbols in libstdc++</a>
+ </p><p>
+ <a class="link" href="http://gcc.gnu.org/PR19664" target="_top">19664: libstdc++ headers should have pop/push of the visibility around the declarations</a>
+-</p></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="abi.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry" title="ABIcheck"><a id="biblio.abicheck"></a><p>[biblio.abicheck] <span class="title"><em>
++</p></div><div class="bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="abi.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry"><a id="biblio.abicheck"></a><p>[biblio.abicheck] <span class="title"><em>
+ <a class="link" href="http://abicheck.sourceforge.net" target="_top">
+ ABIcheck
+ </a>
+- </em>. </span></p></div><div class="biblioentry" title="C++ ABI Summary"><a id="biblio.cxxabi"></a><p>[biblio.cxxabi] <span class="title"><em>
++ </em>. </span></p></div><div class="biblioentry"><a id="biblio.cxxabi"></a><p>[biblio.cxxabi] <span class="title"><em>
+ <a class="link" href="http://www.codesourcery.com/cxx-abi/" target="_top">
+ C++ ABI Summary
+ </a>
+- </em>. </span></p></div><div class="biblioentry" title="Intel Compilers for Linux Compatibility with the GNU Compilers"><a id="idp22905536"></a><p><span class="title"><em>
++ </em>. </span></p></div><div class="biblioentry"><a id="idm269979305856"></a><p><span class="title"><em>
+ <a class="link" href="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm" target="_top">
+ Intel Compilers for Linux Compatibility with the GNU Compilers
+ </a>
+- </em>. </span></p></div><div class="biblioentry" title="Linker and Libraries Guide (document 819-0690)"><a id="idp22907392"></a><p><span class="title"><em>
++ </em>. </span></p></div><div class="biblioentry"><a id="idm269979304000"></a><p><span class="title"><em>
+ <a class="link" href="http://download.oracle.com/docs/cd/E19963-01/html/819-0690/index.html" target="_top">
+ Linker and Libraries Guide (document 819-0690)
+ </a>
+- </em>. </span></p></div><div class="biblioentry" title="Sun Studio 11: C++ Migration Guide (document 819-3689)"><a id="idp22909232"></a><p><span class="title"><em>
++ </em>. </span></p></div><div class="biblioentry"><a id="idm269979302160"></a><p><span class="title"><em>
+ <a class="link" href="http://download.oracle.com/docs/cd/E19422-01/819-3689/index.html" target="_top">
+ Sun Studio 11: C++ Migration Guide (document 819-3689)
+ </a>
+- </em>. </span></p></div><div class="biblioentry" title="How to Write Shared Libraries"><a id="idp22911088"></a><p><span class="title"><em>
++ </em>. </span></p></div><div class="biblioentry"><a id="idm269979300304"></a><p><span class="title"><em>
+ <a class="link" href="http://www.akkadia.org/drepper/dsohowto.pdf" target="_top">
+ How to Write Shared Libraries
+ </a>
+- </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span></p></div><div class="biblioentry" title="C++ ABI for the ARM Architecture"><a id="idp22914528"></a><p><span class="title"><em>
++ </em>. </span><span class="author"><span class="firstname">Ulrich</span> <span class="surname">Drepper</span>. </span></p></div><div class="biblioentry"><a id="idm269979296864"></a><p><span class="title"><em>
+ <a class="link" href="http://www.arm.com/miscPDFs/8033.pdf" target="_top">
+ C++ ABI for the ARM Architecture
+ </a>
+- </em>. </span></p></div><div class="biblioentry" title="Dynamic Shared Objects: Survey and Issues"><a id="idp22916336"></a><p><span class="title"><em>
++ </em>. </span></p></div><div class="biblioentry"><a id="idm269979295056"></a><p><span class="title"><em>
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html" target="_top">
+ Dynamic Shared Objects: Survey and Issues
+ </a>
+ </em>. </span><span class="subtitle">
+ ISO C++ J16/06-0046
+- . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry" title="Versioning With Namespaces"><a id="idp22919632"></a><p><span class="title"><em>
++ . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idm269979291760"></a><p><span class="title"><em>
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html" target="_top">
+ Versioning With Namespaces
+ </a>
+ </em>. </span><span class="subtitle">
+ ISO C++ J16/06-0083
+- . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry" title="Binary Compatibility of Shared Libraries Implemented in C++ on GNU/Linux Systems"><a id="idp22922912"></a><p><span class="title"><em>
++ . </span><span class="author"><span class="firstname">Benjamin</span> <span class="surname">Kosnik</span>. </span></p></div><div class="biblioentry"><a id="idm269979288480"></a><p><span class="title"><em>
+ <a class="link" href="http://syrcose.ispras.ru/2009/files/SYRCoSE2009-CfP.pdf" target="_top">
+ Binary Compatibility of Shared Libraries Implemented in C++
+ on GNU/Linux Systems
+@@ -533,4 +532,4 @@
+ </a>
+ </em>. </span><span class="subtitle">
+ SYRCoSE 2009
+- . </span><span class="author"><span class="firstname">Pavel</span> <span class="surname">Shved</span>. </span><span class="author"><span class="firstname">Denis</span> <span class="surname">Silakov</span>. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Test </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> API Evolution and Deprecation History</td></tr></table></div></body></html>
++ . </span><span class="author"><span class="firstname">Pavel</span> <span class="surname">Shved</span>. </span><span class="author"><span class="firstname">Denis</span> <span class="surname">Silakov</span>. </span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="test.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="api.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Test </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> API Evolution and Deprecation History</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/intro.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/intro.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/intro.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Introduction
+
+-</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" title="Part I.  Introduction"><div class="titlepage"><div><div><h1 class="title"><a id="manual.intro"></a>Part I. 
++</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. 
+ Introduction
+- <a id="idp9094432" class="indexterm"></a>
+-</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>
++ <a id="idm269998303680" class="indexterm"></a>
++</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>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/atomics.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/atomics.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/atomics.html (.../branches/gcc-4_7-branch)
+@@ -1,16 +1,15 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; , &#10; atomic&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; , &#10; atomic&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
+ Atomics
+
+ </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. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 14.  Atomics"><div class="titlepage"><div><div><h2 class="title"><a id="std.atomics"></a>Chapter 14. 
++ </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. 
+ Atomics
+- <a id="idp16354144" class="indexterm"></a>
+-</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>
++ <a id="idm269985851840" class="indexterm"></a>
++</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>
+ Facilities for atomic operations.
+-</p><div class="section" title="API Reference"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.atomics.api"></a>API Reference</h2></div></div></div><p>
++</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>
+ All items are declared in the standard header
+ file <code class="filename">atomic</code>.
+ </p><p>
+@@ -28,4 +27,4 @@
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="io_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 15. 
+ Concurrency
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/internals.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/internals.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/internals.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; internals&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; internals&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Porting and Maintenance
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="test.html">Next</a></td></tr></table><hr /></div><div class="section" title="Porting to New Hardware or Operating Systems"><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>
++</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>
+ </p><p>This document explains how to port libstdc++ (the GNU C++ library) to
+ a new target.
+ </p><p>In order to make the GNU C++ library (libstdc++) work with a new
+@@ -20,7 +19,7 @@
+ library, but you should at least try some minimal test cases.
+ </p><p>(Note that what we think of as a "target," the library refers to as
+ a "host." The comment at the top of <code class="code">configure.ac</code> explains why.)
+- </p><div class="section" title="Operating System"><div class="titlepage"><div><div><h3 class="title"><a id="internals.os"></a>Operating System</h3></div></div></div><p>If you are porting to a new operating system (as opposed to a new chip
++ </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="internals.os"></a>Operating System</h3></div></div></div><p>If you are porting to a new operating system (as opposed to a new chip
+ using an existing operating system), you will need to create a new
+ directory in the <code class="code">config/os</code> hierarchy. For example, the IRIX
+ configuration files are all in <code class="code">config/os/irix</code>. There is no set
+@@ -99,7 +98,7 @@
+ #endif
+ </pre><p>We recommend copying an existing <code class="code">os_defines.h</code> to use as a
+ starting point.
+- </p></div><div class="section" title="CPU"><div class="titlepage"><div><div><h3 class="title"><a id="internals.cpu"></a>CPU</h3></div></div></div><p>If you are porting to a new chip (as opposed to a new operating system
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="internals.cpu"></a>CPU</h3></div></div></div><p>If you are porting to a new chip (as opposed to a new operating system
+ running on an existing chip), you will need to create a new directory in the
+ <code class="code">config/cpu</code> hierarchy. Much like the <a class="link" href="internals.html#internals.os" title="Operating System">Operating system</a> setup,
+ there are no strict rules on how to organize the CPU configuration
+@@ -117,7 +116,7 @@
+ </p><p>The <code class="code">cpu_include_dir</code> sets default locations for the files controlling
+ <a class="link" href="internals.html#internals.thread_safety" title="Thread Safety">Thread safety</a> and <a class="link" href="internals.html#internals.numeric_limits" title="Numeric Limits">Numeric limits</a>, if the defaults are not
+ appropriate for your chip.
+- </p></div><div class="section" title="Character Types"><div class="titlepage"><div><div><h3 class="title"><a id="internals.char_types"></a>Character Types</h3></div></div></div><p>The library requires that you provide three header files to implement
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="internals.char_types"></a>Character Types</h3></div></div></div><p>The library requires that you provide three header files to implement
+ character classification, analogous to that provided by the C libraries
+ <code class="code">&lt;ctype.h&gt;</code> header. You can model these on the files provided in
+ <code class="code">config/os/generic</code>. However, these files will almost
+@@ -276,7 +275,7 @@
+ ++__low;
+ return __low;
+ }
+-</pre></div><div class="section" title="Thread Safety"><div class="titlepage"><div><div><h3 class="title"><a id="internals.thread_safety"></a>Thread Safety</h3></div></div></div><p>The C++ library string functionality requires a couple of atomic
++</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="internals.thread_safety"></a>Thread Safety</h3></div></div></div><p>The C++ library string functionality requires a couple of atomic
+ operations to provide thread-safety. If you don't take any special
+ action, the library will use stub versions of these functions that are
+ not thread-safe. They will work fine, unless your applications are
+@@ -331,7 +330,7 @@
+ {
+ *__mem += __val;
+ }
+-</pre></div><div class="section" title="Numeric Limits"><div class="titlepage"><div><div><h3 class="title"><a id="internals.numeric_limits"></a>Numeric Limits</h3></div></div></div><p>The C++ library requires information about the fundamental data types,
++</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="internals.numeric_limits"></a>Numeric Limits</h3></div></div></div><p>The C++ library requires information about the fundamental data types,
+ such as the minimum and maximum representable values of each type.
+ You can define each of these values individually, but it is usually
+ easiest just to indicate how many bits are used in each of the data
+@@ -343,7 +342,7 @@
+ do not have to provide the same definitions for each operating system.
+ To take that approach, create a new file called <code class="code">cpu_limits.h</code> in
+ your CPU configuration directory (see <a class="link" href="internals.html#internals.cpu" title="CPU">CPU</a>).
+- </p></div><div class="section" title="Libtool"><div class="titlepage"><div><div><h3 class="title"><a id="internals.libtool"></a>Libtool</h3></div></div></div><p>The C++ library is compiled, archived and linked with libtool.
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="internals.libtool"></a>Libtool</h3></div></div></div><p>The C++ library is compiled, archived and linked with libtool.
+ Explaining the full workings of libtool is beyond the scope of this
+ document, but there are a few, particular bits that are necessary for
+ porting.
+@@ -365,4 +364,4 @@
+ <code class="code">ltcf-c.sh</code> in the top-level directory. Find the switch statement
+ that sets <code class="code">archive_cmds</code>. Here, adjust the setting for your
+ operating system.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="documentation_hacking.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="test.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Writing and Generating Documentation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Test</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="documentation_hacking.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="test.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Writing and Generating Documentation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Test</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/policy_data_structures_using.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/policy_data_structures_using.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/policy_data_structures_using.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Using"><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" title="Prerequisites"><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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10;&#9;ISO C++&#10; , &#10;&#9;policy&#10; , &#10;&#9;container&#10; , &#10;&#9;data&#10; , &#10;&#9;structure&#10; , &#10;&#9;associated&#10; , &#10;&#9;tree&#10; , &#10;&#9;trie&#10; , &#10;&#9;hash&#10; , &#10;&#9;metaprogramming&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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
+ other libraries except the standard C++ library . All classes are
+ defined in namespace <code class="code">__gnu_pbds</code>. The library internally
+ uses macros beginning with <code class="code">PB_DS</code>, but
+@@ -11,11 +10,11 @@
+ Further dependencies are necessary to create the visual output
+ for the performance tests. To create these graphs, an
+ additional package is needed: <span class="command"><strong>pychart</strong></span>.
+- </p></div><div class="section" title="Organization"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.organization"></a>Organization</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.organization"></a>Organization</h3></div></div></div><p>
+ The various data structures are organized as follows.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Branch-Based
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
+ <code class="classname">basic_branch</code>
+ is an abstract base class for branched-based
+ associative-containers
+@@ -29,7 +28,7 @@
+ associative-containers
+ </p></li></ul></div></li><li class="listitem"><p>
+ Hash-Based
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
+ <code class="classname">basic_hash_table</code>
+ is an abstract base class for hash-based
+ associative-containers
+@@ -43,12 +42,12 @@
+ associative-containers
+ </p></li></ul></div></li><li class="listitem"><p>
+ List-Based
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
+ <code class="classname">list_update</code>
+ list-based update-policy associative container
+ </p></li></ul></div></li><li class="listitem"><p>
+ Heap-Based
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
+ <code class="classname">priority_queue</code>
+ A priority queue.
+ </p></li></ul></div></li></ul></div><p>
+@@ -62,7 +61,7 @@
+ In addition, there are the following diagnostics classes,
+ used to report errors specific to this library's data
+ structures.
+- </p><div class="figure"><a id="idp17768064"></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" title="Tutorial"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.tutorial"></a>Tutorial</h3></div></div></div><div class="section" title="Basic Use"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.basic"></a>Basic Use</h4></div></div></div><p>
++ </p><div class="figure"><a id="idm269984441456"></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>
+ For the most part, the policy-based containers containers in
+ namespace <code class="literal">__gnu_pbds</code> have the same interface as
+ the equivalent containers in the standard C++ library, except for
+@@ -186,7 +185,7 @@
+ </pre><p>
+ so all hash-based associative containers inherit the same
+ hash-functor accessor methods.
+- </p></div><div class="section" title="Configuring via Template Parameters"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.configuring"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.configuring"></a>
+ Configuring via Template Parameters
+ </h4></div></div></div><p>
+ In general, each of this library's containers is
+@@ -240,7 +239,7 @@
+ by one of them.</p><p>Note that as opposed to the
+ <code class="classname">std::priority_queue</code>,
+ <code class="classname">__gnu_pbds::priority_queue</code> is not a
+- sequence-adapter; it is a regular container.</p></div><div class="section" title="Querying Container Attributes"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.traits"></a>
++ sequence-adapter; it is a regular container.</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.traits"></a>
+ Querying Container Attributes
+ </h4></div></div></div><p></p><p>A containers underlying data structure
+ affect their performance; Unfortunately, they can also affect
+@@ -278,7 +277,7 @@
+ </pre><p>is the container's invalidation guarantee. Invalidation
+ guarantees are especially important regarding priority queues,
+ since in this library's design, iterators are practically the
+- only way to manipulate them.</p></div><div class="section" title="Point and Range Iteration"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.point_range_iteration"></a>
++ only way to manipulate them.</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.tutorial.point_range_iteration"></a>
+ Point and Range Iteration
+ </h4></div></div></div><p></p><p>This library differentiates between two types of methods
+ and iterators: point-type, and range-type. For example,
+@@ -377,11 +376,11 @@
+ </pre><p>
+ gives one of three pre-determined types that answer this
+ query.
+- </p></div></div><div class="section" title="Examples"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.examples"></a>Examples</h3></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="pbds.using.examples"></a>Examples</h3></div></div></div><p>
+ Additional code examples are provided in the source
+ distribution, as part of the regression and performance
+ testsuite.
+- </p><div class="section" title="Intermediate Use"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.examples.basic"></a>Intermediate Use</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.examples.basic"></a>Intermediate Use</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Basic use of maps:
+ <code class="filename">basic_map.cc</code>
+ </p></li><li class="listitem"><p>
+@@ -405,7 +404,7 @@
+ </p></li><li class="listitem"><p>
+ Conditionally erasing values from a priority queue:
+ <code class="filename">priority_queue_erase_if.cc</code>
+- </p></li></ul></div></div><div class="section" title="Querying with container_traits"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.examples.query"></a>Querying with <code class="classname">container_traits</code> </h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.examples.query"></a>Querying with <code class="classname">container_traits</code> </h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Using <code class="classname">container_traits</code> to query
+ about underlying data structure behavior:
+ <code class="filename">assoc_container_traits.cc</code>
+@@ -416,7 +415,7 @@
+ Using <code class="classname">container_traits</code>
+ to query about underlying data structure behavior:
+ <code class="filename">priority_queue_container_traits.cc</code>
+- </p></li></ul></div></div><div class="section" title="By Container Method"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.examples.container"></a>By Container Method</h4></div></div></div><p></p><div class="section" title="Hash-Based"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.using.examples.container.hash"></a>Hash-Based</h5></div></div></div><div class="section" title="size Related"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.hash.resize"></a>size Related</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="pbds.using.examples.container"></a>By Container Method</h4></div></div></div><p></p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.using.examples.container.hash"></a>Hash-Based</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.hash.resize"></a>size Related</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Setting the initial size of a hash-based container
+ object:
+ <code class="filename">hash_initial_size.cc</code>
+@@ -434,7 +433,7 @@
+ </p></li><li class="listitem"><p>
+ Changing the load factors of a hash-based container
+ object: <code class="filename">hash_load_set_change.cc</code>
+- </p></li></ul></div></div><div class="section" title="Hashing Function Related"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.hash.hashor"></a>Hashing Function Related</h6></div></div></div><p></p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.hash.hashor"></a>Hashing Function Related</h6></div></div></div><p></p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Using a modulo range-hashing function for the case of an
+ unknown skewed key distribution:
+ <code class="filename">hash_mod.cc</code>
+@@ -448,7 +447,7 @@
+ </p></li><li class="listitem"><p>
+ Writing a ranged-hash functor:
+ <code class="filename">ranged_hash.cc</code>
+- </p></li></ul></div></div></div><div class="section" title="Branch-Based"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.using.examples.container.branch"></a>Branch-Based</h5></div></div></div><div class="section" title="split or join Related"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.branch.split"></a>split or join Related</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.using.examples.container.branch"></a>Branch-Based</h5></div></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.branch.split"></a>split or join Related</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Joining two tree-based container objects:
+ <code class="filename">tree_join.cc</code>
+ </p></li><li class="listitem"><p>
+@@ -458,7 +457,7 @@
+ Order statistics while joining two tree-based container
+ objects:
+ <code class="filename">tree_order_statistics_join.cc</code>
+- </p></li></ul></div></div><div class="section" title="Node Invariants"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.branch.invariants"></a>Node Invariants</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.branch.invariants"></a>Node Invariants</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Using trees for order statistics:
+ <code class="filename">tree_order_statistics.cc</code>
+ </p></li><li class="listitem"><p>
+@@ -465,7 +464,7 @@
+ Augmenting trees to support operations on line
+ intervals:
+ <code class="filename">tree_intervals.cc</code>
+- </p></li></ul></div></div><div class="section" title="trie"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.branch.trie"></a>trie</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h6 class="title"><a id="pbds.using.examples.container.branch.trie"></a>trie</h6></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Using a PATRICIA trie for DNA strings:
+ <code class="filename">trie_dna.cc</code>
+ </p></li><li class="listitem"><p>
+@@ -472,7 +471,7 @@
+ Using a PATRICIA
+ trie for finding all entries whose key matches a given prefix:
+ <code class="filename">trie_prefix_search.cc</code>
+- </p></li></ul></div></div></div><div class="section" title="Priority Queues"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.using.examples.container.priority_queue"></a>Priority Queues</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="pbds.using.examples.container.priority_queue"></a>Priority Queues</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Cross referencing an associative container and a priority
+ queue: <code class="filename">priority_queue_xref.cc</code>
+ </p></li><li class="listitem"><p>
+@@ -480,4 +479,4 @@
+ very simple version of Dijkstra's shortest path
+ algorithm:
+ <code class="filename">priority_queue_dijkstra.cc</code>
+- </p></li></ul></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 22. Policy-Based Data Structures </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>
++ </p></li></ul></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="policy_data_structures.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="policy_data_structures.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures_design.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 22. Policy-Based Data Structures </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>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bugs.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bugs.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bugs.html (.../branches/gcc-4_7-branch)
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Bugs"><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" title="Implementation Bugs"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.impl"></a>Implementation Bugs</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ Information on known bugs, details on efforts to fix them, and
+ 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>,
+ with the category set to <code class="literal">libstdc++</code>.
+- </p></div><div class="section" title="Standard Bugs"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.iso"></a>Standard Bugs</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.status.bugs.iso"></a>Standard Bugs</h3></div></div></div><p>
+ Everybody's got issues. Even the C++ Standard Library.
+ </p><p>
+ The Library Working Group, or LWG, is the ISO subcommittee responsible
+@@ -35,7 +34,7 @@
+ <code class="constant">_GLIBCXX_RESOLVE_LIB_DEFECTS</code> for examples
+ of style. Note that we usually do not make changes to the
+ code until an issue has reached <a class="link" href="../ext/lwg-active.html#DR" target="_top">DR</a> status.
+- </p><div class="variablelist"><dl><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#5" target="_top">5</a>:
++ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#5" target="_top">5</a>:
+ <span class="emphasis"><em>string::compare specification questionable</em></span>
+ </span></dt><dd><p>This should be two overloaded functions rather than a single function.
+ </p></dd><dt><span class="term"><a class="link" href="../ext/lwg-defects.html#17" target="_top">17</a>:
+@@ -349,4 +348,4 @@
+ <span class="emphasis"><em>More algorithms that throw away information</em></span>
+ </span></dt><dd><p>The traditional HP / SGI return type and value is blessed
+ by the resolution of the DR.
+- </p></dd></dl></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="license.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="status.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">License </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 2. Setup</td></tr></table></div></body></html>
++ </p></dd></dl></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="license.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="status.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="setup.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">License </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 2. Setup</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt04.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt04.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt04.html (.../branches/gcc-4_7-branch)
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch30s03.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch30s03.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. 
+ Appendices
+-</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch30s03.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" title="Part IV.  Appendices"><div class="titlepage"><div><div><h1 class="title"><a id="appendix"></a>Part IV. 
++</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt03ch30s03.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. 
+ Appendices
+-</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.
++</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.
+ Contributing
+
+ </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.
+@@ -40,4 +39,4 @@
+ </a></span></dt><dt><span class="appendix"><a href="appendix_gfdl.html">E. GNU Free Documentation License</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="bk01pt03ch30s03.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="appendix_contributing.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Use </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix A. 
+ Contributing
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/ext_numerics.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/ext_numerics.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/ext_numerics.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 26. Numerics"><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>,
++</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>,
+ are extended with the following functions:
+ </p><pre class="programlisting">
+ power (x, n);
+@@ -21,4 +20,4 @@
+ <code class="code">value + 1</code> to<code class="code"> *(first + 1)</code> and so on."
+ </p><pre class="programlisting">
+ void iota(_ForwardIter first, _ForwardIter last, _Tp value);</pre><p>The <code class="code">iota</code> function is included in the ISO C++ 2011 standard.
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 25. Algorithms </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 27. Iterators</td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_algorithms.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_iterators.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 25. Algorithms </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 27. Iterators</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch20s02.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch20s02.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch20s02.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s03.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="bk01pt03ch20s03.html">Next</a></td></tr></table><hr /></div><div class="section" title="Design Issues"><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" title="Overview"><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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s03.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="bk01pt03ch20s03.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
+ describing the characteristics of the memory pool, a policy class
+ containing this pool that links instantiation types to common or
+ individual pools, and a class inheriting from the policy class that is
+@@ -36,4 +35,4 @@
+ </pre><p> This class has the interface required for standard library allocator
+ classes, namely member functions <code class="code">allocate</code> and
+ <code class="code">deallocate</code>, plus others.
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="mt_allocator.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 20. The mt_allocator </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="mt_allocator.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 20. The mt_allocator </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch21s02.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch21s02.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch21s02.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Implementation"><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" title="Free List Store"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.free_list_store"></a>Free List Store</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ The Free List Store (referred to as FLS for the remaining part of this
+ document) is the Global memory pool that is shared by all instances of
+ the bitmapped allocator instantiated for any type. This maintains a
+@@ -48,7 +47,7 @@
+ else return false.</p></li></ol></div><p>
+ Currently, (3) is being used with a value of 36% Maximum wastage per
+ Super Block.
+- </p></div><div class="section" title="Super Block"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.super_block"></a>Super Block</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.super_block"></a>Super Block</h3></div></div></div><p>
+ A super block is the block of memory acquired from the FLS from
+ which the bitmap allocator carves out memory for single objects
+ and satisfies the user's requests. These super blocks come in
+@@ -63,7 +62,7 @@
+ The super block is contained in the FLS, and the FLS is responsible for
+ getting / returning Super Bocks to and from the OS using operator new
+ as defined by the C++ standard.
+- </p></div><div class="section" title="Super Block Data Layout"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.super_block_data"></a>Super Block Data Layout</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.super_block_data"></a>Super Block Data Layout</h3></div></div></div><p>
+ Each Super Block will be of some size that is a multiple of the
+ number of Bits Per Block. Typically, this value is chosen as
+ Bits_Per_Byte x sizeof(size_t). On an x86 system, this gives the
+@@ -76,7 +75,7 @@
+ </p><p>
+ Consider a block of size 64 ints. In memory, it would look like this:
+ (assume a 32-bit system where, size_t is a 32-bit entity).
+- </p><div class="table"><a id="idp17461952"></a><p class="title"><strong>Table 21.1. Bitmap Allocator Memory Map</strong></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -&gt; Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p>
++ </p><div class="table"><a id="idm269984747328"></a><p class="title"><strong>Table 21.1. Bitmap Allocator Memory Map</strong></p><div class="table-contents"><table summary="Bitmap Allocator Memory Map" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /><col align="left" class="c5" /></colgroup><tbody><tr><td align="left">268</td><td align="left">0</td><td align="left">4294967295</td><td align="left">4294967295</td><td align="left">Data -&gt; Space for 64 ints</td></tr></tbody></table></div></div><br class="table-break" /><p>
+ The first Column(268) represents the size of the Block in bytes as
+ seen by the Bitmap Allocator. Internally, a global free list is
+ used to keep track of the free blocks used and given back by the
+@@ -103,7 +102,7 @@
+ The 3rd 4x2 is size of the bitmap itself, which is the size of 32-bits
+ x 2,
+ which is 8-bytes, or 2 x sizeof(size_t).
+- </p></div><div class="section" title="Maximum Wasted Percentage"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.max_wasted"></a>Maximum Wasted Percentage</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.max_wasted"></a>Maximum Wasted Percentage</h3></div></div></div><p>
+ This has nothing to do with the algorithm per-se,
+ only with some vales that must be chosen correctly to ensure that the
+ allocator performs well in a real word scenario, and maintains a good
+@@ -128,7 +127,7 @@
+ </p><p>
+ Thus, knowing these values, and based on the sizeof(value_type), we may
+ create a function that returns the Max_Wastage_Percentage for us to use.
+- </p></div><div class="section" title="allocate"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.allocate"></a><code class="function">allocate</code></h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.allocate"></a><code class="function">allocate</code></h3></div></div></div><p>
+ The allocate function is specialized for single object allocation
+ ONLY. Thus, ONLY if n == 1, will the bitmap_allocator's
+ specialized algorithm be used. Otherwise, the request is satisfied
+@@ -148,7 +147,7 @@
+ </p></li><li class="listitem"><p>
+ Is there any block in whatever region of memory that we own
+ free? This is done by checking
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ The use count for each super block, and if that fails then
+ </p></li><li class="listitem"><p>
+ The individual bit-maps for each super block.
+@@ -163,7 +162,7 @@
+ This process involves Refilling the internal exponentially
+ growing memory pool. The said effect is achieved by calling
+ _S_refill_pool which does the following:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Gets more memory from the Global Free List of the Required
+ size.
+ </p></li><li class="listitem"><p>
+@@ -183,7 +182,7 @@
+ Thus, you can clearly see that the allocate function is nothing but a
+ combination of the next-fit and first-fit algorithm optimized ONLY for
+ single object allocations.
+-</p></div><div class="section" title="deallocate"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.deallocate"></a><code class="function">deallocate</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.deallocate"></a><code class="function">deallocate</code></h3></div></div></div><p>
+ The deallocate function again is specialized for single objects ONLY.
+ For all n belonging to &gt; 1, the operator delete is called without
+ further ado, and the deallocate function returns.
+@@ -214,7 +213,7 @@
+ the vector. While doing this, we also make sure that the basic
+ invariant is maintained by making sure that _S_last_request and
+ _S_last_dealloc_index point to valid locations within the vector.
+- </p></div><div class="section" title="Questions"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.questions"></a>Questions</h3></div></div></div><div class="section" title="1"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.question.1"></a>1</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.questions"></a>Questions</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.question.1"></a>1</h4></div></div></div><p>
+ Q1) The "Data Layout" section is
+ cryptic. I have no idea of what you are trying to say. Layout of what?
+ The free-list? Each bitmap? The Super Block?
+@@ -224,7 +223,7 @@
+ general formula for calculating the size of a super block is
+ 32 x sizeof(value_type) x 2^n, where n ranges from 0 to 32 for 32-bit
+ systems.
+- </p></div><div class="section" title="2"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.question.2"></a>2</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.question.2"></a>2</h4></div></div></div><p>
+ And since I just mentioned the
+ term `each bitmap', what in the world is meant by it? What does each
+ bitmap manage? How does it relate to the super block? Is the Super
+@@ -241,7 +240,7 @@
+ blocks' status. Each bit-map is made up of a number of size_t,
+ whose exact number for a super-block of a given size I have just
+ mentioned.
+- </p></div><div class="section" title="3"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.question.3"></a>3</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="bitmap.impl.question.3"></a>3</h4></div></div></div><p>
+ How do the allocate and deallocate functions work in regard to
+ bitmaps?
+ </p><p>
+@@ -270,7 +269,7 @@
+ </p><p>
+ The bit-map now looks like this:
+ 1111111111111111111111111111111111111111111111111111111111111110
+- </p></div></div><div class="section" title="Locality"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.locality"></a>Locality</h3></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.locality"></a>Locality</h3></div></div></div><p>
+ Another issue would be whether to keep the all bitmaps in a
+ separate area in memory, or to keep them near the actual blocks
+ that will be given out or allocated for the client. After some
+@@ -287,7 +286,7 @@
+ new_allocator's book keeping overhead is too much for small objects and
+ single object allocations, though it preserves the locality of blocks
+ very well when they are returned back to the allocator.
+- </p></div><div class="section" title="Overhead and Grow Policy"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.grow_policy"></a>Overhead and Grow Policy</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="bitmap.impl.grow_policy"></a>Overhead and Grow Policy</h3></div></div></div><p>
+ Expected overhead per block would be 1 bit in memory. Also, once
+ the address of the free list has been found, the cost for
+ allocation/deallocation would be negligible, and is supposed to be
+@@ -310,4 +309,4 @@
+ sizeof(size_t) x 8 which is the number of bits in an integer,
+ which can fit exactly in a CPU register. Hence, the term given is
+ exponential growth of the internal pool.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bitmap_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 21. The bitmap_allocator </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 22. Policy-Based Data Structures</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bitmap_allocator.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bitmap_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="policy_data_structures.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 21. The bitmap_allocator </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 22. Policy-Based Data Structures</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03pr01.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03pr01.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03pr01.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Extensions
+
+-</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="idp16390720"></a></h1></div></div></div><p>
++</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="idm269985816416"></a></h1></div></div></div><p>
+ Here we will make an attempt at describing the non-Standard
+ extensions to the library. Some of these are from older versions of
+ standard library components, namely SGI's STL, and some of these are
+@@ -24,4 +23,4 @@
+ </p></li></ol></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="extensions.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_compile_checks.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Part III. 
+ Extensions
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 16. Compile Time Checks</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 16. Compile Time Checks</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/memory.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/memory.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/memory.html (.../branches/gcc-4_7-branch)
+@@ -1,15 +1,14 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Utilities
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr></table><hr /></div><div class="section" title="Memory"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.memory"></a>Memory</h2></div></div></div><p>
++</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>
+ Memory contains three general areas. First, function and operator
+ calls via <code class="function">new</code> and <code class="function">delete</code>
+ operator or member function calls. Second, allocation via
+ <code class="classname">allocator</code>. And finally, smart pointer and
+ intelligent pointer abstractions.
+- </p><div class="section" title="Allocators"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.allocator"></a>Allocators</h3></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.allocator"></a>Allocators</h3></div></div></div><p>
+ Memory management for Standard Library entities is encapsulated in a
+ class template called <code class="classname">allocator</code>. The
+ <code class="classname">allocator</code> abstraction is used throughout the
+@@ -17,9 +16,9 @@
+ algorithms, and parts of iostreams. This class, and base classes of
+ it, are the superset of available free store (<span class="quote">“<span class="quote">heap</span>”</span>)
+ management classes.
+-</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.req"></a>Requirements</h4></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.req"></a>Requirements</h4></div></div></div><p>
+ The C++ standard only gives a few directives in this area:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ When you add elements to a container, and the container must
+ allocate more memory to hold them, the container makes the
+ request via its <span class="type">Allocator</span> template
+@@ -54,7 +53,7 @@
+ </p></li></ul></div><p>
+ Complete details can be found in the C++ standard, look in
+ <code class="constant">[20.4 Memory]</code>.
+- </p></div><div class="section" title="Design Issues"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.design_issues"></a>Design Issues</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.design_issues"></a>Design Issues</h4></div></div></div><p>
+ The easiest way of fulfilling the requirements is to call
+ <code class="function">operator new</code> each time a container needs
+ memory, and to call <code class="function">operator delete</code> each time
+@@ -93,7 +92,7 @@
+ or loading and unloading shared objects in memory. As such, using
+ caching allocators on systems that do not support
+ <code class="function">abi::__cxa_atexit</code> is not recommended.
+- </p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.impl"></a>Implementation</h4></div></div></div><div class="section" title="Interface Design"><div class="titlepage"><div><div><h5 class="title"><a id="idp13894640"></a>Interface Design</h5></div></div></div><p>
++ </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="idm269988298944"></a>Interface Design</h5></div></div></div><p>
+ The only allocator interface that
+ is supported is the standard C++ interface. As such, all STL
+ containers have been adjusted, and all external allocators have
+@@ -106,7 +105,7 @@
+ </p><p>
+ The base class that <code class="classname">allocator</code> is derived from
+ may not be user-configurable.
+-</p></div><div class="section" title="Selecting Default Allocation Policy"><div class="titlepage"><div><div><h5 class="title"><a id="idp13898192"></a>Selecting Default Allocation Policy</h5></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269988295392"></a>Selecting Default Allocation Policy</h5></div></div></div><p>
+ It's difficult to pick an allocation strategy that will provide
+ maximum utility, without excessively penalizing some behavior. In
+ fact, it's difficult just deciding which typical actions to measure
+@@ -143,7 +142,7 @@
+ The current default choice for
+ <code class="classname">allocator</code> is
+ <code class="classname">__gnu_cxx::new_allocator</code>.
+- </p></div><div class="section" title="Disabling Memory Caching"><div class="titlepage"><div><div><h5 class="title"><a id="idp13911488"></a>Disabling Memory Caching</h5></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269988282096"></a>Disabling Memory Caching</h5></div></div></div><p>
+ In use, <code class="classname">allocator</code> may allocate and
+ deallocate using implementation-specified strategies and
+ heuristics. Because of this, every call to an allocator object's
+@@ -179,7 +178,7 @@
+ environment, it likely means that you linked against objects
+ built against the older library (objects which might still using the
+ cached allocations...).
+- </p></div></div><div class="section" title="Using a Specific Allocator"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.using"></a>Using a Specific Allocator</h4></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.using"></a>Using a Specific Allocator</h4></div></div></div><p>
+ You can specify different memory management schemes on a
+ per-container basis, by overriding the default
+ <span class="type">Allocator</span> template parameter. For example, an easy
+@@ -190,7 +189,7 @@
+ Likewise, a debugging form of whichever allocator is currently in use:
+ </p><pre class="programlisting">
+ std::deque &lt;int, __gnu_cxx::debug_allocator&lt;std::allocator&lt;int&gt; &gt; &gt; debug_deque;
+- </pre></div><div class="section" title="Custom Allocators"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.custom"></a>Custom Allocators</h4></div></div></div><p>
++ </pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.custom"></a>Custom Allocators</h4></div></div></div><p>
+ Writing a portable C++ allocator would dictate that the interface
+ would look much like the one specified for
+ <code class="classname">allocator</code>. Additional member functions, but
+@@ -199,7 +198,7 @@
+ Probably the best place to start would be to copy one of the
+ extension allocators: say a simple one like
+ <code class="classname">new_allocator</code>.
+- </p></div><div class="section" title="Extension Allocators"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.ext"></a>Extension Allocators</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.ext"></a>Extension Allocators</h4></div></div></div><p>
+ Several other allocators are provided as part of this
+ implementation. The location of the extension allocators and their
+ names have changed, but in all cases, functionality is
+@@ -308,33 +307,33 @@
+ A high-performance allocator that uses a bit-map to keep track
+ of the used and unused memory locations. It has its own
+ documentation, found <a class="link" href="bitmap_allocator.html" title="Chapter 21. The bitmap_allocator">here</a>.
+- </p></li></ol></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="allocator.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry"><a id="idp13965488"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269988227968"></a><p><span class="citetitle"><em class="citetitle">
+ ISO/IEC 14882:1998 Programming languages - C++
+ </em>. </span>
+ isoc++_1998
+- <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry" title="The Standard Librarian: What Are Allocators Good For?"><a id="idp13967328"></a><p><span class="title"><em>
+- <a class="link" href="http://www.drdobbs.com/cpp/184403759" target="_top">
++ <span class="pagenums">20.4 Memory. </span></p></div><div class="biblioentry"><a id="idm269988226128"></a><p><span class="title"><em>
++ <a class="link" href="http://www.drdobbs.com/the-standard-librarian-what-are-allocato/184403759" target="_top">
+ The Standard Librarian: What Are Allocators Good For?
+ </a>
+ </em>. </span><span class="author"><span class="firstname">Matt</span> <span class="surname">Austern</span>. </span><span class="publisher"><span class="publishername">
+ C/C++ Users Journal
+- . </span></span></p></div><div class="biblioentry" title="The Hoard Memory Allocator"><a id="idp13971056"></a><p><span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="idm269988222352"></a><p><span class="title"><em>
+ <a class="link" href="http://www.cs.umass.edu/~emery/hoard" target="_top">
+ The Hoard Memory Allocator
+ </a>
+- </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span></p></div><div class="biblioentry" title="Reconsidering Custom Memory Allocation"><a id="idp13973840"></a><p><span class="title"><em>
++ </em>. </span><span class="author"><span class="firstname">Emery</span> <span class="surname">Berger</span>. </span></p></div><div class="biblioentry"><a id="idm269988219568"></a><p><span class="title"><em>
+ <a class="link" href="http://www.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf" target="_top">
+ Reconsidering Custom Memory Allocation
+ </a>
+- </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" title="Allocator Types"><a id="idp13980000"></a><p><span class="title"><em>
++ </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="idm269988213408"></a><p><span class="title"><em>
+ <a class="link" href="http://www.angelikalanger.com/Articles/C++Report/Allocators/Allocators.html" target="_top">
+ Allocator Types
+ </a>
+ </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">
+ C/C++ Users Journal
+- . </span></span></p></div><div class="biblioentry"><a id="idp13984736"></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">
++ . </span></span></p></div><div class="biblioentry"><a id="idm269988208672"></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">
+ Addison Wesley
+- . </span></span></p></div><div class="biblioentry"><a id="idp13989168"></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" title="auto_ptr"><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" title="Limitations"><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
++ . </span></span></p></div><div class="biblioentry"><a id="idm269988204240"></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
+ happen with misuse of the <code class="classname">auto_ptr</code> class
+ template (called <acronym class="acronym">AP</acronym> here) would take some
+ time. Suffice it to say that the use of <acronym class="acronym">AP</acronym>
+@@ -385,7 +384,7 @@
+ to die. AP is trivial to write, however, so you could write your
+ own <code class="code">auto_array_ptr</code> for that situation (in fact, this has
+ been done many times; check the mailing lists, Usenet, Boost, etc).
+- </p></div><div class="section" title="Use in Containers"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.using"></a>Use in Containers</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="auto_ptr.using"></a>Use in Containers</h4></div></div></div><p>
+ </p><p>All of the <a class="link" href="containers.html" title="Chapter 9.  Containers">containers</a>
+ described in the standard library require their contained types
+ to have, among other things, a copy constructor like this:
+@@ -421,16 +420,16 @@
+ }
+ </pre><p>
+ Should you try this with the checks enabled, you will see an error.
+- </p></div></div><div class="section" title="shared_ptr"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.shared_ptr"></a>shared_ptr</h3></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.util.memory.shared_ptr"></a>shared_ptr</h3></div></div></div><p>
+ The shared_ptr class template stores a pointer, usually obtained via new,
+ and implements shared ownership semantics.
+-</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.req"></a>Requirements</h4></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.req"></a>Requirements</h4></div></div></div><p>
+ </p><p>
+ The standard deliberately doesn't require a reference-counted
+ implementation, allowing other techniques such as a
+ circular-linked-list.
+ </p><p>
+- </p></div><div class="section" title="Design Issues"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.design_issues"></a>Design Issues</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.design_issues"></a>Design Issues</h4></div></div></div><p>
+ The <code class="classname">shared_ptr</code> code is kindly donated to GCC by the Boost
+ project and the original authors of the code. The basic design and
+ algorithms are from Boost, the notes below describe details specific to
+@@ -444,7 +443,7 @@
+ Derived classes override those functions to destroy resources in a context
+ where the correct dynamic type is known. This is an application of the
+ technique known as type erasure.
+- </p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.impl"></a>Implementation</h4></div></div></div><div class="section" title="Class Hierarchy"><div class="titlepage"><div><div><h5 class="title"><a id="idp15484560"></a>Class Hierarchy</h5></div></div></div><p>
++ </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="idm269986714912"></a>Class Hierarchy</h5></div></div></div><p>
+ A <code class="classname">shared_ptr&lt;T&gt;</code> contains a pointer of
+ type <span class="type">T*</span> and an object of type
+ <code class="classname">__shared_count</code>. The shared_count contains a
+@@ -451,7 +450,7 @@
+ pointer of type <span class="type">_Sp_counted_base*</span> which points to the
+ object that maintains the reference-counts and destroys the managed
+ resource.
+- </p><div class="variablelist"><dl><dt><span class="term"><code class="classname">_Sp_counted_base&lt;Lp&gt;</code></span></dt><dd><p>
++ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="classname">_Sp_counted_base&lt;Lp&gt;</code></span></dt><dd><p>
+ The base of the hierarchy is parameterized on the lock policy (see below.)
+ _Sp_counted_base doesn't depend on the type of pointer being managed,
+ it only maintains the reference counts and calls virtual functions when
+@@ -491,9 +490,9 @@
+ aliasing constructor, make_shared &amp; allocate_shared. Additionally,
+ the constructors taking <code class="classname">auto_ptr</code> parameters are
+ deprecated in C++11 mode.
+- </p></div><div class="section" title="Thread Safety"><div class="titlepage"><div><div><h5 class="title"><a id="idp15507072"></a>Thread Safety</h5></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269986692400"></a>Thread Safety</h5></div></div></div><p>
+ The
+-<a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
++<a class="link" href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm#ThreadSafety" target="_top">Thread
+ Safety</a> section of the Boost shared_ptr documentation says "shared_ptr
+ objects offer the same level of thread safety as built-in types."
+ The implementation must ensure that concurrent updates to separate shared_ptr
+@@ -536,7 +535,7 @@
+ shared_ptr in libstdc++ the compiler and library are fixed, which
+ makes things much simpler: we have an atomic CAS or we don't, see Lock
+ Policy below for details.
+-</p></div><div class="section" title="Selecting Lock Policy"><div class="titlepage"><div><div><h5 class="title"><a id="idp15514368"></a>Selecting Lock Policy</h5></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269986685104"></a>Selecting Lock Policy</h5></div></div></div><p>
+ </p><p>
+ There is a single <code class="classname">_Sp_counted_base</code> class,
+ which is a template parameterized on the enum
+@@ -577,7 +576,7 @@
+ <code class="filename">ext/atomicity.h</code>, which detect if the program
+ is multi-threaded. If only one thread of execution exists in
+ the program then less expensive non-atomic operations are used.
+- </p></div><div class="section" title="Related functions and classes"><div class="titlepage"><div><div><h5 class="title"><a id="idp15528992"></a>Related functions and classes</h5></div></div></div><div class="variablelist"><dl><dt><span class="term"><code class="code">dynamic_pointer_cast</code>, <code class="code">static_pointer_cast</code>,
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269986670480"></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>,
+ <code class="code">const_pointer_cast</code></span></dt><dd><p>
+ As noted in N2351, these functions can be implemented non-intrusively using
+ the alias constructor. However the aliasing constructor is only available
+@@ -610,13 +609,13 @@
+ As well as the extra constructors, this implementation also needs some
+ members of _Sp_counted_deleter to be protected where they could otherwise
+ be private.
+- </p></dd></dl></div></div></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.using"></a>Use</h4></div></div></div><div class="section" title="Examples"><div class="titlepage"><div><div><h5 class="title"><a id="idp15545344"></a>Examples</h5></div></div></div><p>
++ </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="idm269986654128"></a>Examples</h5></div></div></div><p>
+ Examples of use can be found in the testsuite, under
+ <code class="filename">testsuite/tr1/2_general_utilities/shared_ptr</code>,
+ <code class="filename">testsuite/20_util/shared_ptr</code>
+ and
+ <code class="filename">testsuite/20_util/weak_ptr</code>.
+- </p></div><div class="section" title="Unresolved Issues"><div class="titlepage"><div><div><h5 class="title"><a id="idp15548928"></a>Unresolved Issues</h5></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="idm269986650544"></a>Unresolved Issues</h5></div></div></div><p>
+ The <span class="emphasis"><em><code class="classname">shared_ptr</code> atomic access</em></span>
+ clause in the C++11 standard is not implemented in GCC.
+ </p><p>
+@@ -652,33 +651,33 @@
+ </p><p>
+ tr1::_Sp_deleter could be a private member of tr1::__shared_count but it
+ would alter the ABI.
+- </p></div></div><div class="section" title="Acknowledgments"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.ack"></a>Acknowledgments</h4></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.ack"></a>Acknowledgments</h4></div></div></div><p>
+ The original authors of the Boost shared_ptr, which is really nice
+ code to work with, Peter Dimov in particular for his help and
+ invaluable advice on thread safety. Phillip Jordan and Paolo
+ Carlini for the lock policy implementation.
+- </p></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h4 class="title"><a id="shared_ptr.biblio"></a>Bibliography</h4></div></div></div><div class="biblioentry" title="Improving shared_ptr for C++0x, Revision 2"><a id="idp15560160"></a><p><span class="title"><em>
++ </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="idm269986639184"></a><p><span class="title"><em>
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm" target="_top">
+ Improving shared_ptr for C++0x, Revision 2
+ </a>
+ </em>. </span><span class="subtitle">
+ N2351
+- . </span></p></div><div class="biblioentry" title="C++ Standard Library Active Issues List"><a id="idp15562448"></a><p><span class="title"><em>
++ . </span></p></div><div class="biblioentry"><a id="idm269986636896"></a><p><span class="title"><em>
+ <a class="link" href="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html" target="_top">
+ C++ Standard Library Active Issues List
+ </a>
+ </em>. </span><span class="subtitle">
+ N2456
+- . </span></p></div><div class="biblioentry" title="Working Draft, Standard for Programming Language C++"><a id="idp15564736"></a><p><span class="title"><em>
++ . </span></p></div><div class="biblioentry"><a id="idm269986634608"></a><p><span class="title"><em>
+ <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf" target="_top">
+ Working Draft, Standard for Programming Language C++
+ </a>
+ </em>. </span><span class="subtitle">
+ N2461
+- . </span></p></div><div class="biblioentry" title="Boost C++ Libraries documentation, shared_ptr"><a id="idp15567040"></a><p><span class="title"><em>
++ . </span></p></div><div class="biblioentry"><a id="idm269986632304"></a><p><span class="title"><em>
+ <a class="link" href="http://boost.org/libs/smart_ptr/shared_ptr.htm" target="_top">
+ Boost C++ Libraries documentation, shared_ptr
+ </a>
+ </em>. </span><span class="subtitle">
+ N2461
+- . </span></p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Pairs </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Traits</td></tr></table></div></body></html>
++ . </span></p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="pairs.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="traits.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Pairs </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Traits</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/api.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/api.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/api.html (.../branches/gcc-4_7-branch)
+@@ -1,11 +1,10 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="ISO C++, api, evolution, deprecation, history" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Porting and Maintenance
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr></table><hr /></div><div class="section" title="API Evolution and Deprecation History"><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>
++</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>
+ A list of user-visible changes, in chronological order
+-</p><div class="section" title="3.0"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_300"></a><code class="constant">3.0</code></h3></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_300"></a><code class="constant">3.0</code></h3></div></div></div><p>
+ Extensions moved to <code class="filename">include/ext</code>.
+ </p><p>
+ Include files from the SGI/HP sources that pre-date the ISO standard
+@@ -14,7 +13,7 @@
+ is added that notifies on inclusion (<code class="literal">-Wno-deprecated</code>
+ deactivates the warning.)
+ </p><p>Deprecated include <code class="filename">backward/strstream</code> added.</p><p>Removal of include <code class="filename">builtinbuf.h</code>, <code class="filename">indstream.h</code>, <code class="filename">parsestream.h</code>, <code class="filename">PlotFile.h</code>, <code class="filename">SFile.h</code>, <code class="filename">stdiostream.h</code>, and <code class="filename">stream.h</code>.
+-</p></div><div class="section" title="3.1"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_310"></a><code class="constant">3.1</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_310"></a><code class="constant">3.1</code></h3></div></div></div><p>
+ </p><p>
+ Extensions from SGI/HP moved from <code class="code">namespace std</code>
+ to <code class="code">namespace __gnu_cxx</code>. As part of this, the following
+@@ -26,7 +25,7 @@
+ Extensions to tree data structures added in <code class="filename">ext/rb_tree</code>.
+ </p><p>
+ Removal of <code class="filename">ext/tree</code>, moved to <code class="filename">backward/tree.h</code>.
+-</p></div><div class="section" title="3.2"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_320"></a><code class="constant">3.2</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_320"></a><code class="constant">3.2</code></h3></div></div></div><p>
+ </p><p>Symbol versioning introduced for shared library.</p><p>Removal of include <code class="filename">backward/strstream.h</code>.</p><p>Allocator changes. Change <code class="code">__malloc_alloc</code> to <code class="code">malloc_allocator</code> and <code class="code">__new_alloc</code> to <code class="code">new_allocator</code>. </p><p> For GCC releases from 2.95 through the 3.1 series, defining
+ <code class="literal">__USE_MALLOC</code> on the gcc command line would change the
+ default allocation strategy to instead use <code class="code"> malloc</code> and
+@@ -33,8 +32,8 @@
+ <code class="function">free</code>. (This same functionality is now spelled <code class="literal">_GLIBCXX_FORCE_NEW</code>, see
+ <a class="link" href="using_macros.html" title="Macros">this page</a>
+ for details.
+- </p><p>Error handling in iostreams cleaned up, made consistent. </p></div><div class="section" title="3.3"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_330"></a><code class="constant">3.3</code></h3></div></div></div><p>
+- </p></div><div class="section" title="3.4"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_340"></a><code class="constant">3.4</code></h3></div></div></div><p>
++ </p><p>Error handling in iostreams cleaned up, made consistent. </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_330"></a><code class="constant">3.3</code></h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_340"></a><code class="constant">3.4</code></h3></div></div></div><p>
+ </p><p>
+ Large file support.
+ </p><p> Extensions for generic characters and <code class="code">char_traits</code> added in <code class="filename">ext/pod_char_traits.h</code>.
+@@ -75,11 +74,11 @@
+ <span class="type">__alloc</span> to select an underlying allocator that
+ satisfied memory allocation requests. The selection of this
+ underlying allocator was not user-configurable.
+- </p><div class="table"><a id="idp22990128"></a><p class="title"><strong>Table B.6. Extension Allocators</strong></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="classname">std::__new_alloc</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::malloc_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template&lt;int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template&lt;bool,int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left"><code class="classname">__gnu_cxx::bitmap_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p> Releases after gcc-3.4 have continued to add to the collection
++ </p><div class="table"><a id="idm269979221808"></a><p class="title"><strong>Table B.6. Extension Allocators</strong></p><div class="table-contents"><table summary="Extension Allocators" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Allocator (3.4)</th><th align="left">Header (3.4)</th><th align="left">Allocator (3.[0-3])</th><th align="left">Header (3.[0-3])</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::new_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/new_allocator.h</code></td><td align="left"><code class="classname">std::__new_alloc</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::malloc_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/malloc_allocator.h</code></td><td align="left"><code class="classname">std::__malloc_alloc_template&lt;int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::debug_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/debug_allocator.h</code></td><td align="left"><code class="classname">std::debug_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__pool_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/pool_allocator.h</code></td><td align="left"><code class="classname">std::__default_alloc_template&lt;bool,int&gt;</code></td><td align="left"><code class="filename">memory</code></td></tr><tr><td align="left"><code class="classname">__gnu_cxx::__mt_alloc&lt;T&gt;</code></td><td align="left"><code class="filename">ext/mt_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr><tr><td align="left"><code class="classname">__gnu_cxx::bitmap_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/bitmap_allocator.h</code></td><td align="left"> </td><td align="left"> </td></tr></tbody></table></div></div><br class="table-break" /><p> Releases after gcc-3.4 have continued to add to the collection
+ of available allocators. All of these new allocators are
+ standard-style. The following table includes details, along with
+ the first released version of GCC that included the extension allocator.
+- </p><div class="table"><a id="idp23017760"></a><p class="title"><strong>Table B.7. Extension Allocators Continued</strong></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left">4.0.0</td></tr><tr><td align="left"><code class="classname">__gnu_cxx::throw_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left">4.2.0</td></tr></tbody></table></div></div><br class="table-break" /><p>
++ </p><div class="table"><a id="idm269979194176"></a><p class="title"><strong>Table B.7. Extension Allocators Continued</strong></p><div class="table-contents"><table summary="Extension Allocators Continued" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /></colgroup><thead><tr><th align="left">Allocator</th><th align="left">Include</th><th align="left">Version</th></tr></thead><tbody><tr><td align="left"><code class="classname">__gnu_cxx::array_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/array_allocator.h</code></td><td align="left">4.0.0</td></tr><tr><td align="left"><code class="classname">__gnu_cxx::throw_allocator&lt;T&gt;</code></td><td align="left"><code class="filename">ext/throw_allocator.h</code></td><td align="left">4.2.0</td></tr></tbody></table></div></div><br class="table-break" /><p>
+ Debug mode first appears.
+ </p><p>
+ Precompiled header support <acronym class="acronym">PCH</acronym> support.
+@@ -89,7 +88,7 @@
+ Extension <code class="filename">ext/stdio_sync_filebuf.h</code> added.
+ </p><p>
+ Extension <code class="filename">ext/demangle.h</code> added.
+-</p></div><div class="section" title="4.0"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_400"></a><code class="constant">4.0</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_400"></a><code class="constant">4.0</code></h3></div></div></div><p>
+ </p><p>
+ TR1 features first appear.
+ </p><p>
+@@ -98,7 +97,7 @@
+ Extension <code class="code">codecvt</code> specializations moved to <code class="filename">ext/codecvt_specializations.h</code>.
+ </p><p>
+ Removal of <code class="filename">ext/demangle.h</code>.
+-</p></div><div class="section" title="4.1"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_410"></a><code class="constant">4.1</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_410"></a><code class="constant">4.1</code></h3></div></div></div><p>
+ </p><p>
+ Removal of <code class="filename">cassert</code> from all standard headers: now has to be explicitly included for <code class="code">std::assert</code> calls.
+ </p><p> Extensions for policy-based data structures first added. New includes,
+@@ -105,7 +104,7 @@
+ types, namespace <code class="code">pb_assoc</code>.
+ </p><p> Extensions for typelists added in <code class="filename">ext/typelist.h</code>.
+ </p><p> Extension for policy-based <code class="code">basic_string</code> first added: <code class="code">__gnu_cxx::__versa_string</code> in <code class="filename">ext/vstring.h</code>.
+-</p></div><div class="section" title="4.2"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_420"></a><code class="constant">4.2</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_420"></a><code class="constant">4.2</code></h3></div></div></div><p>
+ </p><p> Default visibility attributes applied to <code class="code">namespace std</code>. Support for <code class="code">-fvisibility</code>.
+ </p><p>TR1 <code class="filename">random</code>, <code class="filename">complex</code>, and C compatibility headers added.</p><p> Extensions for concurrent programming consolidated
+ into <code class="filename">ext/concurrence.h</code> and <code class="filename">ext/atomicity.h</code>,
+@@ -120,13 +119,13 @@
+ std::__debug</code> and extensions in <code class="code">namespace
+ __gnu_cxx::__debug</code>.</p><p> Extensions added: <code class="filename">ext/typelist.h</code>
+ and <code class="filename">ext/throw_allocator.h</code>.
+-</p></div><div class="section" title="4.3"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_430"></a><code class="constant">4.3</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_430"></a><code class="constant">4.3</code></h3></div></div></div><p>
+ </p><p>
+ C++0X features first appear.
+ </p><p>TR1 <code class="filename">regex</code> and <code class="filename">cmath</code>'s mathematical special function added.
+ </p><p>
+ Backward include edit.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Removed</p><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>Removed</p><p>
+ <code class="filename">algobase.h</code> <code class="filename">algo.h</code> <code class="filename">alloc.h</code> <code class="filename">bvector.h</code> <code class="filename">complex.h</code>
+ <code class="filename">defalloc.h</code> <code class="filename">deque.h</code> <code class="filename">fstream.h</code> <code class="filename">function.h</code> <code class="filename">hash_map.h</code> <code class="filename">hash_set.h</code>
+ <code class="filename">hashtable.h</code> <code class="filename">heap.h</code> <code class="filename">iomanip.h</code> <code class="filename">iostream.h</code> <code class="filename">istream.h</code> <code class="filename">iterator.h</code>
+@@ -138,7 +137,7 @@
+ <code class="filename">auto_ptr.h</code> and <code class="filename">binders.h</code>
+ </p></li></ul></div><p>
+ Header dependency streamlining.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="filename">algorithm</code> no longer includes <code class="filename">climits</code>, <code class="filename">cstring</code>, or <code class="filename">iosfwd</code> </p></li><li class="listitem"><p><code class="filename">bitset</code> no longer includes <code class="filename">istream</code> or <code class="filename">ostream</code>, adds <code class="filename">iosfwd</code> </p></li><li class="listitem"><p><code class="filename">functional</code> no longer includes <code class="filename">cstddef</code></p></li><li class="listitem"><p><code class="filename">iomanip</code> no longer includes <code class="filename">istream</code>, <code class="filename">istream</code>, or <code class="filename">functional</code>, adds <code class="filename">ioswd</code> </p></li><li class="listitem"><p><code class="filename">numeric</code> no longer includes <code class="filename">iterator</code></p></li><li class="listitem"><p><code class="filename">string</code> no longer includes <code class="filename">algorithm</code> or <code class="filename">memory</code></p></li><li class="listitem"><p><code class="filename">valarray</code> no longer includes <code class="filename">numeric</code> or <code class="filename">cstdlib</code></p></li><li class="listitem"><p><code class="filename">tr1/hashtable</code> no longer includes <code class="filename">memory</code> or <code class="filename">functional</code></p></li><li class="listitem"><p><code class="filename">tr1/memory</code> no longer includes <code class="filename">algorithm</code></p></li><li class="listitem"><p><code class="filename">tr1/random</code> no longer includes <code class="filename">algorithm</code> or <code class="filename">fstream</code></p></li></ul></div><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="filename">algorithm</code> no longer includes <code class="filename">climits</code>, <code class="filename">cstring</code>, or <code class="filename">iosfwd</code> </p></li><li class="listitem"><p><code class="filename">bitset</code> no longer includes <code class="filename">istream</code> or <code class="filename">ostream</code>, adds <code class="filename">iosfwd</code> </p></li><li class="listitem"><p><code class="filename">functional</code> no longer includes <code class="filename">cstddef</code></p></li><li class="listitem"><p><code class="filename">iomanip</code> no longer includes <code class="filename">istream</code>, <code class="filename">istream</code>, or <code class="filename">functional</code>, adds <code class="filename">ioswd</code> </p></li><li class="listitem"><p><code class="filename">numeric</code> no longer includes <code class="filename">iterator</code></p></li><li class="listitem"><p><code class="filename">string</code> no longer includes <code class="filename">algorithm</code> or <code class="filename">memory</code></p></li><li class="listitem"><p><code class="filename">valarray</code> no longer includes <code class="filename">numeric</code> or <code class="filename">cstdlib</code></p></li><li class="listitem"><p><code class="filename">tr1/hashtable</code> no longer includes <code class="filename">memory</code> or <code class="filename">functional</code></p></li><li class="listitem"><p><code class="filename">tr1/memory</code> no longer includes <code class="filename">algorithm</code></p></li><li class="listitem"><p><code class="filename">tr1/random</code> no longer includes <code class="filename">algorithm</code> or <code class="filename">fstream</code></p></li></ul></div><p>
+ Debug mode for <code class="filename">unordered_map</code> and <code class="filename">unordered_set</code>.
+ </p><p>
+ Parallel mode first appears.
+@@ -152,10 +151,10 @@
+ PCH binary files no longer installed. Instead, the source files are installed.
+ </p><p>
+ Namespace pb_ds moved to __gnu_pb_ds.
+-</p></div><div class="section" title="4.4"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_440"></a><code class="constant">4.4</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_440"></a><code class="constant">4.4</code></h3></div></div></div><p>
+ </p><p>
+ C++0X features.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Added.
+ </p><p>
+ <code class="filename">atomic</code>,
+@@ -207,10 +206,10 @@
+ for non-standard pointer types has been added
+ to <code class="classname">vector</code>
+ and <code class="classname">forward_list</code>.
+-</p></div><div class="section" title="4.5"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_450"></a><code class="constant">4.5</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="api.rel_450"></a><code class="constant">4.5</code></h3></div></div></div><p>
+ </p><p>
+ C++0X features.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Added.
+ </p><p>
+ <code class="filename">functional</code>,
+@@ -237,4 +236,4 @@
+ in <code class="filename">typeinfo</code>, <code class="literal">__GXX_MERGED_TYPEINFO_NAMES</code>
+ now defaults to zero.
+ </p><p> Extensions modified: <code class="filename">ext/throw_allocator.h</code>.
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">ABI Policy and Guidelines </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Backwards Compatibility</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="abi.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="backwards.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">ABI Policy and Guidelines </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Backwards Compatibility</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch23s02.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch23s02.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch23s02.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Deprecated"><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ The SGI hashing classes <code class="classname">hash_set</code> and
+ <code class="classname">hash_set</code> have been deprecated by the
+ unordered_set, unordered_multiset, unordered_map,
+@@ -56,4 +55,4 @@
+ associative containers defined in the ISO C++ 2011 standard in the
+ headers <code class="filename">&lt;unordered_map&gt;</code>
+ and <code class="filename">&lt;unordered_set&gt;</code>.
+- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 23. HP/SGI Extensions </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 24. Utilities</td></tr></table></div></body></html>
++ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_containers.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_utilities.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 23. HP/SGI Extensions </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 24. Utilities</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch17s03.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch17s03.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch17s03.html (.../branches/gcc-4_7-branch)
+@@ -1,7 +1,6 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s02.html" title="Semantics" /><link rel="next" href="bk01pt03ch17s04.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="bk01pt03ch17s02.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch17s04.html">Next</a></td></tr></table><hr /></div><div class="section" title="Using"><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>
+- </p><div class="section" title="Using the Debug Mode"><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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s02.html" title="Semantics" /><link rel="next" href="bk01pt03ch17s04.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="bk01pt03ch17s02.html">Prev</a> </td><th width="60%" align="center">Chapter 17. Debug Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch17s04.html">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>
++ </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
+ compiler flag <code class="code">-D_GLIBCXX_DEBUG</code>. Note that this flag
+ changes the sizes and behavior of standard class templates such
+ as <code class="code">std::vector</code>, and therefore you can only link code
+@@ -10,7 +9,7 @@
+ units.</p><p>By default, error messages are formatted to fit on lines of about
+ 78 characters. The environment variable
+ <code class="code">GLIBCXX_DEBUG_MESSAGE_LENGTH</code> can be used to request a
+- different length.</p></div><div class="section" title="Using a Specific Debug Container"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.specific"></a>Using a Specific Debug Container</h3></div></div></div><p>When it is not feasible to recompile your entire application, or
++ different length.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.using.specific"></a>Using a Specific Debug Container</h3></div></div></div><p>When it is not feasible to recompile your entire application, or
+ only specific containers need checking, debugging containers are
+ available as GNU extensions. These debugging containers are
+ functionally equivalent to the standard drop-in containers used in
+@@ -19,6 +18,6 @@
+ mode or with debug mode. The
+ following table provides the names and headers of the debugging
+ containers:
+-</p><div class="table"><a id="idp16454656"></a><p class="title"><strong>Table 17.1. Debugging Containers</strong></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename">&lt;debug/bitset&gt;</code></td></tr><tr><td align="left"><code class="classname">std::deque</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="classname">__gnu_debug::deque</code></td><td align="left"><code class="filename">&lt;debug/deque&gt;</code></td></tr><tr><td align="left"><code class="classname">std::list</code></td><td align="left"><code class="filename">list</code></td><td align="left"><code class="classname">__gnu_debug::list</code></td><td align="left"><code class="filename">&lt;debug/list&gt;</code></td></tr><tr><td align="left"><code class="classname">std::map</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::map</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multimap</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::multimap</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multiset</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::multiset</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::set</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::set</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::wstring</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::wstring</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::basic_string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::basic_string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::vector</code></td><td align="left"><code class="filename">vector</code></td><td align="left"><code class="classname">__gnu_debug::vector</code></td><td align="left"><code class="filename">&lt;debug/vector&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /><p>In addition, when compiling in C++11 mode, these additional
++</p><div class="table"><a id="idm269985752944"></a><p class="title"><strong>Table 17.1. Debugging Containers</strong></p><div class="table-contents"><table summary="Debugging Containers" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::bitset</code></td><td align="left"><code class="filename">bitset</code></td><td align="left"><code class="classname">__gnu_debug::bitset</code></td><td align="left"><code class="filename">&lt;debug/bitset&gt;</code></td></tr><tr><td align="left"><code class="classname">std::deque</code></td><td align="left"><code class="filename">deque</code></td><td align="left"><code class="classname">__gnu_debug::deque</code></td><td align="left"><code class="filename">&lt;debug/deque&gt;</code></td></tr><tr><td align="left"><code class="classname">std::list</code></td><td align="left"><code class="filename">list</code></td><td align="left"><code class="classname">__gnu_debug::list</code></td><td align="left"><code class="filename">&lt;debug/list&gt;</code></td></tr><tr><td align="left"><code class="classname">std::map</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::map</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multimap</code></td><td align="left"><code class="filename">map</code></td><td align="left"><code class="classname">__gnu_debug::multimap</code></td><td align="left"><code class="filename">&lt;debug/map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::multiset</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::multiset</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::set</code></td><td align="left"><code class="filename">set</code></td><td align="left"><code class="classname">__gnu_debug::set</code></td><td align="left"><code class="filename">&lt;debug/set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::wstring</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::wstring</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::basic_string</code></td><td align="left"><code class="filename">string</code></td><td align="left"><code class="classname">__gnu_debug::basic_string</code></td><td align="left"><code class="filename">&lt;debug/string&gt;</code></td></tr><tr><td align="left"><code class="classname">std::vector</code></td><td align="left"><code class="filename">vector</code></td><td align="left"><code class="classname">__gnu_debug::vector</code></td><td align="left"><code class="filename">&lt;debug/vector&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /><p>In addition, when compiling in C++11 mode, these additional
+ containers have additional debug capability.
+-</p><div class="table"><a id="idp16499552"></a><p class="title"><strong>Table 17.2. Debugging Containers C++11</strong></p><div class="table-contents"><table summary="Debugging Containers C++11" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_set</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s02.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="bk01pt03ch17s04.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>
++</p><div class="table"><a id="idm269985708048"></a><p class="title"><strong>Table 17.2. Debugging Containers C++11</strong></p><div class="table-contents"><table summary="Debugging Containers C++11" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /><col align="left" class="c3" /><col align="left" class="c4" /></colgroup><thead><tr><th align="left">Container</th><th align="left">Header</th><th align="left">Debug container</th><th align="left">Debug header</th></tr></thead><tbody><tr><td align="left"><code class="classname">std::unordered_map</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_map</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multimap</code></td><td align="left"><code class="filename">unordered_map</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multimap</code></td><td align="left"><code class="filename">&lt;debug/unordered_map&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_set</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_set</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr><tr><td align="left"><code class="classname">std::unordered_multiset</code></td><td align="left"><code class="filename">unordered_set</code></td><td align="left"><code class="classname">__gnu_debug::unordered_multiset</code></td><td align="left"><code class="filename">&lt;debug/unordered_set&gt;</code></td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s02.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="bk01pt03ch17s04.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>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch18s03.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch18s03.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch18s03.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s02.html" title="Semantics" /><link rel="next" href="bk01pt03ch18s04.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="bk01pt03ch18s02.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s04.html">Next</a></td></tr></table><hr /></div><div class="section" title="Using"><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" title="Prerequisite Compiler Flags"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.prereq_flags"></a>Prerequisite Compiler Flags</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s02.html" title="Semantics" /><link rel="next" href="bk01pt03ch18s04.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="bk01pt03ch18s02.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s04.html">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>
+ Any use of parallel functionality requires additional compiler
+ and runtime support, in particular support for OpenMP. Adding this support is
+ not difficult: just compile your application with the compiler
+@@ -17,7 +16,7 @@
+ as <code class="literal">-march=i686</code>,
+ <code class="literal">-march=native</code> or <code class="literal">-mcpu=v9</code>. See
+ the GCC manual for more information.
+-</p></div><div class="section" title="Using Parallel Mode"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.parallel_mode"></a>Using Parallel Mode</h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.parallel_mode"></a>Using Parallel Mode</h3></div></div></div><p>
+ To use the libstdc++ parallel mode, compile your application with
+ the prerequisite flags as detailed above, and in addition
+ add <code class="constant">-D_GLIBCXX_PARALLEL</code>. This will convert all
+@@ -34,7 +33,7 @@
+ if no instantiation of a container is passed between the two
+ translation units. Parallel mode functionality has distinct linkage,
+ and cannot be confused with normal mode symbols.
+-</p></div><div class="section" title="Using Specific Parallel Components"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.specific"></a>Using Specific Parallel Components</h3></div></div></div><p>When it is not feasible to recompile your entire application, or
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.using.specific"></a>Using Specific Parallel Components</h3></div></div></div><p>When it is not feasible to recompile your entire application, or
+ only specific algorithms need to be parallel-aware, individual
+ parallel algorithms can be made available explicitly. These
+ parallel algorithms are functionally equivalent to the standard
+@@ -63,4 +62,4 @@
+ flags for atomic operations.)
+ </p><p> The following table provides the names and headers of all the
+ parallel algorithms that can be used in a similar manner:
+-</p><div class="table"><a id="idp16689952"></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="bk01pt03ch18s02.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="bk01pt03ch18s04.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>
++</p><div class="table"><a id="idm269985518144"></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="bk01pt03ch18s02.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="bk01pt03ch18s04.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>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch19s03.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s03.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s03.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s02.html" title="Design" /><link rel="next" href="bk01pt03ch19s04.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="bk01pt03ch19s02.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s04.html">Next</a></td></tr></table><hr /></div><div class="section" title="Extensions for Custom Containers"><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s02.html" title="Design" /><link rel="next" href="bk01pt03ch19s04.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="bk01pt03ch19s02.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s04.html">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>
+ Many large projects use their own data structures instead of the ones in the
+ standard library. If these data structures are similar in functionality
+ to the standard library, they can be instrumented with the same hooks
+@@ -7,4 +6,4 @@
+ that are used to instrument the standard library.
+ The instrumentation API is exposed in file
+ <code class="code">profiler.h</code> (look for "Instrumentation hooks").
+- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Empirical Cost Model</td></tr></table></div></body></html>
++ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Empirical Cost Model</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch19s07.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s07.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s07.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s06.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="bk01pt03ch19s06.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" title="Diagnostics"><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s06.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="bk01pt03ch19s06.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>
+ The table below presents all the diagnostics we intend to implement.
+ Each diagnostic has a corresponding compile time switch
+ <code class="code">-D_GLIBCXX_PROFILE_&lt;diagnostic&gt;</code>.
+@@ -18,7 +17,7 @@
+ A high accuracy means that the diagnostic is unlikely to be wrong.
+ These grades are not perfect. They are just meant to guide users with
+ specific needs or time budgets.
+- </p><div class="table"><a id="idp17050544"></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="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers" title="Containers">
++ </p><div class="table"><a id="idm269985157968"></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="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers" title="Containers">
+ CONTAINERS</a></td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_small" title="Hashtable Too Small">
+ 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="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_large" title="Hashtable Too Large">
+ 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="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.inefficient_hash" title="Inefficient Hash">
+@@ -35,7 +34,7 @@
+ LOCALITY</a></td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.sw_prefetch" title="Need Software Prefetch">
+ SOFTWARE_PREFETCH</a></td><td align="left">8</td><td align="left">8</td><td align="left"> </td><td align="left">5</td><td align="left">no</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.linked" title="Linked Structure Locality">
+ RBTREE_LOCALITY</a></td><td align="left">4</td><td align="left">8</td><td align="left"> </td><td align="left">5</td><td align="left">no</td></tr><tr><td align="left"> </td><td align="left"><a class="link" href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.false_share" title="False Sharing">
+- FALSE_SHARING</a></td><td align="left">8</td><td align="left">10</td><td align="left"> </td><td align="left">10</td><td align="left">no</td></tr></tbody></table></div></div><br class="table-break" /><div class="section" title="Diagnostic Template"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.template"></a>Diagnostic Template</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++ FALSE_SHARING</a></td><td align="left">8</td><td align="left">10</td><td align="left"> </td><td align="left">10</td><td align="left">no</td></tr></tbody></table></div></div><br class="table-break" /><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.template"></a>Diagnostic Template</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_&lt;diagnostic&gt;</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> What problem will it diagnose?
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>.
+@@ -52,10 +51,10 @@
+ ...
+ advice sample
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Containers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.containers"></a>Containers</h3></div></div></div><p>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.containers"></a>Containers</h3></div></div></div><p>
+ <span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_CONTAINERS</code>.
+-</p><div class="section" title="Hashtable Too Small"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_too_small"></a>Hashtable Too Small</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_too_small"></a>Hashtable Too Small</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_HASHTABLE_TOO_SMALL</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect hashtables with many
+ rehash operations, small construction size and large destruction size.
+@@ -81,7 +80,7 @@
+
+ foo.cc:1: advice: Changing initial unordered_set size from 10 to 1000000 saves 1025530 rehash operations.
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Hashtable Too Large"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_too_large"></a>Hashtable Too Large</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_too_large"></a>Hashtable Too Large</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_HASHTABLE_TOO_LARGE</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect hashtables which are
+ never filled up because fewer elements than reserved are ever
+@@ -110,7 +109,7 @@
+ foo.cc:1: advice: Changing initial unordered_set size from 100 to 10 saves N
+ bytes of memory and M iteration steps.
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Inefficient Hash"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.inefficient_hash"></a>Inefficient Hash</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.inefficient_hash"></a>Inefficient Hash</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_INEFFICIENT_HASH</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect hashtables with polarized
+ distribution.
+@@ -141,7 +140,7 @@
+ hs.find(i);
+ }
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Vector Too Small"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_too_small"></a>Vector Too Small</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_too_small"></a>Vector Too Small</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_VECTOR_TOO_SMALL</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span>Detect vectors with many
+ resize operations, small construction size and large destruction size..
+@@ -166,7 +165,7 @@
+ foo.cc:1: advice: Changing initial vector size from 10 to 1000000 saves
+ copying 4000000 bytes and 20 memory allocations and deallocations.
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Vector Too Large"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_too_large"></a>Vector Too Large</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_too_large"></a>Vector Too Large</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_VECTOR_TOO_LARGE</code>
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span>Detect vectors which are
+ never filled up because fewer elements than reserved are ever
+@@ -192,7 +191,7 @@
+ foo.cc:1: advice: Changing initial vector size from 100 to 10 saves N
+ bytes of memory and may reduce the number of cache and TLB misses.
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Vector to Hashtable"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_to_hashtable"></a>Vector to Hashtable</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_to_hashtable"></a>Vector to Hashtable</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_VECTOR_TO_HASHTABLE</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect uses of
+ <code class="code">vector</code> that can be substituted with <code class="code">unordered_set</code>
+@@ -223,7 +222,7 @@
+ foo.cc:1: advice: Changing "vector" to "unordered_set" will save about 500,000
+ comparisons.
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Hashtable to Vector"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_to_vector"></a>Hashtable to Vector</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.hashtable_to_vector"></a>Hashtable to Vector</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_HASHTABLE_TO_VECTOR</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect uses of
+ <code class="code">unordered_set</code> that can be substituted with <code class="code">vector</code>
+@@ -252,7 +251,7 @@
+ foo.cc:1: advice: Changing "unordered_set" to "vector" will save about N
+ indirections and may achieve better data locality.
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Vector to List"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_to_list"></a>Vector to List</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.vector_to_list"></a>Vector to List</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_VECTOR_TO_LIST</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
+ <code class="code">vector</code> could be substituted with <code class="code">list</code> for
+@@ -282,7 +281,7 @@
+ foo.cc:1: advice: Changing "vector" to "list" will save about 5,000,000
+ operations.
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="List to Vector"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.list_to_vector"></a>List to Vector</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.list_to_vector"></a>List to Vector</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_LIST_TO_VECTOR</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
+ <code class="code">list</code> could be substituted with <code class="code">vector</code> for
+@@ -309,7 +308,7 @@
+ foo.cc:1: advice: Changing "list" to "vector" will save about 1000000 indirect
+ memory references.
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="List to Forward List (Slist)"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.list_to_slist"></a>List to Forward List (Slist)</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.list_to_slist"></a>List to Forward List (Slist)</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_LIST_TO_SLIST</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where
+ <code class="code">list</code> could be substituted with <code class="code">forward_list</code> for
+@@ -339,7 +338,7 @@
+
+ foo.cc:1: advice: Change "list" to "forward_list".
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Ordered to Unordered Associative Container"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.assoc_ord_to_unord"></a>Ordered to Unordered Associative Container</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.assoc_ord_to_unord"></a>Ordered to Unordered Associative Container</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_ORDERED_TO_UNORDERED</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect cases where ordered
+ associative containers can be replaced with unordered ones.
+@@ -366,9 +365,9 @@
+ 7 sum += *s.find(i);
+ 8 }
+ </pre><p>
+-</p></li></ul></div></div></div><div class="section" title="Algorithms"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.algorithms"></a>Algorithms</h3></div></div></div><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.algorithms"></a>Algorithms</h3></div></div></div><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_ALGORITHMS</code>.
+- </p><div class="section" title="Sort Algorithm Performance"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.algorithms.sort"></a>Sort Algorithm Performance</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++ </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.algorithms.sort"></a>Sort Algorithm Performance</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_SORT</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Give measure of sort algorithm
+ performance based on actual input. For instance, advise Radix Sort over
+@@ -375,7 +374,7 @@
+ Quick Sort for a particular call context.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Fundamentals:</em></span>
+ See papers:
+- <a class="link" href="http://portal.acm.org/citation.cfm?doid=1065944.1065981" target="_top">
++ <a class="link" href="https://dl.acm.org/citation.cfm?doid=1065944.1065981" target="_top">
+ A framework for adaptive algorithm selection in STAPL</a> and
+ <a class="link" href="http://ieeexplore.ieee.org/search/wrapper.jsp?arnumber=4228227" target="_top">
+ Optimizing Sorting with Machine Learning Algorithms</a>.
+@@ -389,9 +388,9 @@
+ Runtime(algo) for algo in [radix, quick, merge, ...]</p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
+ </p><pre class="programlisting">
+ </pre><p>
+-</p></li></ul></div></div></div><div class="section" title="Data Locality"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.locality"></a>Data Locality</h3></div></div></div><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.locality"></a>Data Locality</h3></div></div></div><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_LOCALITY</code>.
+- </p><div class="section" title="Need Software Prefetch"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.locality.sw_prefetch"></a>Need Software Prefetch</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++ </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.locality.sw_prefetch"></a>Need Software Prefetch</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_SOFTWARE_PREFETCH</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Discover sequences of indirect
+ memory accesses that are not regular, thus cannot be predicted by
+@@ -434,7 +433,7 @@
+
+ foo.cc:7: advice: Insert prefetch instruction.
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="Linked Structure Locality"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.locality.linked"></a>Linked Structure Locality</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.locality.linked"></a>Linked Structure Locality</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_RBTREE_LOCALITY</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Give measure of locality of
+ objects stored in linked structures (lists, red-black trees and hashtables)
+@@ -479,13 +478,13 @@
+ foo.cc:5: advice: High scatter score NNN for set built here. Consider changing
+ the allocation sequence or switching to a structure conscious allocator.
+ </pre><p>
+-</p></li></ul></div></div></div><div class="section" title="Multithreaded Data Access"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.mthread"></a>Multithreaded Data Access</h3></div></div></div><p>
++</p></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.mthread"></a>Multithreaded Data Access</h3></div></div></div><p>
+ The diagnostics in this group are not meant to be implemented short term.
+ They require compiler support to know when container elements are written
+ to. Instrumentation can only tell us when elements are referenced.
+ </p><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_MULTITHREADED</code>.
+- </p><div class="section" title="Data Dependence Violations at Container Level"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.mthread.ddtest"></a>Data Dependence Violations at Container Level</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++ </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.mthread.ddtest"></a>Data Dependence Violations at Container Level</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_DDTEST</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect container elements
+ that are referenced from multiple threads in the parallel region or
+@@ -501,7 +500,7 @@
+ Keep a shadow for each container. Record iterator dereferences and
+ container member accesses. Issue advice for elements referenced by
+ multiple threads.
+- See paper: <a class="link" href="http://portal.acm.org/citation.cfm?id=207110.207148" target="_top">
++ See paper: <a class="link" href="https://dl.acm.org/citation.cfm?id=207110.207148" target="_top">
+ The LRPD test: speculative run-time parallelization of loops with
+ privatization and reduction parallelization</a>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Cost model:</em></span>
+@@ -509,7 +508,7 @@
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Example:</em></span>
+ </p><pre class="programlisting">
+ </pre><p>
+-</p></li></ul></div></div><div class="section" title="False Sharing"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.mthread.false_share"></a>False Sharing</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="manual.ext.profile_mode.analysis.mthread.false_share"></a>False Sharing</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_FALSE_SHARING</code>.
+ </p></li><li class="listitem"><p><span class="emphasis"><em>Goal:</em></span> Detect elements in the
+ same container which share a cache line, are written by at least one
+@@ -542,7 +541,7 @@
+ foo.cc:1: advice: Change container structure or padding to avoid false
+ sharing in multithreaded access at foo.cc:4. Detected N shared cache lines.
+ </pre><p>
+-</p></li></ul></div></div></div><div class="section" title="Statistics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.statistics"></a>Statistics</h3></div></div></div><p>
++</p></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.profile_mode.analysis.statistics"></a>Statistics</h3></div></div></div><p>
+ <span class="emphasis"><em>Switch:</em></span>
+ <code class="code">_GLIBCXX_PROFILE_STATISTICS</code>.
+ </p><p>
+@@ -555,4 +554,4 @@
+ This diagnostic will not issue any advice, but it will print statistics for
+ each container construction site. The statistics will contain the cost
+ of each operation actually performed on the container.
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s06.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="mt_allocator.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Developer Information </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 20. The mt_allocator</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s06.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="mt_allocator.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Developer Information </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 20. The mt_allocator</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/source_organization.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/source_organization.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/source_organization.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Contributing
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="source_code_style.html">Next</a></td></tr></table><hr /></div><div class="section" title="Directory Layout and Source Conventions"><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>
++</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>
+ The unpacked source directory of libstdc++ contains the files
+ needed to create the GNU C++ Library.
+ </p><div class="literallayout"><p><br />
+@@ -94,4 +93,4 @@
+   </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_contributing.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_code_style.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix A. 
+ Contributing
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Coding Style</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Coding Style</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/fstreams.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/fstreams.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/fstreams.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Input and Output
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr></table><hr /></div><div class="section" title="File Based Streams"><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" title="Copying a File"><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>
++</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>
+ </p><p>So you want to copy a file quickly and easily, and most important,
+ completely portably. And since this is C++, you have an open
+ ifstream (call it IN) and an open ofstream (call it OUT):
+@@ -49,7 +48,7 @@
+ The operators shown above are all defined in the parent
+ basic_ostream class and are therefore available with all possible
+ descendants.
+- </p></div><div class="section" title="Binary Input and Output"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.filestreams.binary"></a>Binary Input and Output</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.filestreams.binary"></a>Binary Input and Output</h3></div></div></div><p>
+ </p><p>The first and most important thing to remember about binary I/O is
+ that opening a file with <code class="code">ios::binary</code> is not, repeat
+ <span class="emphasis"><em>not</em></span>, the only thing you have to do. It is not a silver
+@@ -87,7 +86,7 @@
+ of <span class="emphasis"><em>formatting</em></span> functions and classes to perform something
+ which <span class="emphasis"><em>requires</em></span> that formatting not be done? There are a
+ seemingly infinite number of solutions, and a few are listed here:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="quote">“<span class="quote">Derive your own fstream-type classes and write your own
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="quote">“<span class="quote">Derive your own fstream-type classes and write your own
+ &lt;&lt;/&gt;&gt; operators to do binary I/O on whatever data
+ types you're using.</span>”</span>
+ </p><p>
+@@ -147,4 +146,4 @@
+ between arbitrary programs, or across a network, or from one
+ invocation of a program to another invocation of the same program
+ on a different platform, etc.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Memory Based Streams </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="stringstreams.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="io_and_c.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Memory Based Streams </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Interacting with C</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/ext_demangling.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/ext_demangling.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/ext_demangling.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 29. Demangling"><div class="titlepage"><div><div><h2 class="title"><a id="manual.ext.demangle"></a>Chapter 29. Demangling</h2></div></div></div><p>
++</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>
+ Transforming C++ ABI identifiers (like RTTI symbols) into the
+ original C++ source identifiers is called
+ <span class="quote">“<span class="quote">demangling.</span>”</span>
+@@ -71,4 +70,4 @@
+ be writing C++ in order to demangle C++. (That also means we have to
+ use crummy memory management facilities, so don't forget to free()
+ the returned char array.)
+- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 28. Input and Output </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 30. Concurrency</td></tr></table></div></body></html>
++ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_io.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 28. Input and Output </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 30. Concurrency</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/ext_compile_checks.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/ext_compile_checks.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/ext_compile_checks.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03pr01.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="bk01pt03pr01.html">Prev</a> </td><th width="60%" align="center">Part III. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03pr01.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="bk01pt03pr01.html">Prev</a> </td><th width="60%" align="center">Part III. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 16. Compile Time Checks"><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>
++</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>
+ Also known as concept checking.
+ </p><p>In 1999, SGI added <span class="emphasis"><em>concept checkers</em></span> to their implementation
+ of the STL: code which checked the template parameters of
+@@ -37,4 +36,4 @@
+ support for template parameter constraints based on concepts in the core
+ language. This will obviate the need for the library-simulated concept
+ checking described above.
+- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03pr01.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 17. Debug Mode</td></tr></table></div></body></html>
++ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03pr01.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="debug_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 17. Debug Mode</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/strings.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/strings.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/strings.html (.../branches/gcc-4_7-branch)
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
+ Strings
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="traits.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 7.  Strings"><div class="titlepage"><div><div><h2 class="title"><a id="std.strings"></a>Chapter 7. 
++ </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. 
+ Strings
+- <a id="idp15576144" class="indexterm"></a>
+-</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" title="String Classes"><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" title="Simple Transformations"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.simple"></a>Simple Transformations</h3></div></div></div><p>
++ <a id="idm269986623744" class="indexterm"></a>
++</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>
+ Here are Standard, simple, and portable ways to perform common
+ transformations on a <code class="code">string</code> instance, such as
+ "convert to all upper case." The word transformations
+@@ -89,7 +88,7 @@
+ str.erase(notwhite+1); </pre><p>Obviously, the calls to <code class="code">find</code> could be inserted directly
+ into the calls to <code class="code">erase</code>, in case your compiler does not
+ optimize named temporaries out of existence.
+- </p></div><div class="section" title="Case Sensitivity"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.case"></a>Case Sensitivity</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.case"></a>Case Sensitivity</h3></div></div></div><p>
+ </p><p>The well-known-and-if-it-isn't-well-known-it-ought-to-be
+ <a class="link" href="http://www.gotw.ca/gotw/" target="_top">Guru of the Week</a>
+ discussions held on Usenet covered this topic in January of 1998.
+@@ -126,7 +125,7 @@
+ <a class="link" href="http://www.unicode.org/reports/tr21/tr21-5.html" target="_top">Unicode
+ Technical Report discussing case handling</a>, which provides some
+ very good information.
+- </p></div><div class="section" title="Arbitrary Character Types"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.character_types"></a>Arbitrary Character Types</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.character_types"></a>Arbitrary Character Types</h3></div></div></div><p>
+ </p><p>The <code class="code">std::basic_string</code> is tantalizingly general, in that
+ it is parameterized on the type of the characters which it holds.
+ In theory, you could whip up a Unicode character class and instantiate
+@@ -180,7 +179,7 @@
+ nice-looking first attempt</a> turned out to <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-08/msg00242.html" target="_top">not
+ be conforming C++</a>, due to the rule that CharT must be a POD.
+ (See how tricky this is?)
+- </p></div><div class="section" title="Tokenizing"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.token"></a>Tokenizing</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.token"></a>Tokenizing</h3></div></div></div><p>
+ </p><p>The Standard C (and C++) function <code class="code">strtok()</code> leaves a lot to
+ be desired in terms of user-friendliness. It's unintuitive, it
+ destroys the character string on which it operates, and it requires
+@@ -256,7 +255,7 @@
+ tokenizing as well. Build an istringstream from the input text,
+ and then use std::getline with varying delimiters (the three-argument
+ signature) to extract tokens into a string.
+- </p></div><div class="section" title="Shrink to Fit"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.shrink"></a>Shrink to Fit</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.shrink"></a>Shrink to Fit</h3></div></div></div><p>
+ </p><p>From GCC 3.4 calling <code class="code">s.reserve(res)</code> on a
+ <code class="code">string s</code> with <code class="code">res &lt; s.capacity()</code> will
+ reduce the string's capacity to <code class="code">std::max(s.size(), res)</code>.
+@@ -272,7 +271,7 @@
+ </p><p>In <a class="link" href="status.html#status.iso.2011" title="C++ 2011">C++11</a> mode you can call
+ <code class="code">s.shrink_to_fit()</code> to achieve the same effect as
+ <code class="code">s.reserve(s.size())</code>.
+- </p></div><div class="section" title="CString (MFC)"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.Cstring"></a>CString (MFC)</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="strings.string.Cstring"></a>CString (MFC)</h3></div></div></div><p>
+ </p><p>A common lament seen in various newsgroups deals with the Standard
+ string class as opposed to the Microsoft Foundation Class called
+ CString. Often programmers realize that a standard portable
+@@ -282,7 +281,7 @@
+ </p><p>Things are not as bad as they seem. In
+ <a class="link" href="http://gcc.gnu.org/ml/gcc/1999-04n/msg00236.html" target="_top">this
+ message</a>, Joe Buck points out a few very important things:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>The Standard <code class="code">string</code> supports all the operations
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>The Standard <code class="code">string</code> supports all the operations
+ that CString does, with three exceptions.
+ </p></li><li class="listitem"><p>Two of those exceptions (whitespace trimming and case
+ conversion) are trivial to implement. In fact, we do so
+@@ -340,7 +339,7 @@
+ performance is O(n).
+ </pre><p>Joe Buck also pointed out some other things to keep in mind when
+ comparing CString and the Standard string class:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>CString permits access to its internal representation; coders
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>CString permits access to its internal representation; coders
+ who exploited that may have problems moving to <code class="code">string</code>.
+ </p></li><li class="listitem"><p>Microsoft ships the source to CString (in the files
+ MFC\SRC\Str{core,ex}.cpp), so you could fix the allocation
+@@ -363,4 +362,4 @@
+ </p></li></ul></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="traits.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="localization.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Traits </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 8. 
+ Localization
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/containers_and_c.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/containers_and_c.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/containers_and_c.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="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="associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="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="associative.html">Prev</a> </td><th width="60%" align="center">Chapter 9. 
+ Containers
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="iterators.html">Next</a></td></tr></table><hr /></div><div class="section" title="Interacting with C"><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" title="Containers vs. Arrays"><div class="titlepage"><div><div><h3 class="title"><a id="containers.c.vs_array"></a>Containers vs. Arrays</h3></div></div></div><p>
++</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>
+ You're writing some code and can't decide whether to use builtin
+ arrays or some kind of container. There are compelling reasons
+ to use one of the container classes, but you're afraid that
+@@ -87,4 +86,4 @@
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="associative.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="containers.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="iterators.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Associative </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 10. 
+ Iterators
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/io_and_c.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/io_and_c.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/io_and_c.html (.../branches/gcc-4_7-branch)
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Input and Output
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="atomics.html">Next</a></td></tr></table><hr /></div><div class="section" title="Interacting with C"><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" title="Using FILE* and file descriptors"><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>
++</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>
+ See the <a class="link" href="ext_io.html" title="Chapter 28. Input and Output">extensions</a> for using
+ <span class="type">FILE</span> and <span class="type">file descriptors</span> with
+ <code class="classname">ofstream</code> and
+ <code class="classname">ifstream</code>.
+- </p></div><div class="section" title="Performance"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.c.sync"></a>Performance</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.io.c.sync"></a>Performance</h3></div></div></div><p>
+ Pathetic Performance? Ditch C.
+ </p><p>It sounds like a flame on C, but it isn't. Really. Calm down.
+ I'm just saying it to get your attention.
+@@ -54,4 +53,4 @@
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="fstreams.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="atomics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">File Based Streams </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 14. 
+ Atomics
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/documentation_hacking.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/documentation_hacking.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/documentation_hacking.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="ISO C++, documentation, style, docbook, doxygen" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Porting and Maintenance
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr></table><hr /></div><div class="section" title="Writing and Generating Documentation"><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" title="Introduction"><div class="titlepage"><div><div><h3 class="title"><a id="doc.intro"></a>Introduction</h3></div></div></div><p>
++</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>
+ Documentation for the GNU C++ Library is created from three
+ independent sources: a manual, a FAQ, and an API reference.
+ </p><p>
+@@ -27,7 +26,7 @@
+ as per
+ <a class="link" href="http://www.gnu.org/prep/standards/standards.html#Documentation" target="_top">
+ GNU Manuals</a>.
+- </p></div><div class="section" title="Generating Documentation"><div class="titlepage"><div><div><h3 class="title"><a id="doc.generation"></a>Generating Documentation</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.generation"></a>Generating Documentation</h3></div></div></div><p>
+ Certain Makefile rules are required by the GNU Coding
+ Standards. These standard rules generate HTML, PDF, XML, or man
+ files. For each of the generative rules, there is an additional
+@@ -53,7 +52,7 @@
+ <code class="literal">BUILD_PDF</code>, and <code class="literal">BUILD_EPUB</code>.
+ </p><p>
+ Supported Makefile rules:
+- </p><div class="variablelist"><dl><dt><span class="term">
++ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">
+ <span class="emphasis"><em>make html</em></span>
+ , </span><span class="term">
+ <span class="emphasis"><em>make install-html</em></span>
+@@ -113,7 +112,7 @@
+ supported, and are always aliased to dummy rules. These
+ unsupported formats are: <span class="emphasis"><em>info</em></span>,
+ <span class="emphasis"><em>ps</em></span>, and <span class="emphasis"><em>dvi</em></span>.
+- </p></div><div class="section" title="Doxygen"><div class="titlepage"><div><div><h3 class="title"><a id="doc.doxygen"></a>Doxygen</h3></div></div></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idp22126320"></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>
++ </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="idm269980088096"></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>
+ Prerequisite tools are Bash 2.0 or later,
+ <a class="link" href="http://www.doxygen.org/" target="_top">Doxygen</a>, and
+ the <a class="link" href="http://www.gnu.org/software/coreutils/" target="_top">GNU
+@@ -135,7 +134,7 @@
+ capacity. Specifically, the <code class="literal">pool_size</code>
+ variable in the configuration file <code class="filename">texmf.cnf</code> may
+ need to be increased by a minimum factor of two.
+- </p></div><div class="section" title="Generating the Doxygen Files"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.rules"></a>Generating the Doxygen Files</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.rules"></a>Generating the Doxygen Files</h4></div></div></div><p>
+ The following Makefile rules run Doxygen to generate HTML
+ docs, XML docs, XML docs as a single file, PDF docs, and the
+ man pages. These rules are not conditional! If the required
+@@ -167,7 +166,7 @@
+ If you wish to tweak the Doxygen settings, do so by editing
+ <code class="filename">doc/doxygen/user.cfg.in</code>. Notes to fellow
+ library hackers are written in triple-# comments.
+- </p></div><div class="section" title="Debugging Generation"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.debug"></a>Debugging Generation</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.debug"></a>Debugging Generation</h4></div></div></div><p>
+ Sometimes, mis-configuration of the pre-requisite tools can
+ lead to errors when attempting to build the
+ documentation. Here are some of the obvious errors, and ways
+@@ -182,7 +181,7 @@
+ contents of the following build directory:
+ <code class="filename">build/target/libstdc++-v3/doc/doxygen/latex</code>.
+ Pay attention to three files enclosed within, annotated as follows.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <span class="emphasis"><em>refman.tex</em></span>
+ </p><p>
+ The actual latex file, or partial latex file. This is generated
+@@ -211,7 +210,7 @@
+ directories of header files, until the offending header is
+ identified. Then, read the latex log files to try and find
+ surround text, and look for that in the offending header.
+- </p></div><div class="section" title="Markup"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.markup"></a>Markup</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="doxygen.markup"></a>Markup</h4></div></div></div><p>
+ In general, libstdc++ files should be formatted according to
+ the rules found in the
+ <a class="link" href="source_code_style.html" title="Coding Style">Coding Standard</a>. Before
+@@ -233,9 +232,8 @@
+ member functions.
+ </p><p>
+ Some commentary to accompany
+- the first list in the <a class="link" href="http://www.stack.nl/~dimitri/doxygen/docblocks.html" target="_top">Special
+- Documentation Blocks</a> section of
+- the Doxygen manual:
++ the first list in the <a class="link" href="http://www.stack.nl/~dimitri/doxygen/manual/docblocks.html" target="_top">Special
++ Documentation Blocks</a> section of the Doxygen manual:
+ </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>
+ ...not the Qt style. The intermediate *'s are preferred.
+ </p></li><li class="listitem"><p>
+@@ -311,7 +309,7 @@
+ writing Doxygen comments. Single and double quotes, and
+ separators in filenames are two common trouble spots. When in
+ doubt, consult the following table.
+- </p><div class="table"><a id="idp22201984"></a><p class="title"><strong>Table B.2. HTML to Doxygen Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Doxygen Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Doxygen</th></tr></thead><tbody><tr><td align="left">\</td><td align="left">\\</td></tr><tr><td align="left">"</td><td align="left">\"</td></tr><tr><td align="left">'</td><td align="left">\'</td></tr><tr><td align="left">&lt;i&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;b&gt;</td><td align="left">@b word</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">@c word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;em&gt;two words or more&lt;/em&gt;</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="section" title="Docbook"><div class="titlepage"><div><div><h3 class="title"><a id="doc.docbook"></a>Docbook</h3></div></div></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idp22221360"></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>
++ </p><div class="table"><a id="idm269980012416"></a><p class="title"><strong>Table B.2. HTML to Doxygen Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Doxygen Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Doxygen</th></tr></thead><tbody><tr><td align="left">\</td><td align="left">\\</td></tr><tr><td align="left">"</td><td align="left">\"</td></tr><tr><td align="left">'</td><td align="left">\'</td></tr><tr><td align="left">&lt;i&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;b&gt;</td><td align="left">@b word</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">@c word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">@a word</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;em&gt;two words or more&lt;/em&gt;</td></tr></tbody></table></div></div><br class="table-break" /></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="doc.docbook"></a>Docbook</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.prereq"></a>Prerequisites</h4></div></div></div><div class="table"><a id="idm269979992976"></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>
+ Editing the DocBook sources requires an XML editor. Many
+ exist: some notable options
+ include <span class="command"><strong>emacs</strong></span>, <span class="application">Kate</span>,
+@@ -358,7 +356,7 @@
+ XML to Texinfo is required. The default choice is <a class="link" href="http://docbook2x.sourceforge.net/" target="_top">docbook2X</a>.
+ </p><p>
+ For epub output, the <a class="link" href="http://sourceforge.net/projects/docbook/files/epub3/" target="_top">stylesheets</a> for EPUB3 are required. These stylesheets are still in development. To validate the created file, <a class="link" href="https://code.google.com/p/epubcheck/" target="_top">epubcheck</a> is necessary.
+- </p></div><div class="section" title="Generating the DocBook Files"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.rules"></a>Generating the DocBook Files</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.rules"></a>Generating the DocBook Files</h4></div></div></div><p>
+ The following Makefile rules generate (in order): an HTML
+ version of all the DocBook documentation, a PDF version of the
+ same, and a single XML document. These rules are not
+@@ -383,7 +381,7 @@
+ <strong class="userinput"><code>
+ make <code class="literal">XSL_STYLE_DIR="/usr/share/xml/docbook/stylesheet/nwalsh"</code> doc-html-docbook
+ </code></strong>
+- </pre></div><div class="section" title="Debugging Generation"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.debug"></a>Debugging Generation</h4></div></div></div><p>
++ </pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.debug"></a>Debugging Generation</h4></div></div></div><p>
+ Sometimes, mis-configuration of the pre-requisite tools can
+ lead to errors when attempting to build the
+ documentation. Here are some of the obvious errors, and ways
+@@ -398,7 +396,7 @@
+ contents of the following build directory:
+ <code class="filename">build/target/libstdc++-v3/doc/docbook/latex</code>.
+ Pay attention to three files enclosed within, annotated as follows.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <span class="emphasis"><em>spine.tex</em></span>
+ </p><p>
+ The actual latex file, or partial latex file. This is generated
+@@ -435,7 +433,7 @@
+ commenting out each of the largest parts of the
+ <code class="filename">spine.xml</code> file, section by section,
+ until the offending section is identified.
+- </p></div><div class="section" title="Editing and Validation"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.validation"></a>Editing and Validation</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.validation"></a>Editing and Validation</h4></div></div></div><p>
+ After editing the xml sources, please make sure that the XML
+ documentation and markup is still valid. This can be
+ done easily, with the following validation rule:
+@@ -455,7 +453,7 @@
+ validation on the entire manual fails.
+ </p><p>
+ All Docbook xml sources should always validate. No excuses!
+- </p></div><div class="section" title="File Organization and Basics"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.examples"></a>File Organization and Basics</h4></div></div></div><div class="literallayout"><p><br />
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.examples"></a>File Organization and Basics</h4></div></div></div><div class="literallayout"><p><br />
+       <span class="emphasis"><em>Which files are important</em></span><br />
+ <br />
+       All Docbook files are in the directory<br />
+@@ -515,17 +513,17 @@
+       &lt;/book&gt;<br />
+ <br />
+       &lt;/set&gt;<br />
+-    </p></div></div><div class="section" title="Markup By Example"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.markup"></a>Markup By Example</h4></div></div></div><p>
++    </p></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="docbook.markup"></a>Markup By Example</h4></div></div></div><p>
+ Complete details on Docbook markup can be found in the DocBook
+ Element Reference,
+ <a class="link" href="http://www.docbook.org/tdg/en/html/part2.html" target="_top">online</a>.
+ An incomplete reference for HTML to Docbook conversion is
+ detailed in the table below.
+- </p><div class="table"><a id="idp22298992"></a><p class="title"><strong>Table B.4. HTML to Docbook XML Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Docbook XML Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Docbook</th></tr></thead><tbody><tr><td align="left">&lt;p&gt;</td><td align="left">&lt;para&gt;</td></tr><tr><td align="left">&lt;pre&gt;</td><td align="left">&lt;computeroutput&gt;, &lt;programlisting&gt;,
++ </p><div class="table"><a id="idm269979915344"></a><p class="title"><strong>Table B.4. HTML to Docbook XML Markup Comparison</strong></p><div class="table-contents"><table summary="HTML to Docbook XML Markup Comparison" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">HTML</th><th align="left">Docbook</th></tr></thead><tbody><tr><td align="left">&lt;p&gt;</td><td align="left">&lt;para&gt;</td></tr><tr><td align="left">&lt;pre&gt;</td><td align="left">&lt;computeroutput&gt;, &lt;programlisting&gt;,
+ &lt;literallayout&gt;</td></tr><tr><td align="left">&lt;ul&gt;</td><td align="left">&lt;itemizedlist&gt;</td></tr><tr><td align="left">&lt;ol&gt;</td><td align="left">&lt;orderedlist&gt;</td></tr><tr><td align="left">&lt;il&gt;</td><td align="left">&lt;listitem&gt;</td></tr><tr><td align="left">&lt;dl&gt;</td><td align="left">&lt;variablelist&gt;</td></tr><tr><td align="left">&lt;dt&gt;</td><td align="left">&lt;term&gt;</td></tr><tr><td align="left">&lt;dd&gt;</td><td align="left">&lt;listitem&gt;</td></tr><tr><td align="left">&lt;a href=""&gt;</td><td align="left">&lt;ulink url=""&gt;</td></tr><tr><td align="left">&lt;code&gt;</td><td align="left">&lt;literal&gt;, &lt;programlisting&gt;</td></tr><tr><td align="left">&lt;strong&gt;</td><td align="left">&lt;emphasis&gt;</td></tr><tr><td align="left">&lt;em&gt;</td><td align="left">&lt;emphasis&gt;</td></tr><tr><td align="left">"</td><td align="left">&lt;quote&gt;</td></tr></tbody></table></div></div><br class="table-break" /><p>
+ And examples of detailed markup for which there are no real HTML
+ equivalents are listed in the table below.
+-</p><div class="table"><a id="idp22323136"></a><p class="title"><strong>Table B.5. Docbook XML Element Use</strong></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left">&lt;structname&gt;</td><td align="left">&lt;structname&gt;char_traits&lt;/structname&gt;</td></tr><tr><td align="left">&lt;classname&gt;</td><td align="left">&lt;classname&gt;string&lt;/classname&gt;</td></tr><tr><td align="left">&lt;function&gt;</td><td align="left">
++</p><div class="table"><a id="idm269979891200"></a><p class="title"><strong>Table B.5. Docbook XML Element Use</strong></p><div class="table-contents"><table summary="Docbook XML Element Use" border="1"><colgroup><col align="left" class="c1" /><col align="left" class="c2" /></colgroup><thead><tr><th align="left">Element</th><th align="left">Use</th></tr></thead><tbody><tr><td align="left">&lt;structname&gt;</td><td align="left">&lt;structname&gt;char_traits&lt;/structname&gt;</td></tr><tr><td align="left">&lt;classname&gt;</td><td align="left">&lt;classname&gt;string&lt;/classname&gt;</td></tr><tr><td align="left">&lt;function&gt;</td><td align="left">
+ <p>&lt;function&gt;clear()&lt;/function&gt;</p>
+ <p>&lt;function&gt;fs.clear()&lt;/function&gt;</p>
+ </td></tr><tr><td align="left">&lt;type&gt;</td><td align="left">&lt;type&gt;long long&lt;/type&gt;</td></tr><tr><td align="left">&lt;varname&gt;</td><td align="left">&lt;varname&gt;fs&lt;/varname&gt;</td></tr><tr><td align="left">&lt;literal&gt;</td><td align="left">
+@@ -541,4 +539,4 @@
+ </td></tr></tbody></table></div></div><br class="table-break" /></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_porting.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="internals.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix B. 
+ Porting and Maintenance
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Porting to New Hardware or Operating Systems</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Porting to New Hardware or Operating Systems</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/extensions.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/extensions.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/extensions.html (.../branches/gcc-4_7-branch)
+@@ -1,12 +1,11 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03pr01.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03pr01.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Part III. 
+ Extensions
+
+-</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="bk01pt03pr01.html">Next</a></td></tr></table><hr /></div><div class="part" title="Part III.  Extensions"><div class="titlepage"><div><div><h1 class="title"><a id="manual.ext"></a>Part III. 
++</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="bk01pt03pr01.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. 
+ Extensions
+- <a id="idp16388480" class="indexterm"></a>
+-</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="preface"><a href="bk01pt03pr01.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="bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.link">Link- and run-time coexistence of release- and
++ <a id="idm269985818656" class="indexterm"></a>
++</h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="preface"><a href="bk01pt03pr01.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="bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.link">Link- and run-time coexistence of release- and
+ debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.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="bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s05.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="bk01pt03ch19s02.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.wrapper">Wrapper Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.instrumentation">Instrumentation</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.rtlib">Run Time Behavior</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.analysis">Analysis and Diagnostics</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.cost-model">Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.reports">Reports</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s02.html#manual.ext.profile_mode.design.testing">Testing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s03.html">Extensions for Custom Containers</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s04.html">Empirical Cost Model</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html">Implementation Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.stack">Stack Traces</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.symbols">Symbolization of Instruction Addresses</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.concurrency">Concurrency</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.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="bk01pt03ch19s05.html#manual.ext.profile_mode.implementation.malloc-hooks">Malloc Hooks</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s05.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="bk01pt03ch19s06.html">Developer Information</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.bigpic">Big Picture</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s06.html#manual.ext.profile_mode.developer.howto">How To Add A Diagnostic</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html">Diagnostics</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.template">Diagnostic Template</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.containers">Containers</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_small">Hashtable Too Small</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_too_large">Hashtable Too Large</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.inefficient_hash">Inefficient Hash</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_small">Vector Too Small</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_too_large">Vector Too Large</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_hashtable">Vector to Hashtable</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.hashtable_to_vector">Hashtable to Vector</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.vector_to_list">Vector to List</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_vector">List to Vector</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.list_to_slist">List to Forward List (Slist)</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.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="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms">Algorithms</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.algorithms.sort">Sort Algorithm Performance</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality">Data Locality</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.sw_prefetch">Need Software Prefetch</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.locality.linked">Linked Structure Locality</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread">Multithreaded Data Access</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.ddtest">Data Dependence Violations at Container Level</a></span></dt><dt><span class="section"><a href="bk01pt03ch19s07.html#manual.ext.profile_mode.analysis.mthread.false_share">False Sharing</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch19s07.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="bk01pt03ch20s02.html">Design Issues</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch20s02.html#allocator.mt.overview">Overview</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch20s03.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.tune">Tunable Parameters</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.init">Initialization</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s03.html#allocator.mt.deallocation">Deallocation Notes</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch20s04.html">Single Thread Example</a></span></dt><dt><span class="section"><a href="bk01pt03ch20s05.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="bk01pt03ch21s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.free_list_store">Free List Store</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.super_block">Super Block</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.super_block_data">Super Block Data Layout</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.max_wasted">Maximum Wasted Percentage</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.allocate"><code class="function">allocate</code></a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.deallocate"><code class="function">deallocate</code></a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.questions">Questions</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.1">1</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.2">2</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.question.3">3</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch21s02.html#bitmap.impl.locality">Locality</a></span></dt><dt><span class="section"><a href="bk01pt03ch21s02.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">
+ Configuring via Template Parameters
+ </a></span></dt><dt><span class="section"><a href="policy_data_structures_using.html#pbds.using.tutorial.traits">
+@@ -69,4 +68,4 @@
+ Text <code class="function">modify</code> Up
+ </a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#performance.priority_queue.text_modify_down">
+ Text <code class="function">modify</code> Down
+- </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.performance.observations">Observations</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.priority_queue">Priority_Queue</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_ack.html">Acknowledgments</a></span></dt><dt><span class="bibliography"><a href="policy_data_structures.html#pbds.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_containers.html">23. HP/SGI Extensions</a></span></dt><dd><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="bk01pt03ch23s02.html">Deprecated</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_utilities.html">24. Utilities</a></span></dt><dt><span class="chapter"><a href="ext_algorithms.html">25. Algorithms</a></span></dt><dt><span class="chapter"><a href="ext_numerics.html">26. Numerics</a></span></dt><dt><span class="chapter"><a href="ext_iterators.html">27. Iterators</a></span></dt><dt><span class="chapter"><a href="ext_io.html">28. Input and Output</a></span></dt><dd><dl><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_demangling.html">29. Demangling</a></span></dt><dt><span class="chapter"><a href="ext_concurrency.html">30. Concurrency</a></span></dt><dd><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="bk01pt03ch30s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch30s03.html">Use</a></span></dt></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="io_and_c.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="bk01pt03pr01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
++ </a></span></dt></dl></dd><dt><span class="section"><a href="policy_based_data_structures_test.html#pbds.test.performance.observations">Observations</a></span></dt><dd><dl><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.associative">Associative</a></span></dt><dt><span class="section"><a href="policy_based_data_structures_test.html#observations.priority_queue">Priority_Queue</a></span></dt></dl></dd></dl></dd></dl></dd><dt><span class="section"><a href="policy_data_structures_ack.html">Acknowledgments</a></span></dt><dt><span class="bibliography"><a href="policy_data_structures.html#pbds.biblio">Bibliography</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_containers.html">23. HP/SGI Extensions</a></span></dt><dd><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="bk01pt03ch23s02.html">Deprecated</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_utilities.html">24. Utilities</a></span></dt><dt><span class="chapter"><a href="ext_algorithms.html">25. Algorithms</a></span></dt><dt><span class="chapter"><a href="ext_numerics.html">26. Numerics</a></span></dt><dt><span class="chapter"><a href="ext_iterators.html">27. Iterators</a></span></dt><dt><span class="chapter"><a href="ext_io.html">28. Input and Output</a></span></dt><dd><dl><dt><span class="section"><a href="ext_io.html#manual.ext.io.filebuf_derived">Derived filebufs</a></span></dt></dl></dd><dt><span class="chapter"><a href="ext_demangling.html">29. Demangling</a></span></dt><dt><span class="chapter"><a href="ext_concurrency.html">30. Concurrency</a></span></dt><dd><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="bk01pt03ch30s02.html">Implementation</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.atomic_fallbacks">Using Builtin Atomic Functions</a></span></dt><dt><span class="section"><a href="bk01pt03ch30s02.html#manual.ext.concurrency.impl.thread">Thread Abstraction</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch30s03.html">Use</a></span></dt></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="io_and_c.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="bk01pt03pr01.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/parallel_mode.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/parallel_mode.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/parallel_mode.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s04.html" title="Design" /><link rel="next" href="bk01pt03ch18s02.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="bk01pt03ch17s04.html">Prev</a> </td><th width="60%" align="center">Part III. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s04.html" title="Design" /><link rel="next" href="bk01pt03ch18s02.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="bk01pt03ch17s04.html">Prev</a> </td><th width="60%" align="center">Part III. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 18. Parallel Mode"><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="bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s05.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
++</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s02.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="bk01pt03ch18s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.prereq_flags">Prerequisite Compiler Flags</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.parallel_mode">Using Parallel Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s03.html#parallel_mode.using.specific">Using Specific Parallel Components</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.intro">Interface Basics</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning">Configuration and Tuning</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.omp">Setting up the OpenMP Environment</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.compile">Compile Time Switches</a></span></dt><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.tuning.settings">Run Time Settings and Defaults</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s04.html#parallel_mode.design.impl">Implementation Namespaces</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch18s05.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
+ implementation of many algorithms the C++ Standard Library.
+ </p><p>
+ Several of the standard algorithms, for instance
+@@ -11,14 +10,14 @@
+ annotations. These parallel mode constructs and can be invoked by
+ explicit source declaration or by compiling existing sources with a
+ specific compiler flag.
+-</p><div class="section" title="Intro"><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
+-<code class="filename">numeric</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" 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
+-<code class="filename">algorithm</code> are included in the parallel mode:</p><div class="itemizedlist"><ul class="itemizedlist" 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" title="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="idp16890112"></a><p><span class="citetitle"><em class="citetitle">
++</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
++<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
++<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="idm269985317808"></a><p><span class="citetitle"><em class="citetitle">
+ Parallelization of Bulk Operations for STL Dictionaries
+ </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">
+ Workshop on Highly Parallel Processing on a Chip (HPPC) 2007. (LNCS)
+- . </span></span></p></div><div class="biblioentry"><a id="idp16895184"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></span></p></div><div class="biblioentry"><a id="idm269985312736"></a><p><span class="citetitle"><em class="citetitle">
+ The Multi-Core Standard Template Library
+ </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">
+ Euro-Par 2007: Parallel Processing. (LNCS 4641)
+- . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch18s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Semantics</td></tr></table></div></body></html>
++ . </span></span></p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s04.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch18s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Semantics</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/setup.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/setup.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/setup.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Introduction
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="configure.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 2. Setup"><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
++</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
+ and properly built binaries useful for linking to other software is
+ a multi-step process. Steps include getting the sources,
+ configuring and building the sources, testing, and installation.
+@@ -19,7 +18,7 @@
+ make install
+ </pre><p>
+ Each step is described in more detail in the following sections.
+- </p><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.prereq"></a>Prerequisites</h2></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.prereq"></a>Prerequisites</h2></div></div></div><p>
+ Because libstdc++ is part of GCC, the primary source for
+ installation instructions is
+ <a class="link" href="http://gcc.gnu.org/install/" target="_top">the GCC install page</a>.
+@@ -45,7 +44,7 @@
+ Hacking</a> in the appendix for full details.
+ </p><p>
+ Finally, a few system-specific requirements:
+- </p><div class="variablelist"><dl><dt><span class="term">linux</span></dt><dd><p>
++ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">linux</span></dt><dd><p>
+ If GCC 3.1.0 or later on is being used on GNU/Linux, an attempt
+ will be made to use "C" library functionality necessary for
+ C++ named locale support. For GCC 4.6.0 and later, this
+@@ -87,7 +86,7 @@
+ libstdc++ after "C" locales are installed is not necessary.
+ </p><p>
+ To install support for locales, do only one of the following:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>install all locales</p></li><li class="listitem"><p>install just the necessary locales</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>with Debian GNU/Linux:</p><p> Add the above list, as shown, to the file
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>install all locales</p></li><li class="listitem"><p>install just the necessary locales</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>with Debian GNU/Linux:</p><p> Add the above list, as shown, to the file
+ <code class="code">/etc/locale.gen</code> </p><p> run <code class="code">/usr/sbin/locale-gen</code> </p></li><li class="listitem"><p>on most Unix-like operating systems:</p><p><code class="code"> localedef -i de_DE -f ISO-8859-1 de_DE </code></p><p>(repeat for each entry in the above list) </p></li><li class="listitem"><p>
+ Instructions for other operating systems solicited.
+- </p></li></ul></div></li></ul></div></dd></dl></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bugs.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="configure.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Bugs </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Configure</td></tr></table></div></body></html>
++ </p></li></ul></div></li></ul></div></dd></dl></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bugs.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="configure.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Bugs </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Configure</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/backwards.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/backwards.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/backwards.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; backwards&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; backwards&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Porting and Maintenance
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="appendix_free.html">Next</a></td></tr></table><hr /></div><div class="section" title="Backwards Compatibility"><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" title="First"><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
++</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
+ separate GNU project, although reliably paired with GCC. Rumors imply
+ that it had a working relationship with at least two kinds of
+ dinosaur.
+@@ -17,8 +16,8 @@
+ really useful things that are used by a lot of people, the Standards
+ Committee couldn't include everything, and so a lot of those
+ <span class="quote">“<span class="quote">obvious</span>”</span> classes didn't get included.
+-</p><p>Known Issues include many of the limitations of its immediate ancestor.</p><p>Portability notes and known implementation limitations are as follows.</p><div class="section" title="No ios_base"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.first.ios_base"></a>No <code class="code">ios_base</code></h4></div></div></div><p> At least some older implementations don't have <code class="code">std::ios_base</code>, so you should use <code class="code">std::ios::badbit</code>, <code class="code">std::ios::failbit</code> and <code class="code">std::ios::eofbit</code> and <code class="code">std::ios::goodbit</code>.
+-</p></div><div class="section" title="No cout in &lt;ostream.h&gt;, no cin in &lt;istream.h&gt;"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.first.cout_cin"></a>No <code class="code">cout</code> in <code class="filename">&lt;ostream.h&gt;</code>, no <code class="code">cin</code> in <code class="filename">&lt;istream.h&gt;</code></h4></div></div></div><p>
++</p><p>Known Issues include many of the limitations of its immediate ancestor.</p><p>Portability notes and known implementation limitations are as follows.</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.first.ios_base"></a>No <code class="code">ios_base</code></h4></div></div></div><p> At least some older implementations don't have <code class="code">std::ios_base</code>, so you should use <code class="code">std::ios::badbit</code>, <code class="code">std::ios::failbit</code> and <code class="code">std::ios::eofbit</code> and <code class="code">std::ios::goodbit</code>.
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.first.cout_cin"></a>No <code class="code">cout</code> in <code class="filename">&lt;ostream.h&gt;</code>, no <code class="code">cin</code> in <code class="filename">&lt;istream.h&gt;</code></h4></div></div></div><p>
+ In earlier versions of the standard,
+ <code class="filename">&lt;fstream.h&gt;</code>,
+ <code class="filename">&lt;ostream.h&gt;</code>
+@@ -32,7 +31,7 @@
+ the <a class="link" href="http://gcc.gnu.org/extensions.html" target="_top">GCC extensions
+ page</a> describes where to find the last libg++ source. The code is
+ considered replaced and rewritten.
+-</p></div></div><div class="section" title="Second"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.second"></a>Second</h3></div></div></div><p>
++</p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.second"></a>Second</h3></div></div></div><p>
+ The second generation GNU C++ library was called libstdc++, or
+ libstdc++-v2. It spans the time between libg++ and pre-ISO C++
+ standardization and is usually associated with the following GCC
+@@ -44,7 +43,7 @@
+ archived. The code is considered replaced and rewritten.
+ </p><p>
+ Portability notes and known implementation limitations are as follows.
+-</p><div class="section" title="Namespace std:: not supported"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.std"></a>Namespace <code class="code">std::</code> not supported</h4></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.std"></a>Namespace <code class="code">std::</code> not supported</h4></div></div></div><p>
+ Some care is required to support C++ compiler and or library
+ implementation that do not have the standard library in
+ <code class="code">namespace std</code>.
+@@ -108,10 +107,10 @@
+ AC_DEFINE(HAVE_NAMESPACE_STD,,[Define if g++ supports namespace std. ])
+ fi
+ ])
+-</pre></div><div class="section" title="Illegal iterator usage"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.iterators"></a>Illegal iterator usage</h4></div></div></div><p>
++</pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.iterators"></a>Illegal iterator usage</h4></div></div></div><p>
+ The following illustrate implementation-allowed illegal iterator
+ use, and then correct use.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ you cannot do <code class="code">ostream::operator&lt;&lt;(iterator)</code>
+ to print the address of the iterator =&gt; use
+ <code class="code">operator&lt;&lt; &amp;*iterator</code> instead
+@@ -121,7 +120,7 @@
+ </p></li><li class="listitem"><p>
+ <code class="code">if (iterator)</code> won't work any more =&gt; use
+ <code class="code">if (iterator != iterator_type())</code>
+- </p></li></ul></div></div><div class="section" title="isspace from &lt;cctype&gt; is a macro"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.isspace"></a><code class="code">isspace</code> from <code class="filename">&lt;cctype&gt;</code> is a macro
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.isspace"></a><code class="code">isspace</code> from <code class="filename">&lt;cctype&gt;</code> is a macro
+ </h4></div></div></div><p>
+ Glibc 2.0.x and 2.1.x define <code class="filename">&lt;ctype.h&gt;</code> functionality as macros
+ (isspace, isalpha etc.).
+@@ -155,7 +154,7 @@
+ (<code class="filename">&lt;ctype.h&gt;</code>) and the
+ definitions in namespace <code class="code">std::</code>
+ (<code class="code">&lt;cctype&gt;</code>).
+-</p></div><div class="section" title="No vector::at, deque::at, string::at"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.at"></a>No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.at"></a>No <code class="code">vector::at</code>, <code class="code">deque::at</code>, <code class="code">string::at</code></h4></div></div></div><p>
+ One solution is to add an autoconf-test for this:
+ </p><pre class="programlisting">
+ AC_MSG_CHECKING(for container::at)
+@@ -181,7 +180,7 @@
+ </pre><p>
+ If you are using other (non-GNU) compilers it might be a good idea
+ to check for <code class="code">string::at</code> separately.
+-</p></div><div class="section" title="No std::char_traits&lt;char&gt;::eof"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.eof"></a>No <code class="code">std::char_traits&lt;char&gt;::eof</code></h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.eof"></a>No <code class="code">std::char_traits&lt;char&gt;::eof</code></h4></div></div></div><p>
+ Use some kind of autoconf test, plus this:
+ </p><pre class="programlisting">
+ #ifdef HAVE_CHAR_TRAITS
+@@ -189,7 +188,7 @@
+ #else
+ #define CPP_EOF EOF
+ #endif
+-</pre></div><div class="section" title="No string::clear"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.stringclear"></a>No <code class="code">string::clear</code></h4></div></div></div><p>
++</pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.stringclear"></a>No <code class="code">string::clear</code></h4></div></div></div><p>
+ There are two functions for deleting the contents of a string:
+ <code class="code">clear</code> and <code class="code">erase</code> (the latter returns the
+ string).
+@@ -207,18 +206,18 @@
+ Unfortunately, <code class="code">clear</code> is not implemented in this
+ version, so you should use <code class="code">erase</code> (which is probably
+ faster than <code class="code">operator=(charT*)</code>).
+-</p></div><div class="section" title="Removal of ostream::form and istream::scan extensions"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.ostreamform_istreamscan"></a>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.ostreamform_istreamscan"></a>
+ Removal of <code class="code">ostream::form</code> and <code class="code">istream::scan</code>
+ extensions
+ </h4></div></div></div><p>
+ These are no longer supported. Please use stringstreams instead.
+-</p></div><div class="section" title="No basic_stringbuf, basic_stringstream"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.stringstreams"></a>No <code class="code">basic_stringbuf</code>, <code class="code">basic_stringstream</code></h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.stringstreams"></a>No <code class="code">basic_stringbuf</code>, <code class="code">basic_stringstream</code></h4></div></div></div><p>
+ Although the ISO standard <code class="code">i/ostringstream</code>-classes are
+ provided, (<code class="filename">&lt;sstream&gt;</code>), for
+ compatibility with older implementations the pre-ISO
+ <code class="code">i/ostrstream</code> (<code class="filename">&lt;strstream&gt;</code>) interface is also provided,
+ with these caveats:
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <code class="code">strstream</code> is considered to be deprecated
+ </p></li><li class="listitem"><p>
+ <code class="code">strstream</code> is limited to <code class="code">char</code>
+@@ -300,14 +299,14 @@
+ Another example of using stringstreams is in <a class="link" href="strings.html#strings.string.shrink" title="Shrink to Fit">this howto</a>.
+ </p><p> There is additional information in the libstdc++-v2 info files, in
+ particular <span class="quote">“<span class="quote">info iostream</span>”</span>.
+-</p></div><div class="section" title="Little or no wide character support"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.wchar"></a>Little or no wide character support</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.wchar"></a>Little or no wide character support</h4></div></div></div><p>
+ Classes <code class="classname">wstring</code> and
+ <code class="classname">char_traits&lt;wchar_t&gt;</code> are
+ not supported.
+- </p></div><div class="section" title="No templatized iostreams"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.iostream_templates"></a>No templatized iostreams</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.iostream_templates"></a>No templatized iostreams</h4></div></div></div><p>
+ Classes <code class="classname">wfilebuf</code> and
+ <code class="classname">wstringstream</code> are not supported.
+- </p></div><div class="section" title="Thread safety issues"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.thread_safety"></a>Thread safety issues</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.second.thread_safety"></a>Thread safety issues</h4></div></div></div><p>
+ Earlier GCC releases had a somewhat different approach to
+ threading configuration and proper compilation. Before GCC 3.0,
+ configuration of the threading model was dictated by compiler
+@@ -343,7 +342,7 @@
+ first relevant message in the thread; from there you can use
+ "Thread Next" to move down the thread. This farm is in
+ latest-to-oldest order.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Our threading expert Loren gives a breakdown of <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2001-10/msg00024.html" target="_top">the
+ six situations involving threads</a> for the 3.0
+ release series.
+@@ -358,7 +357,7 @@
+ few people with access to the backup tapes have been too swamped
+ with work to restore them. Many of the points have been
+ superseded anyhow.)
+- </p></div></div><div class="section" title="Third"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.third"></a>Third</h3></div></div></div><p> The third generation GNU C++ library is called libstdc++, or
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.third"></a>Third</h3></div></div></div><p> The third generation GNU C++ library is called libstdc++, or
+ libstdc++-v3.
+ </p><p>The subset commonly known as the Standard Template Library
+ (chapters 23 through 25, mostly) is adapted from the final release
+@@ -365,7 +364,7 @@
+ of the SGI STL (version 3.3), with extensive changes.
+ </p><p>A more formal description of the V3 goals can be found in the
+ official <a class="link" href="source_design_notes.html" title="Design Notes">design document</a>.
+- </p><p>Portability notes and known implementation limitations are as follows.</p><div class="section" title="Pre-ISO headers moved to backwards or removed"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.headers"></a>Pre-ISO headers moved to backwards or removed</h4></div></div></div><p> The pre-ISO C++ headers
++ </p><p>Portability notes and known implementation limitations are as follows.</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.headers"></a>Pre-ISO headers moved to backwards or removed</h4></div></div></div><p> The pre-ISO C++ headers
+ (<code class="filename">&lt;iostream.h&gt;</code>,
+ <code class="filename">&lt;defalloc.h&gt;</code> etc.) are
+ available, unlike previous libstdc++ versions, but inclusion
+@@ -438,7 +437,7 @@
+ directive <code class="code">using namespace std;</code> can be put at the global
+ scope. This should be enough to get this code compiling, assuming the
+ other usage is correct.
+-</p></div><div class="section" title="Extension headers hash_map, hash_set moved to ext or backwards"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.hash"></a>Extension headers hash_map, hash_set moved to ext or backwards</h4></div></div></div><p>At this time most of the features of the SGI STL extension have been
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.hash"></a>Extension headers hash_map, hash_set moved to ext or backwards</h4></div></div></div><p>At this time most of the features of the SGI STL extension have been
+ replaced by standardized libraries.
+ In particular, the <code class="classname">unordered_map</code> and
+ <code class="classname">unordered_set</code> containers of TR1 and C++ 2011
+@@ -512,7 +511,7 @@
+ AC_DEFINE(HAVE_EXT_HASH_SET,,[Define if ext/hash_set is present. ])
+ fi
+ ])
+-</pre></div><div class="section" title="No ios::nocreate/ios::noreplace."><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.nocreate_noreplace"></a>No <code class="code">ios::nocreate/ios::noreplace</code>.
++</pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.nocreate_noreplace"></a>No <code class="code">ios::nocreate/ios::noreplace</code>.
+ </h4></div></div></div><p> The existence of <code class="code">ios::nocreate</code> being used for
+ input-streams has been confirmed, most probably because the author
+ thought it would be more correct to specify nocreate explicitly. So
+@@ -523,7 +522,7 @@
+ decide whether you want to create/replace or not. To my knowledge,
+ even older implementations support <code class="code">app</code>, <code class="code">ate</code>
+ and <code class="code">trunc</code> (except for <code class="code">app</code> ?).
+-</p></div><div class="section" title="No stream::attach(int fd)"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.streamattach"></a>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.streamattach"></a>
+ No <code class="code">stream::attach(int fd)</code>
+ </h4></div></div></div><p>
+ Phil Edwards writes: It was considered and rejected for the ISO
+@@ -546,7 +545,7 @@
+ For another example of this, refer to
+ <a class="link" href="http://www.josuttis.com/cppcode/fdstream.html" target="_top">fdstream example</a>
+ by Nicolai Josuttis.
+-</p></div><div class="section" title="Support for C++98 dialect."><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.support_cxx98"></a>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.support_cxx98"></a>
+ Support for C++98 dialect.
+ </h4></div></div></div><p>Check for complete library coverage of the C++1998/2003 standard.
+ </p><pre class="programlisting">
+@@ -614,7 +613,7 @@
+ AC_DEFINE(STDCXX_98_HEADERS,,[Define if ISO C++ 1998 header files are present. ])
+ fi
+ ])
+-</pre></div><div class="section" title="Support for C++TR1 dialect."><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.support_tr1"></a>
++</pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.support_tr1"></a>
+ Support for C++TR1 dialect.
+ </h4></div></div></div><p>Check for library coverage of the TR1 standard.
+ </p><pre class="programlisting">
+@@ -691,7 +690,7 @@
+ AC_DEFINE(HAVE_TR1_UNORDERED_SET,,[Define if tr1/unordered_set is present. ])
+ fi
+ ])
+-</pre></div><div class="section" title="Support for C++11 dialect."><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.support_cxx11"></a>
++</pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.support_cxx11"></a>
+ Support for C++11 dialect.
+ </h4></div></div></div><p>Check for baseline language coverage in the compiler for the C++11 standard.
+ </p><pre class="programlisting">
+@@ -935,21 +934,21 @@
+ but the autoconf checks above could be extended to test for incomplete
+ C++11 support with <code class="option">-std=c++0x</code> and
+ <code class="option">-std=gnu++0x</code>.
+-</p></div><div class="section" title="Container::iterator_type is not necessarily Container::value_type*"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.iterator_type"></a>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="backwards.third.iterator_type"></a>
+ <code class="code">Container::iterator_type</code> is not necessarily <code class="code">Container::value_type*</code>
+ </h4></div></div></div><p>
+ This is a change in behavior from older versions. Now, most
+ <span class="type">iterator_type</span> typedefs in container classes are POD
+ objects, not <span class="type">value_type</span> pointers.
+-</p></div></div><div class="bibliography" title="Bibliography"><div class="titlepage"><div><div><h3 class="title"><a id="backwards.biblio"></a>Bibliography</h3></div></div></div><div class="biblioentry" title="Migrating to GCC 4.1"><a id="idp23375200"></a><p><span class="title"><em>
++</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="idm269978837424"></a><p><span class="title"><em>
+ <a class="link" href="http://www.kegel.com/gcc/gcc4.html" target="_top">
+ Migrating to GCC 4.1
+ </a>
+- </em>. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span></p></div><div class="biblioentry" title="Building the Whole Debian Archive with GCC 4.1: A Summary"><a id="idp23377984"></a><p><span class="title"><em>
++ </em>. </span><span class="author"><span class="firstname">Dan</span> <span class="surname">Kegel</span>. </span></p></div><div class="biblioentry"><a id="idm269978834640"></a><p><span class="title"><em>
+ <a class="link" href="http://lists.debian.org/debian-gcc/2006/03/msg00405.html" target="_top">
+ Building the Whole Debian Archive with GCC 4.1: A Summary
+ </a>
+- </em>. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span></p></div><div class="biblioentry" title="Migration guide for GCC-3.2"><a id="idp23380832"></a><p><span class="title"><em>
++ </em>. </span><span class="author"><span class="firstname">Martin</span> <span class="surname">Michlmayr</span>. </span></p></div><div class="biblioentry"><a id="idm269978831792"></a><p><span class="title"><em>
+ <a class="link" href="http://annwm.lbl.gov/~leggett/Atlas/gcc-3.2.html" target="_top">
+ Migration guide for GCC-3.2
+ </a>
+@@ -956,4 +955,4 @@
+ </em>. </span></p></div></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"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_free.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">API Evolution and Deprecation History </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix C. 
+ Free Software Needs Free Documentation
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/source_design_notes.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/source_design_notes.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/source_design_notes.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Contributing
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="appendix_porting.html">Next</a></td></tr></table><hr /></div><div class="section" title="Design Notes"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.design_notes"></a>Design Notes</h2></div></div></div><p>
++</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>
+ </p><div class="literallayout"><p><br />
+ <br />
+     The Library<br />
+@@ -860,4 +859,4 @@
+   </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_code_style.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_porting.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Coding Style </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix B. 
+ Porting and Maintenance
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/facets.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/facets.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/facets.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Localization
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="containers.html">Next</a></td></tr></table><hr /></div><div class="section" title="Facets"><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" title="ctype"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.ctype"></a>ctype</h3></div></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.impl"></a>Implementation</h4></div></div></div><div class="section" title="Specializations"><div class="titlepage"><div><div><h5 class="title"><a id="idp15752864"></a>Specializations</h5></div></div></div><p>
++</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="idm269986448912"></a>Specializations</h5></div></div></div><p>
+ For the required specialization codecvt&lt;wchar_t, char, mbstate_t&gt; ,
+ conversions are made between the internal character set (always UCS4
+ on GNU/Linux) and whatever the currently selected locale for the
+@@ -28,7 +27,7 @@
+ </p><p>
+ Neither of these two required specializations deals with Unicode
+ characters.
+-</p></div></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.ctype.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ How to deal with the global locale issue?
+ </p></li><li class="listitem"><p>
+ How to deal with different types than char, wchar_t? </p></li><li class="listitem"><p>
+@@ -50,30 +49,30 @@
+ </p></li><li class="listitem"><p>
+ Rename abstract base class. See if just smash-overriding is a
+ better approach. Clarify, add sanity to naming.
+- </p></li></ul></div></div><div class="bibliography" title="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="idp15767920"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269986433920"></a><p><span class="citetitle"><em class="citetitle">
+ The GNU C Library
+- </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="idp15772672"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269986429168"></a><p><span class="citetitle"><em class="citetitle">
+ Correspondence
+- </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="idp15775760"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269986426080"></a><p><span class="citetitle"><em class="citetitle">
+ ISO/IEC 14882:1998 Programming languages - C++
+- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15778048"></a><p><span class="citetitle"><em class="citetitle">
++ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269986423792"></a><p><span class="citetitle"><em class="citetitle">
+ ISO/IEC 9899:1999 Programming languages - C
+- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry" title="The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)"><a id="idp15780320"></a><p><span class="title"><em>
++ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269986421520"></a><p><span class="title"><em>
+ <a class="link" href="http://www.unix.org/version3/ieee_std.html" target="_top">
+ The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
+ </a>
+ </em>. </span><span class="copyright">Copyright © 1999
+- The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><div class="biblioentry"><a id="idp15783568"></a><p><span class="citetitle"><em class="citetitle">
++ The Open Group/The Institute of Electrical and Electronics Engineers, Inc.. </span></p></div><div class="biblioentry"><a id="idm269986418272"></a><p><span class="citetitle"><em class="citetitle">
+ The C++ Programming Language, Special Edition
+ </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">
+ Addison Wesley
+- . </span></span></p></div><div class="biblioentry"><a id="idp15788192"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></span></p></div><div class="biblioentry"><a id="idm269986413648"></a><p><span class="citetitle"><em class="citetitle">
+ Standard C++ IOStreams and Locales
+ </em>. </span><span class="subtitle">
+ Advanced Programmer's Guide and Reference
+ . </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">
+ Addison Wesley Longman
+- . </span></span></p></div></div></div><div class="section" title="codecvt"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.codecvt"></a>codecvt</h3></div></div></div><p>
++ . </span></span></p></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.facet.codecvt"></a>codecvt</h3></div></div></div><p>
+ The standard class codecvt attempts to address conversions between
+ different character encoding schemes. In particular, the standard
+ attempts to detail conversions between the implementation-defined wide
+@@ -87,7 +86,7 @@
+ addressed, and examples of correct usage for both the required
+ specializations for wide and narrow characters and the
+ implementation-provided extended functionality are given.
+-</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.req"></a>Requirements</h4></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.req"></a>Requirements</h4></div></div></div><p>
+ Around page 425 of the C++ Standard, this charming heading comes into view:
+ </p><div class="blockquote"><blockquote class="blockquote"><p>
+ 22.2.1.5 - Template class codecvt
+@@ -133,7 +132,7 @@
+ Two: The required conversions, by specifying mbstate_t as the third
+ template parameter, imply an implementation strategy that is mostly
+ (or wholly) based on the underlying C library, and the functions
+-mcsrtombs and wcsrtombs in particular.</p></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.design"></a>Design</h4></div></div></div><div class="section" title="wchar_t Size"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.wchar_t_size"></a><span class="type">wchar_t</span> Size</h5></div></div></div><p>
++mcsrtombs and wcsrtombs in particular.</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.design"></a>Design</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.wchar_t_size"></a><span class="type">wchar_t</span> Size</h5></div></div></div><p>
+ The simple implementation detail of wchar_t's size seems to
+ repeatedly confound people. Many systems use a two byte,
+ unsigned integral type to represent wide characters, and use an
+@@ -145,7 +144,7 @@
+ size for the type wchar_t.
+ </p><p>
+ Thus, portable C++ code cannot assume a byte size (or endianness) either.
+- </p></div><div class="section" title="Support for Unicode"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.unicode"></a>Support for Unicode</h5></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.unicode"></a>Support for Unicode</h5></div></div></div><p>
+ Probably the most frequently asked question about code conversion
+ is: "So dudes, what's the deal with Unicode strings?"
+ The dude part is optional, but apparently the usefulness of
+@@ -162,7 +161,7 @@
+ needed is some kind of generalized type that accounts for the
+ issues that abstract encodings will need. The minimum information
+ that is required includes:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Identifiers for each of the codesets involved in the
+ conversion. For example, using the iconv family of functions
+ from the Single Unix Specification (what used to be called
+@@ -213,7 +212,7 @@
+ Some way to enforce strict type checking on the internal and
+ external types. As part of this, the size of the internal and
+ external types will need to be known.
+-</p></li></ul></div></div><div class="section" title="Other Issues"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.issues"></a>Other Issues</h5></div></div></div><p>
++</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="codecvt.design.issues"></a>Other Issues</h5></div></div></div><p>
+ In addition, multi-threaded and multi-locale environments also impact
+ the design and requirements for code conversions. In particular, they
+ affect the required specialization codecvt&lt;wchar_t, char, mbstate_t&gt;
+@@ -245,7 +244,7 @@
+ conversions are made between the internal character set (always UCS4
+ on GNU/Linux) and whatever the currently selected locale for the
+ LC_CTYPE category implements.
+-</p></div></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.impl"></a>Implementation</h4></div></div></div><p>
++</p></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.impl"></a>Implementation</h4></div></div></div><p>
+ The two required specializations are implemented as follows:
+ </p><p>
+ <code class="code">
+@@ -347,7 +346,7 @@
+ for this specialization, and usage of codecvt&lt;internal character type,
+ external character type, encoding_state&gt; is consistent with other
+ codecvt usage.
+-</p></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.use"></a>Use</h4></div></div></div><p>A conversions involving string literal.</p><pre class="programlisting">
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.use"></a>Use</h4></div></div></div><p>A conversions involving string literal.</p><pre class="programlisting">
+ typedef codecvt_base::result result;
+ typedef unsigned short unicode_t;
+ typedef unicode_t int_type;
+@@ -384,7 +383,7 @@
+ VERIFY( !int_traits::compare(i_arr, i_lit, size) );
+ VERIFY( efrom_next == e_lit + size );
+ VERIFY( ito_next == i_arr + size );
+-</pre></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.codecvt.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ a. things that are sketchy, or remain unimplemented:
+ do_encoding, max_length and length member functions
+ are only weakly implemented. I have no idea how to do
+@@ -391,7 +390,7 @@
+ this correctly, and in a generic manner. Nathan?
+ </p></li><li class="listitem"><p>
+ b. conversions involving std::string
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
+ how should operators != and == work for string of
+ different/same encoding?
+ </p></li><li class="listitem"><p>
+@@ -401,7 +400,7 @@
+ conversions between narrow, wide, and unicode strings
+ </p></li></ul></div></li><li class="listitem"><p>
+ c. conversions involving std::filebuf and std::ostream
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
+ how to initialize the state object in a
+ standards-conformant manner?
+ </p></li><li class="listitem"><p>
+@@ -410,17 +409,17 @@
+ </p></li><li class="listitem"><p>
+ wchar_t/char internal buffers and conversions between
+ internal/external buffers?
+- </p></li></ul></div></li></ul></div></div><div class="bibliography" title="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="idp15866336"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269986335856"></a><p><span class="citetitle"><em class="citetitle">
+ The GNU C Library
+ </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="idp15871088"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></p></div><div class="biblioentry"><a id="idm269986331104"></a><p><span class="citetitle"><em class="citetitle">
+ Correspondence
+- </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="idp15874176"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269986328016"></a><p><span class="citetitle"><em class="citetitle">
+ ISO/IEC 14882:1998 Programming languages - C++
+- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15876464"></a><p><span class="citetitle"><em class="citetitle">
++ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269986325728"></a><p><span class="citetitle"><em class="citetitle">
+ ISO/IEC 9899:1999 Programming languages - C
+- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry" title="System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)"><a id="idp15878736"></a><p><span class="title"><em>
++ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269986323456"></a><p><span class="title"><em>
+ <a class="link" href="http://www.opengroup.org/austin" target="_top">
+ System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ </a>
+@@ -427,33 +426,33 @@
+ </em>. </span><span class="copyright">Copyright © 2008
+ The Open Group/The Institute of Electrical and Electronics
+ Engineers, Inc.
+- . </span></p></div><div class="biblioentry"><a id="idp15881968"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></p></div><div class="biblioentry"><a id="idm269986320224"></a><p><span class="citetitle"><em class="citetitle">
+ The C++ Programming Language, Special Edition
+ </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">
+ Addison Wesley
+- . </span></span></p></div><div class="biblioentry"><a id="idp15886592"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></span></p></div><div class="biblioentry"><a id="idm269986315600"></a><p><span class="citetitle"><em class="citetitle">
+ Standard C++ IOStreams and Locales
+ </em>. </span><span class="subtitle">
+ Advanced Programmer's Guide and Reference
+ . </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">
+ Addison Wesley Longman
+- . </span></span></p></div><div class="biblioentry" title="A brief description of Normative Addendum 1"><a id="idp15892256"></a><p><span class="title"><em>
++ . </span></span></p></div><div class="biblioentry"><a id="idm269986309936"></a><p><span class="title"><em>
+ <a class="link" href="http://www.lysator.liu.se/c/na1.html" target="_top">
+ A brief description of Normative Addendum 1
+ </a>
+- </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" title="The Unicode HOWTO"><a id="idp15895504"></a><p><span class="title"><em>
++ </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="idm269986306688"></a><p><span class="title"><em>
+ <a class="link" href="http://tldp.org/HOWTO/Unicode-HOWTO.html" target="_top">
+ The Unicode HOWTO
+ </a>
+- </em>. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span></p></div><div class="biblioentry" title="UTF-8 and Unicode FAQ for Unix/Linux"><a id="idp15898288"></a><p><span class="title"><em>
++ </em>. </span><span class="author"><span class="firstname">Bruno</span> <span class="surname">Haible</span>. </span></p></div><div class="biblioentry"><a id="idm269986303904"></a><p><span class="title"><em>
+ <a class="link" href="http://www.cl.cam.ac.uk/~mgk25/unicode.html" target="_top">
+ UTF-8 and Unicode FAQ for Unix/Linux
+ </a>
+- </em>. </span><span class="author"><span class="firstname">Markus</span> <span class="surname">Khun</span>. </span></p></div></div></div><div class="section" title="messages"><div class="titlepage"><div><div><h3 class="title"><a id="manual.localization.facet.messages"></a>messages</h3></div></div></div><p>
++ </em>. </span><span class="author"><span class="firstname">Markus</span> <span class="surname">Khun</span>. </span></p></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.localization.facet.messages"></a>messages</h3></div></div></div><p>
+ The std::messages facet implements message retrieval functionality
+ equivalent to Java's java.text.MessageFormat .using either GNU gettext
+ or IEEE 1003.1-200 functions.
+-</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.req"></a>Requirements</h4></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.req"></a>Requirements</h4></div></div></div><p>
+ The std::messages facet is probably the most vaguely defined facet in
+ the standard library. It's assumed that this facility was built into
+ the standard library in order to convert string literals from one
+@@ -502,7 +501,7 @@
+ -6- Effects: Releases unspecified resources associated with cat.
+ -7- Notes: The limit on such resources, if any, is implementation-defined.
+ </em></span>
+-</p></blockquote></div></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.design"></a>Design</h4></div></div></div><p>
++</p></blockquote></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.design"></a>Design</h4></div></div></div><p>
+ A couple of notes on the standard.
+ </p><p>
+ First, why is <code class="code">messages_base::catalog</code> specified as a typedef
+@@ -535,7 +534,7 @@
+ string in 'get' is in the "C" locale. Thus, all source code is assumed
+ to be written in English, so translations are always from "en_US" to
+ other, explicitly named locales.
+-</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.impl"></a>Implementation</h4></div></div></div><div class="section" title="Models"><div class="titlepage"><div><div><h5 class="title"><a id="messages.impl.models"></a>Models</h5></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="messages.impl.models"></a>Models</h5></div></div></div><p>
+ This is a relatively simple class, on the face of it. The standard
+ specifies very little in concrete terms, so generic
+ implementations that are conforming yet do very little are the
+@@ -546,7 +545,7 @@
+ </p><p>
+ Three different mechanisms have been provided, selectable via
+ configure flags:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ generic
+ </p><p>
+ This model does very little, and is what is used by default.
+@@ -576,7 +575,7 @@
+ added for 'open' so that a directory could be specified with a given
+ message catalog. This simplifies calling conventions for the gnu
+ model.
+-</p></div><div class="section" title="The GNU Model"><div class="titlepage"><div><div><h5 class="title"><a id="messages.impl.gnu"></a>The GNU Model</h5></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="messages.impl.gnu"></a>The GNU Model</h5></div></div></div><p>
+ The messages facet, because it is retrieving and converting
+ between characters sets, depends on the ctype and perhaps the
+ codecvt facet in a given locale. In addition, underlying "C"
+@@ -588,7 +587,7 @@
+ Making the message catalogs can be initially tricky, but become
+ quite simple with practice. For complete info, see the gettext
+ documentation. Here's an idea of what is required:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Make a source file with the required string literals that need
+ to be translated. See <code class="code">intl/string_literals.cc</code> for
+ an example.
+@@ -619,7 +618,7 @@
+ <code class="code">
+ use_facet&lt;messages&lt;char&gt; &gt;(loc_de).open("libstdc++", locale(), dir);
+ </code>
+- </p></li></ul></div></div></div><div class="section" title="Use"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.use"></a>Use</h4></div></div></div><p>
++ </p></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.use"></a>Use</h4></div></div></div><p>
+ A simple example using the GNU model of message conversion.
+ </p><pre class="programlisting">
+ #include &lt;iostream&gt;
+@@ -641,9 +640,9 @@
+ cout &lt;&lt; "thank you in german:" &lt;&lt; s02 &lt;&lt; '\n';
+ mssg_de.close(cat_de);
+ }
+-</pre></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</pre></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="facet.messages.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Things that are sketchy, or remain unimplemented:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
+ _M_convert_from_char, _M_convert_to_char are in flux,
+ depending on how the library ends up doing character set
+ conversions. It might not be possible to do a real character
+@@ -691,16 +690,16 @@
+ model. As of this writing, it is unknown how to query to see
+ if a specified message catalog exists using the gettext
+ package.
+- </p></li></ul></div></div><div class="bibliography" title="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="idp15979248"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269986223488"></a><p><span class="citetitle"><em class="citetitle">
+ The GNU C Library
+ </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="idp15984000"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></p></div><div class="biblioentry"><a id="idm269986218736"></a><p><span class="citetitle"><em class="citetitle">
+ Correspondence
+- </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="idp15987088"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269986215648"></a><p><span class="citetitle"><em class="citetitle">
+ ISO/IEC 14882:1998 Programming languages - C++
+- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15989376"></a><p><span class="citetitle"><em class="citetitle">
++ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269986213360"></a><p><span class="citetitle"><em class="citetitle">
+ ISO/IEC 9899:1999 Programming languages - C
+- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry" title="System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)"><a id="idp15991648"></a><p><span class="title"><em>
++ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269986211088"></a><p><span class="title"><em>
+ <a class="link" href="http://www.opengroup.org/austin" target="_top">
+ System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ </a>
+@@ -707,23 +706,23 @@
+ </em>. </span><span class="copyright">Copyright © 2008
+ The Open Group/The Institute of Electrical and Electronics
+ Engineers, Inc.
+- . </span></p></div><div class="biblioentry"><a id="idp15994880"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></p></div><div class="biblioentry"><a id="idm269986207856"></a><p><span class="citetitle"><em class="citetitle">
+ The C++ Programming Language, Special Edition
+ </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">
+ Addison Wesley
+- . </span></span></p></div><div class="biblioentry"><a id="idp15999504"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></span></p></div><div class="biblioentry"><a id="idm269986203232"></a><p><span class="citetitle"><em class="citetitle">
+ Standard C++ IOStreams and Locales
+ </em>. </span><span class="subtitle">
+ Advanced Programmer's Guide and Reference
+ . </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">
+ Addison Wesley Longman
+- . </span></span></p></div><div class="biblioentry" title="API Specifications, Java Platform"><a id="idp16005168"></a><p><span class="title"><em>
+- <a class="link" href="http://java.sun.com/reference/api/index.html" target="_top">
++ . </span></span></p></div><div class="biblioentry"><a id="idm269986197568"></a><p><span class="title"><em>
++ <a class="link" href="http://www.oracle.com/technetwork/java/api/index.html" target="_top">
+ API Specifications, Java Platform
+ </a>
+ </em>. </span><span class="pagenums">java.util.Properties, java.text.MessageFormat,
+ java.util.Locale, java.util.ResourceBundle
+- . </span></p></div><div class="biblioentry" title="GNU gettext tools, version 0.10.38, Native Language Support Library and Tools."><a id="idp16007504"></a><p><span class="title"><em>
++ . </span></p></div><div class="biblioentry"><a id="idm269986195232"></a><p><span class="title"><em>
+ <a class="link" href="http://www.gnu.org/software/gettext" target="_top">
+ GNU gettext tools, version 0.10.38, Native Language Support
+ Library and Tools.
+@@ -734,4 +733,4 @@
+  </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 9. 
+ Containers
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/diagnostics.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/diagnostics.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/diagnostics.html (.../branches/gcc-4_7-branch)
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="termination.html" title="Termination" /><link rel="next" href="bk01pt02ch05s02.html" title="Concept Checking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="termination.html" title="Termination" /><link rel="next" href="bk01pt02ch05s02.html" title="Concept Checking" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter 5. 
+ Diagnostics
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="termination.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="bk01pt02ch05s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 5.  Diagnostics"><div class="titlepage"><div><div><h2 class="title"><a id="std.diagnostics"></a>Chapter 5. 
++ </th><td width="20%" align="right"> <a accesskey="n" href="bk01pt02ch05s02.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. 
+ Diagnostics
+- <a id="idp13808352" class="indexterm"></a>
+-</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="bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></div><div class="section" title="Exceptions"><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" title="API Reference"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.api"></a>API Reference</h3></div></div></div><p>
++ <a id="idm269988384144" class="indexterm"></a>
++</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="bk01pt02ch05s02.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>
+ All exception objects are defined in one of the standard header
+ files: <code class="filename">exception</code>,
+ <code class="filename">stdexcept</code>, <code class="filename">new</code>, and
+@@ -23,7 +22,7 @@
+ found in the source documentation.
+ </p><p>
+ Full API details.
+- </p></div><div class="section" title="Adding Data to exception"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.data"></a>Adding Data to <code class="classname">exception</code></h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="std.diagnostics.exceptions.data"></a>Adding Data to <code class="classname">exception</code></h3></div></div></div><p>
+ The standard exception classes carry with them a single string as
+ data (usually describing what went wrong or where the 'throw' took
+ place). It's good to remember that you can add your own data to
+@@ -40,4 +39,4 @@
+ int e;
+ DBID id; // some user-defined type
+ };
+- </pre></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="termination.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt02ch05s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Termination </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Concept Checking</td></tr></table></div></body></html>
++ </pre></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="termination.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt02ch05s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Termination </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Concept Checking</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch30s02.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch30s02.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch30s02.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch30s03.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="bk01pt03ch30s03.html">Next</a></td></tr></table><hr /></div><div class="section" title="Implementation"><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" title="Using Builtin Atomic Functions"><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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch30s03.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="bk01pt03ch30s03.html">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
+ implemented via compiler intrinsics (if the underlying host is
+ capable) or by library fallbacks.</p><p>Compiler intrinsics (builtins) are always preferred. However, as
+ the compiler builtins for atomics are not universally implemented,
+@@ -22,14 +21,14 @@
+ If builtins are possible for int-sized integral types,
+ <code class="code">ATOMIC_INT_LOCK_FREE</code> will be defined.
+ </p><p>For the following hosts, intrinsics are enabled by default.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>alpha</p></li><li class="listitem"><p>ia64</p></li><li class="listitem"><p>powerpc</p></li><li class="listitem"><p>s390</p></li></ul></div><p>For others, some form of <code class="code">-march</code> may work. On
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>alpha</p></li><li class="listitem"><p>ia64</p></li><li class="listitem"><p>powerpc</p></li><li class="listitem"><p>s390</p></li></ul></div><p>For others, some form of <code class="code">-march</code> may work. On
+ non-ancient x86 hardware, <code class="code">-march=native</code> usually does the
+ trick.</p><p> For hosts without compiler intrinsics, but with capable
+ hardware, hand-crafted assembly is selected. This is the case for the following hosts:
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>cris</p></li><li class="listitem"><p>hppa</p></li><li class="listitem"><p>i386</p></li><li class="listitem"><p>i486</p></li><li class="listitem"><p>m48k</p></li><li class="listitem"><p>mips</p></li><li class="listitem"><p>sparc</p></li></ul></div><p>And for the rest, a simulated atomic lock via pthreads.
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>cris</p></li><li class="listitem"><p>hppa</p></li><li class="listitem"><p>i386</p></li><li class="listitem"><p>i486</p></li><li class="listitem"><p>m48k</p></li><li class="listitem"><p>mips</p></li><li class="listitem"><p>sparc</p></li></ul></div><p>And for the rest, a simulated atomic lock via pthreads.
+ </p><p> Detailed information about compiler intrinsics for atomic operations can be found in the GCC <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html" target="_top"> documentation</a>.
+ </p><p> More details on the library fallbacks from the porting <a class="link" href="internals.html#internals.thread_safety" title="Thread Safety">section</a>.
+-</p></div><div class="section" title="Thread Abstraction"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.thread"></a>Thread Abstraction</h3></div></div></div><p>A thin layer above IEEE 1003.1 (i.e. pthreads) is used to abstract
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.ext.concurrency.impl.thread"></a>Thread Abstraction</h3></div></div></div><p>A thin layer above IEEE 1003.1 (i.e. pthreads) is used to abstract
+ the thread interface for GCC. This layer is called "gthread," and is
+ comprised of one header file that wraps the host's default thread layer with
+ a POSIX-like interface.
+@@ -42,4 +41,4 @@
+ functions, and usage found in the usual &lt;pthread.h&gt; file,
+ including <code class="code">pthread_t</code>, <code class="code">pthread_once_t</code>, <code class="code">pthread_create</code>,
+ etc.
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch30s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 30. Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Use</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_concurrency.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch30s03.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 30. Concurrency </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Use</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch20s03.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch20s03.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch20s03.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s02.html" title="Design Issues" /><link rel="next" href="bk01pt03ch20s04.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="bk01pt03ch20s02.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch20s04.html">Next</a></td></tr></table><hr /></div><div class="section" title="Implementation"><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" title="Tunable Parameters"><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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s02.html" title="Design Issues" /><link rel="next" href="bk01pt03ch20s04.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="bk01pt03ch20s02.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch20s04.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
+ exists a nested <code class="code">struct __pool_base::_Tune</code> that contains all
+ these parameters, which include settings for
+-</p><div class="itemizedlist"><ul class="itemizedlist" 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
++</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
+ happen before any allocations take place, when the allocator itself is
+ initialized. For instance:
+ </p><pre class="programlisting">
+@@ -39,7 +38,7 @@
+
+ return 0;
+ }
+-</pre></div><div class="section" title="Initialization"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.init"></a>Initialization</h3></div></div></div><p>
++</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.init"></a>Initialization</h3></div></div></div><p>
+ The static variables (pointers to freelists, tuning parameters etc)
+ are initialized as above, or are set to the global defaults.
+ </p><p>
+@@ -131,7 +130,7 @@
+ for this specific bin. This only occurs when a number of blocks
+ are grabbed from the global list to a thread specific list or when
+ a thread decides to return some blocks to the global freelist.
+-</p></div><div class="section" title="Deallocation Notes"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.deallocation"></a>Deallocation Notes</h3></div></div></div><p> Notes about deallocation. This allocator does not explicitly
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="allocator.mt.deallocation"></a>Deallocation Notes</h3></div></div></div><p> Notes about deallocation. This allocator does not explicitly
+ release memory. Because of this, memory debugging programs like
+ valgrind or purify may notice leaks: sorry about this
+ inconvenience. Operating systems will reclaim allocated memory at
+@@ -158,4 +157,4 @@
+ pool that frees memory, see the following
+ <a class="link" href="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/ext/mt_allocator/deallocate_local-6.cc?view=markup" target="_top">
+ example.</a>
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design Issues </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Single Thread Example</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design Issues </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Single Thread Example</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/appendix_free.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/appendix_free.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/appendix_free.html (.../branches/gcc-4_7-branch)
+@@ -1,13 +1,12 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.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. 
+ Free Software Needs Free Documentation
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><th width="60%" align="center">Part IV. 
+ Appendices
+-</th><td width="20%" align="right"> <a accesskey="n" href="appendix_gpl.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix C.  Free Software Needs Free Documentation"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.free"></a>
++</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>
+ Free Software Needs Free Documentation
+- <a id="idp23386832" class="indexterm"></a>
++ <a id="idm269978826336" class="indexterm"></a>
+ </h1></div></div></div><p>
+ The biggest deficiency in free operating systems is not in the
+ software--it is the lack of good free manuals that we can include in
+@@ -123,4 +122,4 @@
+ permitted worldwide, without royalty, in any medium, provided this
+ notice is preserved.</p><p>Report any problems or suggestions to <code class="email">&lt;<a class="email" href="mailto:webmaster@fsf.org">webmaster@fsf.org</a>&gt;</code>.</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="backwards.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_gpl.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"> Appendix D. 
+ <acronym class="acronym">GNU</acronym> General Public License version 3
+- </td></tr></table></div></body></html>
++ </td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/algorithms.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/algorithms.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/algorithms.html (.../branches/gcc-4_7-branch)
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; , &#10; algorithm&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; , &#10; algorithm&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
+ Algorithms
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="iterators.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 11.  Algorithms"><div class="titlepage"><div><div><h2 class="title"><a id="std.algorithms"></a>Chapter 11. 
++ </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. 
+ Algorithms
+- <a id="idp16155696" class="indexterm"></a>
+-</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>
++ <a id="idm269986048464" class="indexterm"></a>
++</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>
+ The neatest accomplishment of the algorithms section is that all the
+ work is done via iterators, not containers directly. This means two
+ important things:
+@@ -42,7 +41,7 @@
+ to cause so much confusion. Once you
+ get <span class="emphasis"><em>range</em></span> into your head (it's not that hard,
+ honest!), then the algorithms are a cakewalk.
+-</p><div class="section" title="Mutating"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.algorithms.mutating"></a>Mutating</h2></div></div></div><div class="section" title="swap"><div class="titlepage"><div><div><h3 class="title"><a id="algorithms.mutating.swap"></a><code class="function">swap</code></h3></div></div></div><div class="section" title="Specializations"><div class="titlepage"><div><div><h4 class="title"><a id="algorithms.swap.specializations"></a>Specializations</h4></div></div></div><p>If you call <code class="code"> std::swap(x,y); </code> where x and y are standard
++</p><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.algorithms.mutating"></a>Mutating</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="algorithms.mutating.swap"></a><code class="function">swap</code></h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="algorithms.swap.specializations"></a>Specializations</h4></div></div></div><p>If you call <code class="code"> std::swap(x,y); </code> where x and y are standard
+ containers, then the call will automatically be replaced by a call to
+ <code class="code"> x.swap(y); </code> instead.
+ </p><p>This allows member functions of each container class to take over, and
+@@ -58,4 +57,4 @@
+  </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 12. 
+ Numerics
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/appendix_porting.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/appendix_porting.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/appendix_porting.html (.../branches/gcc-4_7-branch)
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.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. 
+ Porting and Maintenance
+
+ </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. 
+ Appendices
+-</th><td width="20%" align="right"> <a accesskey="n" href="documentation_hacking.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix B.  Porting and Maintenance"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.porting"></a>
++</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>
+ Porting and Maintenance
+- <a id="idp21971520" class="indexterm"></a>
+-</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">
++ <a id="idm269980241728" class="indexterm"></a>
++</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">
+ Qualifying Exception Safety Guarantees
+
+ </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">
+@@ -30,7 +29,7 @@
+ Support for C++11 dialect.
+ </a></span></dt><dt><span class="section"><a href="backwards.html#backwards.third.iterator_type">
+ <code class="code">Container::iterator_type</code> is not necessarily <code class="code">Container::value_type*</code>
+-</a></span></dt></dl></dd></dl></dd></dl></div><div class="section" title="Configure and Build Hacking"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="appendix.porting.build_hacking"></a>Configure and Build Hacking</h2></div></div></div><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.prereq"></a>Prerequisites</h3></div></div></div><p>
++</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="appendix.porting.build_hacking"></a>Configure and Build Hacking</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.prereq"></a>Prerequisites</h3></div></div></div><p>
+ As noted <a class="link" href="http://gcc.gnu.org/install/prerequisites.html" target="_top">previously</a>,
+ certain other tools are necessary for hacking on files that
+ control configure (<code class="code">configure.ac</code>,
+@@ -41,7 +40,7 @@
+ in GCC try to stay in sync with each other in terms of versions of
+ the auto-tools used, so please try to play nicely with the
+ neighbors.
+- </p></div><div class="section" title="Overview"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.overview"></a>Overview</h3></div></div></div><div class="section" title="General Process"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.overview.basic"></a>General Process</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.overview"></a>Overview</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.overview.basic"></a>General Process</h4></div></div></div><p>
+ The configure process begins the act of building libstdc++, and is
+ started via:
+ </p><pre class="screen">
+@@ -62,11 +61,11 @@
+ 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
+ <span class="command"><strong>automake</strong></span>) from the file
+ <code class="filename">Makefile.am</code>.
+-</p></div><div class="section" title="What Comes from Where"><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="idp21998848"></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>
++</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="idm269980214944"></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>
+ Regenerate all generated files by using the command
+ <code class="code">autoreconf</code> at the top level of the libstdc++ source
+ directory.
+- </p></div></div><div class="section" title="Configure"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.configure"></a>Configure</h3></div></div></div><div class="section" title="Storing Information in non-AC files (like configure.host)"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.scripts"></a>Storing Information in non-AC files (like configure.host)</h4></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.configure"></a>Configure</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.scripts"></a>Storing Information in non-AC files (like configure.host)</h4></div></div></div><p>
+ Until that glorious day when we can use AC_TRY_LINK with a
+ cross-compiler, we have to hardcode the results of what the tests
+ would have shown if they could be run. So we have an inflexible
+@@ -88,7 +87,7 @@
+ for instance, but then we would need arguments to aclocal/autoconf
+ to properly find them all when generating configure. I would
+ discourage that.
+-</p></div><div class="section" title="Coding and Commenting Conventions"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.conventions"></a>Coding and Commenting Conventions</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.conventions"></a>Coding and Commenting Conventions</h4></div></div></div><p>
+ Most comments should use {octothorpes, shibboleths, hash marks,
+ pound signs, whatever} rather than "dnl". Nearly all comments in
+ configure.ac should. Comments inside macros written in ancilliary
+@@ -105,7 +104,7 @@
+ Do not use any <code class="code">$target*</code> variables, such as
+ <code class="code">$target_alias</code>. The single exception is in
+ configure.ac, for automake+dejagnu's sake.
+- </p></div><div class="section" title="The acinclude.m4 layout"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.acinclude"></a>The acinclude.m4 layout</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.acinclude"></a>The acinclude.m4 layout</h4></div></div></div><p>
+ The nice thing about acinclude.m4/aclocal.m4 is that macros aren't
+ actually performed/called/expanded/whatever here, just loaded. So
+ we can arrange the contents however we like. As of this writing,
+@@ -176,7 +175,7 @@
+ </pre><p>
+ Things which we don't seem to use directly, but just has to be
+ present otherwise stuff magically goes wonky.
+-</p></div><div class="section" title="GLIBCXX_ENABLE, the --enable maker"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.enable"></a><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="build_hacking.configure.enable"></a><code class="constant">GLIBCXX_ENABLE</code>, the <code class="literal">--enable</code> maker</h4></div></div></div><p>
+ All the <code class="literal">GLIBCXX_ENABLE_FOO</code> macros use a common
+ helper, <code class="literal">GLIBCXX_ENABLE</code>. (You don't have to use
+ it, but it's easy.) The helper does two things for us:
+@@ -205,7 +204,7 @@
+ GLIBCXX_ENABLE (FEATURE, DEFAULT, HELP-ARG, HELP-STRING)
+ GLIBCXX_ENABLE (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c)
+ GLIBCXX_ENABLE (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER)
+-</pre><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</pre><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ FEATURE is the string that follows --enable. The results of the
+ test (such as it is) will be in the variable $enable_FEATURE,
+ where FEATURE has been squashed. Example:
+@@ -264,7 +263,7 @@
+ argument checking at all is done in this signature. See
+ GLIBCXX_ENABLE_CXX_FLAGS for an example of handling, and an error
+ message.
+-</p></div></div><div class="section" title="Make"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.make"></a>Make</h3></div></div></div><p>
++</p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="build_hacking.make"></a>Make</h3></div></div></div><p>
+ The build process has to make all of object files needed for
+ static or shared libraries, but first it has to generate some
+ include files. The general order is as follows:
+@@ -307,4 +306,4 @@
+ any required compatibility objects, and creates the final shared
+ and static libraries: <code class="filename">libstdc++.so</code> and
+ <code class="filename">libstdc++.a</code>.
+- </p></li></ol></div></li></ol></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_design_notes.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="documentation_hacking.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design Notes </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Writing and Generating Documentation</td></tr></table></div></body></html>
++ </p></li></ol></div></li></ol></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_design_notes.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="documentation_hacking.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Design Notes </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Writing and Generating Documentation</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/make.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/make.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/make.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Make"><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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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
+ <a class="link" href="http://gcc.gnu.org/install/" target="_top">GCC Installation
+ Instructions</a> first. Read <span class="emphasis"><em>all of them</em></span>.
+ <span class="emphasis"><em>Twice.</em></span>
+ </p><p>Then type: <span class="command"><strong>make</strong></span>, and congratulations, you've
+ started to build.
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="configure.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="setup.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Configure </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 3. Using</td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="configure.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="setup.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Configure </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 3. Using</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch17s04.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch17s04.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch17s04.html (.../branches/gcc-4_7-branch)
+@@ -1,11 +1,10 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s03.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="bk01pt03ch17s03.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" title="Design"><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>
+- </p><div class="section" title="Goals"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.goals"></a>Goals</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s03.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="bk01pt03ch17s03.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>
++ </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>
+ </p><p> The libstdc++ debug mode replaces unsafe (but efficient) standard
+ containers and iterators with semantically equivalent safe standard
+ containers and iterators to aid in debugging user programs. The
+- following goals directed the design of the libstdc++ debug mode:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Correctness</em></span>: the libstdc++ debug mode must not change
++ following goals directed the design of the libstdc++ debug mode:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Correctness</em></span>: the libstdc++ debug mode must not change
+ the semantics of the standard library for all cases specified in
+ the ANSI/ISO C++ standard. The essence of this constraint is that
+ any valid C++ program should behave in the same manner regardless
+@@ -89,10 +88,10 @@
+ (performance regression) or allocating extra memory associated
+ with each iterator with <code class="code">new</code> (changes the program
+ semantics).</p></li></ol></div><p>
+- </p></li></ul></div></div><div class="section" title="Methods"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.methods"></a>Methods</h3></div></div></div><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.methods"></a>Methods</h3></div></div></div><p>
+ </p><p>This section provides an overall view of the design of the
+ libstdc++ debug mode and details the relationship between design
+- decisions and the stated design goals.</p><div class="section" title="The Wrapper Model"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.wrappers"></a>The Wrapper Model</h4></div></div></div><p>The libstdc++ debug mode uses a wrapper model where the
++ decisions and the stated design goals.</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.wrappers"></a>The Wrapper Model</h4></div></div></div><p>The libstdc++ debug mode uses a wrapper model where the
+ debugging versions of library components (e.g., iterators and
+ containers) form a layer on top of the release versions of the
+ library components. The debugging components first verify that the
+@@ -109,7 +108,7 @@
+ their associated containers, which are necessary to detect certain
+ types of standard library usage errors such as dereferencing
+ past-the-end iterators or inserting into a container using an
+- iterator from a different container.</p><div class="section" title="Safe Iterators"><div class="titlepage"><div><div><h5 class="title"><a id="debug_mode.design.methods.safe_iter"></a>Safe Iterators</h5></div></div></div><p>Iterator wrappers provide a debugging layer over any iterator that
++ iterator from a different container.</p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="debug_mode.design.methods.safe_iter"></a>Safe Iterators</h5></div></div></div><p>Iterator wrappers provide a debugging layer over any iterator that
+ is attached to a particular container, and will manage the
+ information detailing the iterator's state (singular,
+ dereferenceable, etc.) and tracking the container to which the
+@@ -116,12 +115,12 @@
+ iterator is attached. Because iterators have a well-defined, common
+ interface the iterator wrapper is implemented with the iterator
+ adaptor class template <code class="code">__gnu_debug::_Safe_iterator</code>,
+- which takes two template parameters:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">Iterator</code>: The underlying iterator type, which must
++ which takes two template parameters:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="code">Iterator</code>: The underlying iterator type, which must
+ be either the <code class="code">iterator</code> or <code class="code">const_iterator</code>
+ typedef from the sequence type this iterator can reference.</p></li><li class="listitem"><p><code class="code">Sequence</code>: The type of sequence that this iterator
+ references. This sequence must be a safe sequence (discussed below)
+ whose <code class="code">iterator</code> or <code class="code">const_iterator</code> typedef
+- is the type of the safe iterator.</p></li></ul></div></div><div class="section" title="Safe Sequences (Containers)"><div class="titlepage"><div><div><h5 class="title"><a id="debug_mode.design.methods.safe_seq"></a>Safe Sequences (Containers)</h5></div></div></div><p>Container wrappers provide a debugging layer over a particular
++ is the type of the safe iterator.</p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="debug_mode.design.methods.safe_seq"></a>Safe Sequences (Containers)</h5></div></div></div><p>Container wrappers provide a debugging layer over a particular
+ container type. Because containers vary greatly in the member
+ functions they support and the semantics of those member functions
+ (especially in the area of iterator invalidation), container
+@@ -157,7 +156,7 @@
+
+ // duplicate std::list interface with debugging semantics
+ };
+-</pre></div></div><div class="section" title="Precondition Checking"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.precond"></a>Precondition Checking</h4></div></div></div><p>The debug mode operates primarily by checking the preconditions of
++</pre></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.precond"></a>Precondition Checking</h4></div></div></div><p>The debug mode operates primarily by checking the preconditions of
+ all standard library operations that it supports. Preconditions that
+ are always checked (regardless of whether or not we are in debug
+ mode) are checked via the <code class="code">__check_xxx</code> macros defined
+@@ -184,7 +183,7 @@
+ cousin <code class="code">_GLIBCXX_DEBUG_PEDASSERT</code>, or the assertion
+ check macro that supports more advance formulation of error
+ messages, <code class="code">_GLIBCXX_DEBUG_VERIFY</code>. These macros are
+- documented more thoroughly in the debug mode source code.</p></div><div class="section" title="Release- and debug-mode coexistence"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.coexistence"></a>Release- and debug-mode coexistence</h4></div></div></div><p>The libstdc++ debug mode is the first debug mode we know of that
++ documented more thoroughly in the debug mode source code.</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="debug_mode.design.methods.coexistence"></a>Release- and debug-mode coexistence</h4></div></div></div><p>The libstdc++ debug mode is the first debug mode we know of that
+ is able to provide the "Per-use recompilation" (4) guarantee, that
+ allows release-compiled and debug-compiled code to be linked and
+ executed together without causing unpredictable behavior. This
+@@ -200,7 +199,7 @@
+ recompilation but have had to give up some checking of the
+ <code class="code">std::basic_string</code> class template (namely, safe
+ iterators).
+-</p><div class="section" title="Compile-time coexistence of release- and debug-mode components"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.compile"></a>Compile-time coexistence of release- and debug-mode components</h5></div></div></div><p>Both the release-mode components and the debug-mode
++</p><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.compile"></a>Compile-time coexistence of release- and debug-mode components</h5></div></div></div><p>Both the release-mode components and the debug-mode
+ components need to exist within a single translation unit so that
+ the debug versions can wrap the release versions. However, only one
+ of these components should be user-visible at any particular
+@@ -254,7 +253,7 @@
+ // namespace __debug __attribute__ ((strong));
+ inline namespace __debug { }
+ }
+-</pre></div><div class="section" title="Link- and run-time coexistence of release- and debug-mode components"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.link"></a>Link- and run-time coexistence of release- and
++</pre></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.link"></a>Link- and run-time coexistence of release- and
+ debug-mode components</h5></div></div></div><p>Because each component has a distinct and separate release and
+ debug implementation, there is no issue with link-time
+ coexistence: the separate namespaces result in different mangled
+@@ -316,10 +315,10 @@
+ changes. The effect on users is expected to be minimal, as there are
+ simple alternatives (e.g., <code class="code">__gnu_debug::basic_string</code>),
+ and the usability benefit we gain from the ability to mix debug- and
+- release-compiled translation units is enormous.</p></div><div class="section" title="Alternatives for Coexistence"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.alt"></a>Alternatives for Coexistence</h5></div></div></div><p>The coexistence scheme above was chosen over many alternatives,
++ release-compiled translation units is enormous.</p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="methods.coexistence.alt"></a>Alternatives for Coexistence</h5></div></div></div><p>The coexistence scheme above was chosen over many alternatives,
+ including language-only solutions and solutions that also required
+ extensions to the C++ front end. The following is a partial list of
+- solutions, with justifications for our rejection of each.</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Completely separate debug/release libraries</em></span>: This is by
++ solutions, with justifications for our rejection of each.</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Completely separate debug/release libraries</em></span>: This is by
+ far the simplest implementation option, where we do not allow any
+ coexistence of debug- and release-compiled translation units in a
+ program. This solution has an extreme negative affect on usability,
+@@ -388,11 +387,11 @@
+ that breaks user specialization), and additional testcases will be
+ added as we are able to identify other typical problem cases. These
+ test cases will serve as a benchmark by which we can compare debug
+- mode implementations.</p></div></div></div><div class="section" title="Other Implementations"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.other"></a>Other Implementations</h3></div></div></div><p>
++ mode implementations.</p></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug_mode.design.other"></a>Other Implementations</h3></div></div></div><p>
+ </p><p> There are several existing implementations of debug modes for C++
+ standard library implementations, although none of them directly
+ supports debugging for programs using libstdc++. The existing
+- implementations include:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><a class="link" href="http://www.mathcs.sjsu.edu/faculty/horstman/safestl.html" target="_top">SafeSTL</a>:
++ 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>:
+ SafeSTL was the original debugging version of the Standard Template
+ Library (STL), implemented by Cay S. Horstmann on top of the
+ Hewlett-Packard STL. Though it inspired much work in this area, it
+@@ -409,4 +408,4 @@
+ a full debug-mode implementation (including debugging for
+ CodeWarrior extensions) and is easy to use, although it meets only
+ the "Full recompilation" (1) recompilation
+- guarantee.</p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s03.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="parallel_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 18. Parallel Mode</td></tr></table></div></body></html>
++ guarantee.</p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch17s03.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="parallel_mode.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 18. Parallel Mode</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/pairs.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/pairs.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/pairs.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Utilities
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr></table><hr /></div><div class="section" title="Pairs"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.pairs"></a>Pairs</h2></div></div></div><p>The <code class="code">pair&lt;T1,T2&gt;</code> is a simple and handy way to
++</th><td width="20%" align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr></table><hr /></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="std.util.pairs"></a>Pairs</h2></div></div></div><p>The <code class="code">pair&lt;T1,T2&gt;</code> is a simple and handy way to
+ carry around a pair of objects. One is of type T1, and another of
+ type T2; they may be the same type, but you don't get anything
+ extra if they are. The two members can be accessed directly, as
+@@ -41,4 +40,4 @@
+ </pre></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="utilities.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="utilities.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="memory.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 6. 
+ Utilities
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Memory</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Memory</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch18s04.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch18s04.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch18s04.html (.../branches/gcc-4_7-branch)
+@@ -1,7 +1,6 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s03.html" title="Using" /><link rel="next" href="bk01pt03ch18s05.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="bk01pt03ch18s03.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s05.html">Next</a></td></tr></table><hr /></div><div class="section" title="Design"><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>
+- </p><div class="section" title="Interface Basics"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.intro"></a>Interface Basics</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; parallel&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch18s03.html" title="Using" /><link rel="next" href="bk01pt03ch18s05.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="bk01pt03ch18s03.html">Prev</a> </td><th width="60%" align="center">Chapter 18. Parallel Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch18s05.html">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>
++ </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>
+ All parallel algorithms are intended to have signatures that are
+ equivalent to the ISO C++ algorithms replaced. For instance, the
+ <code class="function">std::adjacent_find</code> function is declared as:
+@@ -36,13 +35,13 @@
+ compile-time or run-time conditions.
+ </p><p> The available signature options are specific for the different
+ algorithms/algorithm classes.</p><p> The general view of overloads for the parallel algorithms look like this:
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>ISO C++ signature</p></li><li class="listitem"><p>ISO C++ signature + sequential_tag argument</p></li><li class="listitem"><p>ISO C++ signature + algorithm-specific tag type
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>ISO C++ signature</p></li><li class="listitem"><p>ISO C++ signature + sequential_tag argument</p></li><li class="listitem"><p>ISO C++ signature + algorithm-specific tag type
+ (several signatures)</p></li></ul></div><p> Please note that the implementation may use additional functions
+ (designated with the <code class="code">_switch</code> suffix) to dispatch from the
+ ISO C++ signature to the correct parallel version. Also, some of the
+ algorithms do not have support for run-time conditions, so the last
+ overload is therefore missing.
+-</p></div><div class="section" title="Configuration and Tuning"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.tuning"></a>Configuration and Tuning</h3></div></div></div><div class="section" title="Setting up the OpenMP Environment"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.omp"></a>Setting up the OpenMP Environment</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.tuning"></a>Configuration and Tuning</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.omp"></a>Setting up the OpenMP Environment</h4></div></div></div><p>
+ Several aspects of the overall runtime environment can be manipulated
+ by standard OpenMP function calls.
+ </p><p>
+@@ -72,7 +71,7 @@
+ nested parallelism (<code class="function">omp_set_nested</code>), schedule kind
+ (<code class="function">omp_set_schedule</code>), and others. See the OpenMP
+ documentation for more information.
+-</p></div><div class="section" title="Compile Time Switches"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.compile"></a>Compile Time Switches</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.compile"></a>Compile Time Switches</h4></div></div></div><p>
+ To force an algorithm to execute sequentially, even though parallelism
+ is switched on in general via the macro <code class="constant">_GLIBCXX_PARALLEL</code>,
+ add <code class="classname">__gnu_parallel::sequential_tag()</code> to the end
+@@ -126,7 +125,7 @@
+ <code class="code">__gnu_parallel::balanced_quicksort_tag</code>.
+ Multiway mergesort comes with the two splitting strategies for multi-way
+ merging. The quicksort options cannot be used for <code class="code">stable_sort</code>.
+-</p></div><div class="section" title="Run Time Settings and Defaults"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.settings"></a>Run Time Settings and Defaults</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="parallel_mode.design.tuning.settings"></a>Run Time Settings and Defaults</h4></div></div></div><p>
+ The default parallelization strategy, the choice of specific algorithm
+ strategy, the minimum threshold limits for individual parallel
+ algorithms, and aspects of the underlying hardware can be specified as
+@@ -194,7 +193,7 @@
+
+ return 0;
+ }
+-</pre></div></div><div class="section" title="Implementation Namespaces"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.impl"></a>Implementation Namespaces</h3></div></div></div><p> One namespace contain versions of code that are always
++</pre></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="parallel_mode.design.impl"></a>Implementation Namespaces</h3></div></div></div><p> One namespace contain versions of code that are always
+ explicitly sequential:
+ <code class="code">__gnu_serial</code>.
+ </p><p> Two namespaces contain the parallel mode:
+@@ -210,4 +209,4 @@
+ </p><p> More information, and an organized index of types and functions
+ related to the parallel mode on a per-namespace basis, can be found in
+ the generated source documentation.
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s03.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="bk01pt03ch18s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Testing</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch18s03.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="bk01pt03ch18s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Testing</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/test.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/test.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/test.html (.../branches/gcc-4_7-branch)
+@@ -1,12 +1,11 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; test&#10; , &#10; testsuite&#10; , &#10; performance&#10; , &#10; conformance&#10; , &#10; ABI&#10; , &#10; exception safety&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; test&#10; , &#10; testsuite&#10; , &#10; performance&#10; , &#10; conformance&#10; , &#10; ABI&#10; , &#10; exception safety&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Porting and Maintenance
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr></table><hr /></div><div class="section" title="Test"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="manual.intro.setup.test"></a>Test</h2></div></div></div><p>
++</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>
+ The libstdc++ testsuite includes testing for standard conformance,
+ regressions, ABI, and performance.
+-</p><div class="section" title="Organization"><div class="titlepage"><div><div><h3 class="title"><a id="test.organization"></a>Organization</h3></div></div></div><div class="section" title="Directory Layout"><div class="titlepage"><div><div><h4 class="title"><a id="test.organization.layout"></a>Directory Layout</h4></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="test.organization"></a>Organization</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="test.organization.layout"></a>Directory Layout</h4></div></div></div><p>
+ The directory <span class="emphasis"><em>libsrcdir/testsuite</em></span> contains the
+ individual test cases organized in sub-directories corresponding to
+ chapters of the C++ standard (detailed below), the dejagnu test
+@@ -77,11 +76,11 @@
+ </pre><p>
+ All new tests should be written with the policy of one test
+ case, one file in mind.
+- </p></div><div class="section" title="Naming Conventions"><div class="titlepage"><div><div><h4 class="title"><a id="test.organization.naming"></a>Naming Conventions</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="test.organization.naming"></a>Naming Conventions</h4></div></div></div><p>
+ In addition, there are some special names and suffixes that are
+ used within the testsuite to designate particular kinds of
+ tests.
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <span class="emphasis"><em>_xin.cc</em></span>
+ </p><p>
+ This test case expects some kind of interactive input in order
+@@ -131,7 +130,7 @@
+ analyze runtime performance, for performance regression testing,
+ or for other optimization related analysis. At the moment, these
+ test cases are not run by default.
+- </p></li></ul></div></div></div><div class="section" title="Running the Testsuite"><div class="titlepage"><div><div><h3 class="title"><a id="test.run"></a>Running the Testsuite</h3></div></div></div><div class="section" title="Basic"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.basic"></a>Basic</h4></div></div></div><p>
++ </p></li></ul></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="test.run"></a>Running the Testsuite</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.basic"></a>Basic</h4></div></div></div><p>
+ You can check the status of the build without installing it
+ using the dejagnu harness, much like the rest of the gcc
+ tools.</p><pre class="programlisting"> make check</pre><p>in the <span class="emphasis"><em>libbuilddir</em></span> directory.</p><p>or</p><pre class="programlisting"> make check-target-libstdc++-v3</pre><p>in the <span class="emphasis"><em>gccbuilddir</em></span> directory.
+@@ -151,7 +150,7 @@
+ archived on a daily basis on the <a class="link" href="http://gcc.gnu.org/ml/gcc-testresults/current" target="_top">gcc-testresults</a>
+ mailing list. Please check either of these places for a similar
+ combination of source version, operating system, and host CPU.
+- </p></div><div class="section" title="Variations"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.variations"></a>Variations</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.variations"></a>Variations</h4></div></div></div><p>
+ There are several options for running tests, including testing
+ the regression tests, testing a subset of the regression tests,
+ testing the performance tests, testing just compilation, testing
+@@ -222,7 +221,7 @@
+ </pre><p>
+ Five files are generated that determine what test files
+ are run. These files are:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <span class="emphasis"><em>testsuite_files</em></span>
+ </p><p>
+ This is a list of all the test cases that will be run. Each
+@@ -277,7 +276,7 @@
+ We are interested in any strange failures of the testsuite;
+ please email the main libstdc++ mailing list if you see
+ something odd or have questions.
+- </p></div><div class="section" title="Permutations"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.permutations"></a>Permutations</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="test.run.permutations"></a>Permutations</h4></div></div></div><p>
+ To run the libstdc++ test suite under the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>, edit
+ <code class="filename">libstdc++-v3/scripts/testsuite_flags</code> to add the
+ compile-time flag <code class="constant">-D_GLIBCXX_DEBUG</code> to the
+@@ -297,7 +296,7 @@
+ Or, just run the testsuites with <code class="constant">CXXFLAGS</code>
+ set to <code class="constant">-D_GLIBCXX_DEBUG</code> or
+ <code class="constant">-D_GLIBCXX_PARALLEL</code>.
+- </p></div></div><div class="section" title="Writing a new test case"><div class="titlepage"><div><div><h3 class="title"><a id="test.new_tests"></a>Writing a new test case</h3></div></div></div><p>
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="test.new_tests"></a>Writing a new test case</h3></div></div></div><p>
+ The first step in making a new test case is to choose the correct
+ directory and file name, given the organization as previously
+ described.
+@@ -408,7 +407,7 @@
+ // { dg-options "-O0" { target *-*-* } }
+ </pre><p>
+ More examples can be found in the libstdc++-v3/testsuite/*/*.cc files.
+- </p></div><div class="section" title="Test Harness and Utilities"><div class="titlepage"><div><div><h3 class="title"><a id="test.harness"></a>Test Harness and Utilities</h3></div></div></div><div class="section" title="Dejagnu Harness Details"><div class="titlepage"><div><div><h4 class="title"><a id="test.harness.dejagnu"></a>Dejagnu Harness Details</h4></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="test.harness"></a>Test Harness and Utilities</h3></div></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="test.harness.dejagnu"></a>Dejagnu Harness Details</h4></div></div></div><p>
+ Underlying details of testing for conformance and regressions are
+ abstracted via the GNU Dejagnu package. This is similar to the
+ rest of GCC.
+@@ -435,7 +434,7 @@
+ </p><p>The <code class="code">config</code> directory is searched for any particular "target
+ board" information unique to this library. This is currently unused and sets
+ only default variables.
+-</p></div><div class="section" title="Utilities"><div class="titlepage"><div><div><h4 class="title"><a id="test.harness.utils"></a>Utilities</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="test.harness.utils"></a>Utilities</h4></div></div></div><p>
+ </p><p>
+ The testsuite directory also contains some files that implement
+ functionality that is intended to make writing test cases easier,
+@@ -447,7 +446,7 @@
+ during testing.
+ </p><p>
+ These files include the following functionality:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <span class="emphasis"><em>testsuite_abi.h</em></span>,
+ <span class="emphasis"><em>testsuite_abi.cc</em></span>,
+ <span class="emphasis"><em>testsuite_abi_check.cc</em></span>
+@@ -477,7 +476,7 @@
+ <span class="emphasis"><em>testsuite_hooks.cc</em></span>
+ </p><p>
+ A large number of utilities, including:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>VERIFY</p></li><li class="listitem"><p>set_memory_limits</p></li><li class="listitem"><p>verify_demangle</p></li><li class="listitem"><p>run_tests_wrapped_locale</p></li><li class="listitem"><p>run_tests_wrapped_env</p></li><li class="listitem"><p>try_named_locale</p></li><li class="listitem"><p>try_mkfifo</p></li><li class="listitem"><p>func_callback</p></li><li class="listitem"><p>counter</p></li><li class="listitem"><p>copy_tracker</p></li><li class="listitem"><p>copy_constructor</p></li><li class="listitem"><p>assignment_operator</p></li><li class="listitem"><p>destructor</p></li><li class="listitem"><p>pod_char, pod_int and associated char_traits specializations</p></li></ul></div></li><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>VERIFY</p></li><li class="listitem"><p>set_memory_limits</p></li><li class="listitem"><p>verify_demangle</p></li><li class="listitem"><p>run_tests_wrapped_locale</p></li><li class="listitem"><p>run_tests_wrapped_env</p></li><li class="listitem"><p>try_named_locale</p></li><li class="listitem"><p>try_mkfifo</p></li><li class="listitem"><p>func_callback</p></li><li class="listitem"><p>counter</p></li><li class="listitem"><p>copy_tracker</p></li><li class="listitem"><p>copy_constructor</p></li><li class="listitem"><p>assignment_operator</p></li><li class="listitem"><p>destructor</p></li><li class="listitem"><p>pod_char, pod_int and associated char_traits specializations</p></li></ul></div></li><li class="listitem"><p>
+ <span class="emphasis"><em>testsuite_io.h</em></span>
+ </p><p>
+ Error, exception, and constraint checking for
+@@ -491,10 +490,10 @@
+ </p><p>
+ A number of class abstractions for performance counters, and
+ reporting functions including:
+- </p><div class="itemizedlist"><ul class="itemizedlist" 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" title="Special Topics"><div class="titlepage"><div><div><h3 class="title"><a id="test.special"></a>Special Topics</h3></div></div></div><div class="section" title="Qualifying Exception Safety Guarantees"><div class="titlepage"><div><div><h4 class="title"><a id="test.exception.safety"></a>
++ </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>
+ Qualifying Exception Safety Guarantees
+- <a id="idp22593984" class="indexterm"></a>
+-</h4></div></div></div><div class="section" title="Overview"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.overview"></a>Overview</h5></div></div></div><p>
++ <a id="idm269979621504" class="indexterm"></a>
++</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>
+ Testing is composed of running a particular test sequence,
+ and looking at what happens to the surrounding code when
+ exceptions are thrown. Each test is composed of measuring
+@@ -524,9 +523,9 @@
+ completes without an exception being thrown, assume all
+ potential error paths have been exercised in a sequential
+ manner.
+- </p></div><div class="section" title="Existing tests"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.status"></a>
++ </p></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.status"></a>
+ Existing tests
+-</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Ad Hoc
+ </p><p>
+ For example,
+@@ -563,9 +562,9 @@
+ instrumentation to <code class="classname">iterator</code>
+ and <code class="classname">const_iterator</code> types that throw
+ conditionally on iterator operations.
+- </p></li></ul></div></div><div class="section" title="C++11 Requirements Test Sequence Descriptions"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.containers"></a>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="test.exception.safety.containers"></a>
+ C++11 Requirements Test Sequence Descriptions
+-</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Basic
+ </p><p>
+ Basic consistency on exception propagation tests. For
+@@ -636,4 +635,4 @@
+ The general form demonstrated in
+ <code class="filename">testsuite/23_containers/list/requirements/exception/propagation_coherent.cc
+ </code>. The instantiating test object is <code class="classname">__gnu_test::propagation_coherent</code> and is detailed in <code class="filename">testsuite/util/exception/safety.h</code>.
+- </p></li></ul></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Porting to New Hardware or Operating Systems </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> ABI Policy and Guidelines</td></tr></table></div></body></html>
++ </p></li></ul></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="internals.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_porting.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="abi.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Porting to New Hardware or Operating Systems </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> ABI Policy and Guidelines</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/using_dynamic_or_shared.html (.../branches/gcc-4_7-branch)
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Linking"><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" title="Almost Nothing"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.freestanding"></a>Almost Nothing</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ Or as close as it gets: freestanding. This is a minimal
+ configuration, with only partial support for the standard
+ library. Assume only the following header files can be used:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <code class="filename">cstdarg</code>
+ </p></li><li class="listitem"><p>
+ <code class="filename">cstddef</code>
+@@ -22,12 +21,12 @@
+ <code class="filename">typeinfo</code>
+ </p></li></ul></div><p>
+ In addition, throw in
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <code class="filename">cxxabi.h</code>.
+ </p></li></ul></div><p>
+ In the
+ C++11 <a class="link" href="using.html#manual.intro.using.flags" title="Command Options">dialect</a> add
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <code class="filename">initializer_list</code>
+ </p></li><li class="listitem"><p>
+ <code class="filename">type_traits</code>
+@@ -40,7 +39,7 @@
+ No attempt is made to verify that only the minimal subset
+ identified above is actually used at compile time. Violations
+ are diagnosed as undefined symbols at link time.
+- </p></div><div class="section" title="Finding Dynamic or Shared Libraries"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.dynamic"></a>Finding Dynamic or Shared Libraries</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.linkage.dynamic"></a>Finding Dynamic or Shared Libraries</h3></div></div></div><p>
+ If the only library built is the static library
+ (<code class="filename">libstdc++.a</code>), or if
+ specifying static linking, this section is can be skipped. But
+@@ -63,7 +62,7 @@
+ </p><p>
+ Methods vary for different platforms and different styles, and
+ are printed to the screen during installation. To summarize:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ At runtime set <code class="literal">LD_LIBRARY_PATH</code> in your
+ environment correctly, so that the shared library for
+ libstdc++ can be found and loaded. Be certain that you
+@@ -75,7 +74,7 @@
+ <span class="command"><strong>g++</strong></span>, which will in turn pass them on to
+ the linker. The exact format of the options is dependent on
+ which linker you use:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="circle"><li class="listitem"><p>
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: circle; "><li class="listitem"><p>
+ GNU ld (default on GNU/Linux):
+ <code class="literal">-Wl,-rpath,</code><code class="filename">destdir/lib</code>
+ </p></li><li class="listitem"><p>
+@@ -106,4 +105,4 @@
+ also installed, for use with Libtool. If you use Libtool to
+ create your executables, these details are taken care of for
+ you.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_namespaces.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Namespaces </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Concurrency</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_namespaces.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_concurrency.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Namespaces </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Concurrency</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch19s04.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s04.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch19s04.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s03.html" title="Extensions for Custom Containers" /><link rel="next" href="bk01pt03ch19s05.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="bk01pt03ch19s03.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s05.html">Next</a></td></tr></table><hr /></div><div class="section" title="Empirical Cost Model"><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; library&#10; , &#10; profile&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch19s03.html" title="Extensions for Custom Containers" /><link rel="next" href="bk01pt03ch19s05.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="bk01pt03ch19s03.html">Prev</a> </td><th width="60%" align="center">Chapter 19. Profile Mode</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch19s05.html">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>
+ Currently, the cost model uses formulas with predefined relative weights
+ for alternative containers or container implementations. For instance,
+ iterating through a vector is X times faster than iterating through a list.
+@@ -15,4 +14,4 @@
+ filled in either by hand or by an automated training mechanism.
+ The analysis module will then use this database instead of the built in.
+ generic parameters.
+- </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Extensions for Custom Containers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation Issues</td></tr></table></div></body></html>
++ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch19s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="profile_mode.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch19s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Extensions for Custom Containers </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Implementation Issues</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/using_headers.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/using_headers.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/using_headers.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Headers"><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" title="Header Files"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.all"></a>Header Files</h3></div></div></div><p>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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>
+ The C++ standard specifies the entire set of header files that
+ must be available to all hosted implementations. Actually, the
+ word "files" is a misnomer, since the contents of the
+@@ -19,19 +18,19 @@
+ the 1998 standard as updated for 2003, and the current 2011 standard.
+ </p><p>
+ 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>.
+- </p><div class="table"><a id="idp13045856"></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="idp13082336"></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>
++ </p><div class="table"><a id="idm269989143968"></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="idm269989107488"></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>
+ C++11 include files. These are only available in C++11 compilation
+ mode, i.e. <code class="literal">-std=c++11</code> or <code class="literal">-std=gnu++11</code>.
+-</p><p></p><div class="table"><a id="idp13107072"></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="idp13158512"></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>
++</p><p></p><div class="table"><a id="idm269989082752"></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="idm269989031312"></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>
+ In addition, TR1 includes as:
+-</p><div class="table"><a id="idp13188400"></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="idp13205328"></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++
++</p><div class="table"><a id="idm269989001424"></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="idm269988984496"></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++
+ compiler supports scalar decimal floating-point types defined via
+ <code class="code">__attribute__((mode(SD|DD|LD)))</code>.
+-</p><div class="table"><a id="idp13226400"></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>
++</p><div class="table"><a id="idm269988963424"></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>
+ Also included are files for the C++ ABI interface:
+-</p><div class="table"><a id="idp13231920"></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>
++</p><div class="table"><a id="idm269988957904"></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>
+ And a large variety of extensions.
+-</p><div class="table"><a id="idp13238320"></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="idp13274048"></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="idp13288816"></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="idp13302192"></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" title="Mixing Headers"><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.
++</p><div class="table"><a id="idm269988951504"></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="idm269988915776"></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="idm269988901008"></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="idm269988887632"></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.
+ </p><p>First, mixing different dialects of the standard headers is not
+ possible. It's an all-or-nothing affair. Thus, code like
+ </p><pre class="programlisting">
+@@ -54,7 +53,7 @@
+ #include &lt;tr1/type_traits&gt;
+ #include &lt;type_traits&gt;
+ </pre><p> Several parts of C++11 diverge quite substantially from TR1 predecessors.
+-</p></div><div class="section" title="The C Headers and namespace std"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.cheaders"></a>The C Headers and <code class="code">namespace std</code></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.cheaders"></a>The C Headers and <code class="code">namespace std</code></h3></div></div></div><p>
+ The standard specifies that if one includes the C-style header
+ (&lt;math.h&gt; in this case), the symbols will be available
+ in the global namespace and perhaps in
+@@ -73,10 +72,10 @@
+ used uniformly, instead of a combination
+ of <code class="code">std::sinf</code>, <code class="code">std::sin</code>,
+ and <code class="code">std::sinl</code>.
+-</p></div><div class="section" title="Precompiled Headers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.pre"></a>Precompiled Headers</h3></div></div></div><p>There are three base header files that are provided. They can be
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.headers.pre"></a>Precompiled Headers</h3></div></div></div><p>There are three base header files that are provided. They can be
+ used to precompile the standard headers and extensions into binary
+ files that may the be used to speed compiles that use these headers.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>stdc++.h</p><p>Includes all standard headers. Actual content varies depending on
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>stdc++.h</p><p>Includes all standard headers. Actual content varies depending on
+ language dialect.
+ </p></li><li class="listitem"><p>stdtr1c++.h</p><p>Includes all of &lt;stdc++.h&gt;, and adds all the TR1 headers.
+ </p></li><li class="listitem"><p>extc++.h</p><p>Includes all of &lt;stdtr1c++.h&gt;, and adds all the Extension headers.
+@@ -100,4 +99,4 @@
+ . /mnt/share/bld/H-x86-gcc.20071201/include/c++/4.3.0/iostream
+ . /mnt/share/bld/H-x86-gcc.20071201include/c++/4.3.0/string
+ </pre><p>The exclamation point to the left of the <code class="code">stdc++.h.gch</code> listing means that the generated PCH file was used, and thus the </p><p></p><p> Detailed information about creating precompiled header files can be found in the GCC <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html" target="_top">documentation</a>.
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_macros.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 3. Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Macros</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_macros.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 3. Using </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Macros</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/using_namespaces.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/using_namespaces.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/using_namespaces.html (.../branches/gcc-4_7-branch)
+@@ -1,7 +1,6 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Namespaces"><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" title="Available Namespaces"><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.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>std</p><p>The ISO C++ standards specify that "all library entities are defined
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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.
++</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
+ within namespace std." This includes namespaces nested
+ within <code class="code">namespace std</code>, such as <code class="code">namespace
+ std::tr1</code>.
+@@ -12,11 +11,11 @@
+ include <code class="code">__gnu_cxx</code>, <code class="code">__gnu_debug</code>, <code class="code">__gnu_parallel</code>,
+ and <code class="code">__gnu_pbds</code>.
+ </p></li></ul></div><p> A complete list of implementation namespaces (including namespace contents) is available in the generated source <a class="link" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespaces.html" target="_top">documentation</a>.
+-</p></div><div class="section" title="namespace std"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.std"></a>namespace std</h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.std"></a>namespace std</h3></div></div></div><p>
+ One standard requirement is that the library components are defined
+ in <code class="code">namespace std::</code>. Thus, in order to use these types or
+ functions, one must do one of two things:
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>put a kind of <span class="emphasis"><em>using-declaration</em></span> in your source
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>put a kind of <span class="emphasis"><em>using-declaration</em></span> in your source
+ (either <code class="code">using namespace std;</code> or i.e. <code class="code">using
+ std::string;</code>) This approach works well for individual source files, but
+ should not be used in a global context, like header files.
+@@ -25,7 +24,7 @@
+ (i.e. <code class="code">std::string</code>, <code class="code">std::cout</code>) Always can be
+ used, and usually enhanced, by strategic use of typedefs. (In the
+ cases where the qualified verbiage becomes unwieldy.)
+- </p></li></ul></div></div><div class="section" title="Using Namespace Composition"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.comp"></a>Using Namespace Composition</h3></div></div></div><p>
++ </p></li></ul></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.namespaces.comp"></a>Using Namespace Composition</h3></div></div></div><p>
+ Best practice in programming suggests sequestering new data or
+ functionality in a sanely-named, unique namespace whenever
+ possible. This is considered an advantage over dumping everything in
+@@ -58,4 +57,4 @@
+ std::string;</code> (depending on whether the system has
+ libstdc++ in <code class="code">std::</code> or not). (ideas from
+ Llewelly and Karl Nelson)
+-</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_macros.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Macros </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Linking</td></tr></table></div></body></html>
++</p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_macros.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_dynamic_or_shared.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Macros </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Linking</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/debug.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/debug.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/debug.html (.../branches/gcc-4_7-branch)
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt02.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="bk01pt02.html">Next</a></td></tr></table><hr /></div><div class="section" title="Debugging Support"><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; C++&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt02.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="bk01pt02.html">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>
+ There are numerous things that can be done to improve the ease with
+ which C++ binaries are debugged when using the GNU tool chain. Here
+ are some of them.
+-</p><div class="section" title="Using g++"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compiler"></a>Using <span class="command"><strong>g++</strong></span></h3></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compiler"></a>Using <span class="command"><strong>g++</strong></span></h3></div></div></div><p>
+ Compiler flags determine how debug information is transmitted
+ between compilation and debug or analysis tools.
+ </p><p>
+@@ -31,7 +30,7 @@
+ Many other options are available: please see <a class="link" href="http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging%20Options" target="_top">"Options
+ for Debugging Your Program"</a> in Using the GNU Compiler
+ Collection (GCC) for a complete list.
+-</p></div><div class="section" title="Debug Versions of Library Binary Files"><div class="titlepage"><div><div><h3 class="title"><a id="debug.req"></a>Debug Versions of Library Binary Files</h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.req"></a>Debug Versions of Library Binary Files</h3></div></div></div><p>
+ If you would like debug symbols in libstdc++, there are two ways to
+ build libstdc++ with debug flags. The first is to run make from the
+ toplevel in a freshly-configured tree with
+@@ -52,7 +51,7 @@
+ </pre><p>
+ This quick and dirty approach is often sufficient for quick
+ debugging tasks, when you cannot or don't want to recompile your
+- application to use the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>.</p></div><div class="section" title="Memory Leak Hunting"><div class="titlepage"><div><div><h3 class="title"><a id="debug.memory"></a>Memory Leak Hunting</h3></div></div></div><p>
++ application to use the <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">debug mode</a>.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.memory"></a>Memory Leak Hunting</h3></div></div></div><p>
+ There are various third party memory tracing and debug utilities
+ that can be used to provide detailed memory allocation information
+ about C++ code. An exhaustive list of tools is not going to be
+@@ -121,7 +120,7 @@
+ up the runtime environment, library, and test file, might be:
+ </p><pre class="programlisting">
+ valgrind -v --num-callers=20 --leak-check=yes --leak-resolution=high --show-reachable=yes a.out
+-</pre></div><div class="section" title="Data Race Hunting"><div class="titlepage"><div><div><h3 class="title"><a id="debug.races"></a>Data Race Hunting</h3></div></div></div><p>
++</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.races"></a>Data Race Hunting</h3></div></div></div><p>
+ All synchronization primitives used in the library internals need to be
+ understood by race detectors so that they do not produce false reports.
+ </p><p>
+@@ -161,7 +160,7 @@
+ DRD</a>,
+ <a class="link" href="http://valgrind.org/docs/manual/hg-manual.html" target="_top">
+ Helgrind</a>, and
+- <a class="link" href="http://code.google.com/p/data-race-test" target="_top">
++ <a class="link" href="http://code.google.com/p/data-race-test/" target="_top">
+ ThreadSanitizer</a>.
+ </p><p>
+ With DRD, Helgrind and ThreadSanitizer you will need to define
+@@ -171,7 +170,7 @@
+ #define _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(A) ANNOTATE_HAPPENS_AFTER(A)
+ </pre><p>
+ Refer to the documentation of each particular tool for details.
+-</p></div><div class="section" title="Using gdb"><div class="titlepage"><div><div><h3 class="title"><a id="debug.gdb"></a>Using <span class="command"><strong>gdb</strong></span></h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.gdb"></a>Using <span class="command"><strong>gdb</strong></span></h3></div></div></div><p>
+ </p><p>
+ Many options are available for GDB itself: please see <a class="link" href="http://sources.redhat.com/gdb/current/onlinedocs/gdb/" target="_top">
+ "GDB features for C++" </a> in the GDB documentation. Also
+@@ -224,18 +223,18 @@
+ on-line versions of the GDB user manual in GDB's homepage, at
+ <a class="link" href="http://sourceware.org/gdb/" target="_top"> "GDB: The GNU Project
+ Debugger" </a>.
+-</p></div><div class="section" title="Tracking uncaught exceptions"><div class="titlepage"><div><div><h3 class="title"><a id="debug.exceptions"></a>Tracking uncaught exceptions</h3></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.exceptions"></a>Tracking uncaught exceptions</h3></div></div></div><p>
+ The <a class="link" href="termination.html#support.termination.verbose" title="Verbose Terminate Handler">verbose
+ termination handler</a> gives information about uncaught
+ exceptions which are killing the program. It is described in the
+ linked-to page.
+-</p></div><div class="section" title="Debug Mode"><div class="titlepage"><div><div><h3 class="title"><a id="debug.debug_mode"></a>Debug Mode</h3></div></div></div><p> The <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">Debug Mode</a>
++</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.debug_mode"></a>Debug Mode</h3></div></div></div><p> The <a class="link" href="debug_mode.html" title="Chapter 17. Debug Mode">Debug Mode</a>
+ has compile and run-time checks for many containers.
+- </p></div><div class="section" title="Compile Time Checking"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compile_time_checks"></a>Compile Time Checking</h3></div></div></div><p> The <a class="link" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks">Compile-Time
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.compile_time_checks"></a>Compile Time Checking</h3></div></div></div><p> The <a class="link" href="ext_compile_checks.html" title="Chapter 16. Compile Time Checks">Compile-Time
+ Checks</a> Extension has compile-time checks for many algorithms.
+- </p></div><div class="section" title="Profile-based Performance Analysis"><div class="titlepage"><div><div><h3 class="title"><a id="debug.profile_mode"></a>Profile-based Performance Analysis</h3></div></div></div><p> The <a class="link" href="profile_mode.html" title="Chapter 19. Profile Mode">Profile-based
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="debug.profile_mode"></a>Profile-based Performance Analysis</h3></div></div></div><p> The <a class="link" href="profile_mode.html" title="Chapter 19. Profile Mode">Profile-based
+ Performance Analysis</a> Extension has performance checks for many
+ algorithms.
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_exceptions.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Exceptions </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Part II. 
+ Standard Contents
+- </td></tr></table></div></body></html>
++ </td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/localization.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/localization.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/localization.html (.../branches/gcc-4_7-branch)
+@@ -1,18 +1,17 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
+ Localization
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 8.  Localization"><div class="titlepage"><div><div><h2 class="title"><a id="std.localization"></a>Chapter 8. 
++ </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. 
+ Localization
+- <a id="idp15674528" class="indexterm"></a>
+-</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#idp15752864">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" title="Locales"><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" title="locale"><div class="titlepage"><div><div><h3 class="title"><a id="std.localization.locales.locale"></a>locale</h3></div></div></div><p>
++ <a id="idm269986526032" class="indexterm"></a>
++</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#idm269986448912">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>
+ Describes the basic locale object, including nested
+ classes id, facet, and the reference-counted implementation object,
+ class _Impl.
+-</p><div class="section" title="Requirements"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.req"></a>Requirements</h4></div></div></div><p>
++</p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.req"></a>Requirements</h4></div></div></div><p>
+ Class locale is non-templatized and has two distinct types nested
+ inside of it:
+ </p><div class="blockquote"><blockquote class="blockquote"><p>
+@@ -26,7 +25,7 @@
+ thousands separator in the locale.
+ </p><p>
+ Literally, a facet is strictly defined:
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Containing the following public data member:
+ </p><p>
+ <code class="code">static locale::id id;</code>
+@@ -48,7 +47,7 @@
+ </em></span>
+ </p></blockquote></div><p>
+ Provides an index for looking up specific facets.
+-</p></div><div class="section" title="Design"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.design"></a>Design</h4></div></div></div><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.design"></a>Design</h4></div></div></div><p>
+ The major design challenge is fitting an object-orientated and
+ non-global locale design on top of POSIX and other relevant standards,
+ which include the Single Unix (nee X/Open.)
+@@ -55,7 +54,7 @@
+ </p><p>
+ Because C and earlier versions of POSIX fall down so completely,
+ portability is an issue.
+-</p></div><div class="section" title="Implementation"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.impl"></a>Implementation</h4></div></div></div><div class="section" title="Interacting with &quot;C&quot; locales"><div class="titlepage"><div><div><h5 class="title"><a id="locale.impl.c"></a>Interacting with "C" locales</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.impl"></a>Implementation</h4></div></div></div><div class="section"><div class="titlepage"><div><div><h5 class="title"><a id="locale.impl.c"></a>Interacting with "C" locales</h5></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ <code class="code">`locale -a`</code> displays available locales.
+ </p><div class="blockquote"><blockquote class="blockquote"><pre class="programlisting">
+ af_ZA
+@@ -385,7 +384,7 @@
+ particular on the working of locale(""), which constructs the locale
+ object from the environment of the running program, that is, in
+ practice, the set of LC_ALL, LANG, etc. variable of the shell.
+-</p></div></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
++</p></div></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="locales.locale.future"></a>Future</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
+ Locale initialization: at what point does _S_classic, _S_global
+ get initialized? Can named locales assume this initialization
+ has already taken place?
+@@ -403,18 +402,18 @@
+ What should non-required facet instantiations do? If the
+ generic implementation is provided, then how to end-users
+ provide specializations?
+- </p></li></ul></div></div><div class="bibliography" title="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="idp15718112"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269986483120"></a><p><span class="citetitle"><em class="citetitle">
+ The GNU C Library
+ </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="idp15722880"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></p></div><div class="biblioentry"><a id="idm269986478352"></a><p><span class="citetitle"><em class="citetitle">
+ Correspondence
+- </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="idp15725968"></a><p><span class="citetitle"><em class="citetitle">
++ </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="idm269986475264"></a><p><span class="citetitle"><em class="citetitle">
+ ISO/IEC 14882:1998 Programming languages - C++
+- </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idp15728256"></a><p><span class="citetitle"><em class="citetitle">
++ </em>. </span><span class="copyright">Copyright © 1998 ISO. </span></p></div><div class="biblioentry"><a id="idm269986472976"></a><p><span class="citetitle"><em class="citetitle">
+ ISO/IEC 9899:1999 Programming languages - C
+- </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry" title="System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)"><a id="idp15730528"></a><p><span class="title"><em>
++ </em>. </span><span class="copyright">Copyright © 1999 ISO. </span></p></div><div class="biblioentry"><a id="idm269986470704"></a><p><span class="title"><em>
+ <a class="link" href="http://www.opengroup.org/austin/" target="_top">
+ System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
+ </a>
+@@ -421,11 +420,11 @@
+ </em>. </span><span class="copyright">Copyright © 2008
+ The Open Group/The Institute of Electrical and Electronics
+ Engineers, Inc.
+- . </span></p></div><div class="biblioentry"><a id="idp15733760"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></p></div><div class="biblioentry"><a id="idm269986467472"></a><p><span class="citetitle"><em class="citetitle">
+ The C++ Programming Language, Special Edition
+ </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">
+ Addison Wesley
+- . </span></span></p></div><div class="biblioentry"><a id="idp15738384"></a><p><span class="citetitle"><em class="citetitle">
++ . </span></span></p></div><div class="biblioentry"><a id="idm269986462848"></a><p><span class="citetitle"><em class="citetitle">
+ Standard C++ IOStreams and Locales
+ </em>. </span><span class="subtitle">
+ Advanced Programmer's Guide and Reference
+@@ -434,4 +433,4 @@
+ . </span></span></p></div></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="strings.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="facets.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 7. 
+ Strings
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Facets</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Facets</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/ext_algorithms.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/ext_algorithms.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/ext_algorithms.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 25. Algorithms"><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
++</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
+ and count_if. The standard versions return their results. The
+ additional signatures return void, but take a final parameter by
+ reference to which they assign their results, e.g.,
+@@ -15,9 +14,9 @@
+ copy_n (_InputIter first, _Size count, _OutputIter result);</pre><p>which copies the first 'count' elements at 'first' into 'result'.
+ </p><p>25.3 (sorting 'n' heaps 'n' stuff) is extended with some helper
+ predicates. Look in the doxygen-generated pages for notes on these.
+-</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><code class="code">is_heap</code> tests whether or not a range is a heap.</p></li><li class="listitem"><p><code class="code">is_sorted</code> tests whether or not a range is sorted in
++</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><code class="code">is_heap</code> tests whether or not a range is a heap.</p></li><li class="listitem"><p><code class="code">is_sorted</code> tests whether or not a range is sorted in
+ nondescending order.</p></li></ul></div><p>25.3.8 (lexicographical_compare) is extended with
+ </p><pre class="programlisting">
+ lexicographical_compare_3way(_InputIter1 first1, _InputIter1 last1,
+ _InputIter2 first2, _InputIter2 last2)</pre><p>which does... what?
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 24. Utilities </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 26. Numerics</td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_utilities.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="ext_numerics.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 24. Utilities </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 26. Numerics</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/debug_mode.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/debug_mode.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/debug_mode.html (.../branches/gcc-4_7-branch)
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; C++&#10; , &#10; library&#10; , &#10; debug&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch17s02.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. 
+ Extensions
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch17s02.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 17. Debug Mode"><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="bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.link">Link- and run-time coexistence of release- and
+- debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.other">Other Implementations</a></span></dt></dl></dd></dl></div><div class="section" title="Intro"><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>
++</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch17s02.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="bk01pt03ch17s02.html">Semantics</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html">Using</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.mode">Using the Debug Mode</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s03.html#debug_mode.using.specific">Using a Specific Debug Container</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html">Design</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.goals">Goals</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods">Methods</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.wrappers">The Wrapper Model</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_iter">Safe Iterators</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.safe_seq">Safe Sequences (Containers)</a></span></dt></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.precond">Precondition Checking</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#debug_mode.design.methods.coexistence">Release- and debug-mode coexistence</a></span></dt><dd><dl><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.compile">Compile-time coexistence of release- and debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.link">Link- and run-time coexistence of release- and
++ debug-mode components</a></span></dt><dt><span class="section"><a href="bk01pt03ch17s04.html#methods.coexistence.alt">Alternatives for Coexistence</a></span></dt></dl></dd></dl></dd><dt><span class="section"><a href="bk01pt03ch17s04.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>
+ By default, libstdc++ is built with efficiency in mind, and
+ therefore performs little or no error checking that is not
+ required by the C++ standard. This means that programs that
+@@ -21,7 +20,7 @@
+ The libstdc++ debug mode performs checking for many areas of the
+ C++ standard, but the focus is on checking interactions among
+ standard iterators, containers, and algorithms, including:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p><span class="emphasis"><em>Safe iterators</em></span>: Iterators keep track of the
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p><span class="emphasis"><em>Safe iterators</em></span>: Iterators keep track of the
+ container whose elements they reference, so errors such as
+ incrementing a past-the-end iterator or dereferencing an iterator
+ that points to a container that has been destructed are diagnosed
+@@ -35,4 +34,4 @@
+ the same predicate that was passed
+ to <code class="code">set_intersection</code>; the libstdc++ debug mode will
+ detect an error if the sequence is not sorted or was sorted by a
+- different predicate.</p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch17s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 16. Compile Time Checks </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Semantics</td></tr></table></div></body></html>
++ different predicate.</p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ext_compile_checks.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="extensions.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch17s02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 16. Compile Time Checks </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Semantics</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/using_concurrency.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/using_concurrency.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/using_concurrency.html (.../branches/gcc-4_7-branch)
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="Concurrency"><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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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
+ of multithreaded applications which use the Standard C++
+ library. This information is GCC-specific since the C++
+ standard does not address matters of multithreaded applications.
+- </p><div class="section" title="Prerequisites"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.prereq"></a>Prerequisites</h3></div></div></div><p>All normal disclaimers aside, multithreaded C++ application are
++ </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.prereq"></a>Prerequisites</h3></div></div></div><p>All normal disclaimers aside, multithreaded C++ application are
+ only supported when libstdc++ and all user code was built with
+ compilers which report (via <code class="code"> gcc/g++ -v </code>) the same thread
+ model and that model is not <span class="emphasis"><em>single</em></span>. As long as your
+@@ -33,7 +32,7 @@
+ -pthread is honored. Some other ports use other switches.
+ AFAIK, none of this is properly documented anywhere other than
+ in ``gcc -dumpspecs'' (look at lib and cpp entries).
+- </p></div><div class="section" title="Thread Safety"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.thread_safety"></a>Thread Safety</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.thread_safety"></a>Thread Safety</h3></div></div></div><p>
+ In the terms of the 2011 C++ standard a thread-safe program is one which
+ does not perform any conflicting non-atomic operations on memory locations
+ and so does not contain any data races.
+@@ -45,7 +44,7 @@
+ prior to the 2011 standard.
+ </p><p>The library strives to be thread-safe when all of the following
+ conditions are met:
+- </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>The system's libc is itself thread-safe,
++ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>The system's libc is itself thread-safe,
+ </p></li><li class="listitem"><p>
+ The compiler in use reports a thread model other than
+ 'single'. This can be tested via output from <code class="code">gcc
+@@ -156,9 +155,9 @@
+ <a class="link" href="http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/user-faq.html" target="_top">Threads
+ and memory model for C++</a> pages, particularly the <a class="link" href="http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/threadsintro.html" target="_top">introduction</a>
+ and <a class="link" href="http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/user-faq.html" target="_top">FAQ</a>.
+- </p></div><div class="section" title="Atomics"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.atomics"></a>Atomics</h3></div></div></div><p>
+- </p></div><div class="section" title="IO"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.io"></a>IO</h3></div></div></div><p>This gets a bit tricky. Please read carefully, and bear with me.
+- </p><div class="section" title="Structure"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.structure"></a>Structure</h4></div></div></div><p>A wrapper
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.atomics"></a>Atomics</h3></div></div></div><p>
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.io"></a>IO</h3></div></div></div><p>This gets a bit tricky. Please read carefully, and bear with me.
++ </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.structure"></a>Structure</h4></div></div></div><p>A wrapper
+ type called <code class="code">__basic_file</code> provides our abstraction layer
+ for the <code class="code">std::filebuf</code> classes. Nearly all decisions dealing
+ with actual input and output must be made in <code class="code">__basic_file</code>.
+@@ -166,7 +165,7 @@
+ but is not used in the current code. Providing locking at any higher
+ level is akin to providing locking within containers, and is not done
+ for the same reasons (see the links above).
+- </p></div><div class="section" title="Defaults"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.defaults"></a>Defaults</h4></div></div></div><p>The __basic_file type is simply a collection of small wrappers around
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.defaults"></a>Defaults</h4></div></div></div><p>The __basic_file type is simply a collection of small wrappers around
+ the C stdio layer (again, see the link under Structure). We do no
+ locking ourselves, but simply pass through to calls to <code class="code">fopen</code>,
+ <code class="code">fwrite</code>, and so forth.
+@@ -188,7 +187,7 @@
+ contained in the stream formatting classes (e.g., setting up callbacks
+ inside an <code class="code">std::ofstream</code>), you need to guard such accesses
+ like any other critical shared resource.
+- </p></div><div class="section" title="Future"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.future"></a>Future</h4></div></div></div><p> A
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.future"></a>Future</h4></div></div></div><p> A
+ second choice may be available for I/O implementations: libio. This is
+ disabled by default, and in fact will not currently work due to other
+ issues. It will be revisited, however.
+@@ -213,10 +212,10 @@
+ version will see calls from libstdc++ directly into the glibc already
+ installed. For other platforms, a copy of the libio subsection will
+ be built and included in libstdc++.
+- </p></div><div class="section" title="Alternatives"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.alt"></a>Alternatives</h4></div></div></div><p>Don't forget that other cstdio implementations are possible. You could
++ </p></div><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="concurrency.io.alt"></a>Alternatives</h4></div></div></div><p>Don't forget that other cstdio implementations are possible. You could
+ easily write one to perform your own forms of locking, to solve your
+ "interesting" problems.
+- </p></div></div><div class="section" title="Containers"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.containers"></a>Containers</h3></div></div></div><p>This section discusses issues surrounding the design of
++ </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="manual.intro.using.concurrency.containers"></a>Containers</h3></div></div></div><p>This section discusses issues surrounding the design of
+ multithreaded applications which use Standard C++ containers.
+ All information in this section is current as of the gcc 3.0
+ release and all later point releases. Although earlier gcc
+@@ -269,4 +268,4 @@
+ useful are details
+ on <a class="link" href="memory.html#std.util.memory.allocator" title="Allocators">allocator</a>
+ options and capabilities.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_exceptions.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Linking </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Exceptions</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="using_dynamic_or_shared.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="using.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="using_exceptions.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Linking </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Exceptions</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt02.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt02.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt02.html (.../branches/gcc-4_7-branch)
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Standard Contents
+- </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" title="Part II.  Standard Contents"><div class="titlepage"><div><div><h1 class="title"><a id="manual.std"></a>Part II. 
++ </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. 
+ Standard Contents
+- </h1></div></div></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="chapter"><a href="support.html">4.
++ </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.
+ Support
+
+ </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.
+@@ -13,13 +12,13 @@
+ </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="bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6.
+ Utilities
+
+-</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#idp13894640">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13898192">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13911488">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#idp15484560">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15507072">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15514368">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15528992">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#idp15545344">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15548928">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.
++</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#idm269988298944">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm269988295392">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269988282096">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#idm269986714912">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269986692400">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269986685104">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269986670480">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#idm269986654128">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269986650544">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.
+ Strings
+
+ </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.
+ Localization
+
+-</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#idp15752864">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.
++</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#idm269986448912">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.
+ Containers
+
+ </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="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.
+@@ -43,4 +42,4 @@
+ </a></span></dt><dd><dl><dt><span class="section"><a href="concurrency.html#std.concurrency.api">API Reference</a></span></dt></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="debug.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="support.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Debugging Support </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 4. 
+ Support
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/appendix_gfdl.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/appendix_gfdl.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/appendix_gfdl.html (.../branches/gcc-4_7-branch)
+@@ -1,8 +1,7 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.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. 
+ Appendices
+-</th><td width="20%" align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix E. GNU Free Documentation License"><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>
++</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>
+ Copyright © 2000, 2001, 2002, 2007, 2008
+ <a class="link" href="http://www.fsf.org/" target="_top">Free Software Foundation, Inc.</a>
+ </p><p>
+@@ -446,4 +445,4 @@
+ use in free software.
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_gpl.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="../bk02.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix D. 
+ <acronym class="acronym">GNU</acronym> General Public License version 3
+-  </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
++  </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/containers.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/containers.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/containers.html (.../branches/gcc-4_7-branch)
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
+ Containers
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 9.  Containers"><div class="titlepage"><div><div><h2 class="title"><a id="std.containers"></a>Chapter 9. 
++ </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. 
+ Containers
+- <a id="idp16014032" class="indexterm"></a>
+-</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="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" title="Sequences"><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" title="list"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.list"></a>list</h3></div></div></div><div class="section" title="list::size() is O(n)"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.list.size"></a>list::size() is O(n)</h4></div></div></div><p>
++ <a id="idm269986189248" class="indexterm"></a>
++</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="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>
+ Yes it is, and that's okay. This is a decision that we preserved
+ when we imported SGI's STL implementation. The following is
+ quoted from <a class="link" href="http://www.sgi.com/tech/stl/FAQ.html" target="_top">their FAQ</a>:
+@@ -42,8 +41,8 @@
+ </p><pre class="programlisting">
+ if (L.empty())
+ ...
+- </pre></blockquote></div></div></div><div class="section" title="vector"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.vector"></a>vector</h3></div></div></div><p>
+- </p><div class="section" title="Space Overhead Management"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.vector.management"></a>Space Overhead Management</h4></div></div></div><p>
++ </pre></blockquote></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="containers.sequences.vector"></a>vector</h3></div></div></div><p>
++ </p><div class="section"><div class="titlepage"><div><div><h4 class="title"><a id="sequences.vector.management"></a>Space Overhead Management</h4></div></div></div><p>
+ In <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-04/msg00105.html" target="_top">this
+ message to the list</a>, Daniel Kostecky announced work on an
+ alternate form of <code class="code">std::vector</code> that would support
+@@ -52,4 +51,4 @@
+ </p><p>
+ The first two alpha releases were announced <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00048.html" target="_top">here</a>
+ and <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2002-07/msg00111.html" target="_top">here</a>.
+- </p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Facets </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Associative</td></tr></table></div></body></html>
++ </p></div></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="facets.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="associative.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Facets </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Associative</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/io.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/io.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/io.html (.../branches/gcc-4_7-branch)
+@@ -1,14 +1,13 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.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. 
+ Input and Output
+
+ </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. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 13.  Input and Output"><div class="titlepage"><div><div><h2 class="title"><a id="std.io"></a>Chapter 13. 
++ </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. 
+ Input and Output
+- <a id="idp16220688" class="indexterm"></a>
+-</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" title="Iostream Objects"><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
++ <a id="idm269985984816" class="indexterm"></a>
++</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
+ only include the headers you really need. Many people simply include
+ &lt;iostream&gt; when they don't need to -- and that can <span class="emphasis"><em>penalize
+ your runtime as well.</em></span> Here are some tips on which header to use
+@@ -118,4 +117,4 @@
+ the standard objects in that source file; you'll pay less startup
+ time. Only include the header files you need to in general; your
+ compile times will go down when there's less parsing work to do.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Stream Buffers</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="numerics_and_c.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="streambufs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Interacting with C </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Stream Buffers</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/index.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/index.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/index.html (.../branches/gcc-4_7-branch)
+@@ -1,8 +1,7 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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" title="The GNU C++ Library Manual"><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
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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
+ <a class="link" href="http://www.fsf.org" target="_top">FSF</a>
+- </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.
++ </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.
+ Introduction
+
+ </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="bk01pt02.html">II.
+@@ -16,13 +15,13 @@
+ </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="bk01pt02ch05s02.html">Concept Checking</a></span></dt></dl></dd><dt><span class="chapter"><a href="utilities.html">6.
+ Utilities
+
+-</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#idp13894640">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13898192">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13911488">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#idp15484560">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15507072">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15514368">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15528992">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#idp15545344">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15548928">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.
++</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#idm269988298944">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm269988295392">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269988282096">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#idm269986714912">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269986692400">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269986685104">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269986670480">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#idm269986654128">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269986650544">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.
+ Strings
+
+ </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.
+ Localization
+
+-</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#idp15752864">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.
++</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#idm269986448912">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.
+ Containers
+
+ </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="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.
+@@ -144,21 +143,21 @@
+
+ </a></span></dt><dt><span class="appendix"><a href="appendix_gpl.html">D.
+ <acronym class="acronym">GNU</acronym> General Public License version 3
+- </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#idp17575248">Node Invariants</a></dt><dt>22.2. <a href="policy_data_structures.html#idp17581968">Underlying Associative Data Structures</a></dt><dt>22.3. <a href="policy_data_structures.html#idp17613664">Range Iteration in Different Data Structures</a></dt><dt>22.4. <a href="policy_data_structures.html#idp17628576">Point Iteration in Hash Data Structures</a></dt><dt>22.5. <a href="policy_data_structures.html#idp17637776">Effect of erase in different underlying data structures</a></dt><dt>22.6. <a href="policy_data_structures.html#idp17705360">Underlying Priority Queue Data Structures</a></dt><dt>22.7. <a href="policy_data_structures_using.html#idp17768064">Exception Hierarchy</a></dt><dt>22.8. <a href="policy_data_structures_design.html#idp17962720">Non-unique Mapping Standard Containers</a></dt><dt>22.9. <a href="policy_data_structures_design.html#fig.pbds_embedded_lists_2">
++ </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#idm269984634416">Node Invariants</a></dt><dt>22.2. <a href="policy_data_structures.html#idm269984627696">Underlying Associative Data Structures</a></dt><dt>22.3. <a href="policy_data_structures.html#idm269984596064">Range Iteration in Different Data Structures</a></dt><dt>22.4. <a href="policy_data_structures.html#idm269984581152">Point Iteration in Hash Data Structures</a></dt><dt>22.5. <a href="policy_data_structures.html#idm269984571888">Effect of erase in different underlying data structures</a></dt><dt>22.6. <a href="policy_data_structures.html#idm269984504224">Underlying Priority Queue Data Structures</a></dt><dt>22.7. <a href="policy_data_structures_using.html#idm269984441456">Exception Hierarchy</a></dt><dt>22.8. <a href="policy_data_structures_design.html#idm269984247008">Non-unique Mapping Standard Containers</a></dt><dt>22.9. <a href="policy_data_structures_design.html#fig.pbds_embedded_lists_2">
+ Effect of embedded lists in
+ <code class="classname">std::multimap</code>
+- </a></dt><dt>22.10. <a href="policy_data_structures_design.html#idp17986224">Non-unique Mapping Containers</a></dt><dt>22.11. <a href="policy_data_structures_design.html#idp18006032">Point Iterator Hierarchy</a></dt><dt>22.12. <a href="policy_data_structures_design.html#idp18019376">Invalidation Guarantee Tags Hierarchy</a></dt><dt>22.13. <a href="policy_data_structures_design.html#idp18049600">Container Tag Hierarchy</a></dt><dt>22.14. <a href="policy_data_structures_design.html#idp18089744">Hash functions, ranged-hash functions, and
+- range-hashing functions</a></dt><dt>22.15. <a href="policy_data_structures_design.html#idp18154176">Insert hash sequence diagram</a></dt><dt>22.16. <a href="policy_data_structures_design.html#idp18161232">Insert hash sequence diagram with a null policy</a></dt><dt>22.17. <a href="policy_data_structures_design.html#idp18178048">Hash policy class diagram</a></dt><dt>22.18. <a href="policy_data_structures_design.html#idp18197088">Balls and bins</a></dt><dt>22.19. <a href="policy_data_structures_design.html#idp18227776">Insert resize sequence diagram</a></dt><dt>22.20. <a href="policy_data_structures_design.html#idp18235600">Standard resize policy trigger sequence
+- diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#idp18239760">Standard resize policy size sequence
+- diagram</a></dt><dt>22.22. <a href="policy_data_structures_design.html#idp18317728">Tree node invariants</a></dt><dt>22.23. <a href="policy_data_structures_design.html#idp18327168">Tree node invalidation</a></dt><dt>22.24. <a href="policy_data_structures_design.html#idp18340336">A tree and its update policy</a></dt><dt>22.25. <a href="policy_data_structures_design.html#idp18352000">Restoring node invariants</a></dt><dt>22.26. <a href="policy_data_structures_design.html#idp18360176">Insert update sequence</a></dt><dt>22.27. <a href="policy_data_structures_design.html#idp18382432">Useless update path</a></dt><dt>22.28. <a href="policy_data_structures_design.html#idp18427056">A PATRICIA trie</a></dt><dt>22.29. <a href="policy_data_structures_design.html#idp18437488">A trie and its update policy</a></dt><dt>22.30. <a href="policy_data_structures_design.html#idp18468000">A simple list</a></dt><dt>22.31. <a href="policy_data_structures_design.html#idp18473584">The counter algorithm</a></dt><dt>22.32. <a href="policy_data_structures_design.html#idp18537424">Underlying Priority-Queue Data-Structures.</a></dt><dt>22.33. <a href="policy_data_structures_design.html#idp18572464">Priority-Queue Data-Structure Tags.</a></dt><dt>B.1. <a href="appendix_porting.html#idp21998848">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#idp4061552">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#idp7562848">C++ 2011 Implementation Status</a></dt><dt>1.3. <a href="status.html#idp2271168">C++ TR1 Implementation Status</a></dt><dt>1.4. <a href="status.html#idp12526624">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using.html#idp13018432">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#idp13045856">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#idp13082336">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#idp13107072">C++ 2011 Library Headers</a></dt><dt>3.5. <a href="using_headers.html#idp13158512">C++ 2011 Library Headers for C Library Facilities</a></dt><dt>3.6. <a href="using_headers.html#idp13188400">C++ TR 1 Library Headers</a></dt><dt>3.7. <a href="using_headers.html#idp13205328">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.8. <a href="using_headers.html#idp13226400">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.9. <a href="using_headers.html#idp13231920">C++ ABI Headers</a></dt><dt>3.10. <a href="using_headers.html#idp13238320">Extension Headers</a></dt><dt>3.11. <a href="using_headers.html#idp13274048">Extension Debug Headers</a></dt><dt>3.12. <a href="using_headers.html#idp13288816">Extension Profile Headers</a></dt><dt>3.13. <a href="using_headers.html#idp13302192">Extension Parallel Headers</a></dt><dt>17.1. <a href="bk01pt03ch17s03.html#idp16454656">Debugging Containers</a></dt><dt>17.2. <a href="bk01pt03ch17s03.html#idp16499552">Debugging Containers C++11</a></dt><dt>18.1. <a href="bk01pt03ch18s03.html#idp16689952">Parallel Algorithms</a></dt><dt>19.1. <a href="bk01pt03ch19s02.html#idp16944832">Profile Code Location</a></dt><dt>19.2. <a href="bk01pt03ch19s07.html#idp17050544">Profile Diagnostics</a></dt><dt>21.1. <a href="bk01pt03ch21s02.html#idp17461952">Bitmap Allocator Memory Map</a></dt><dt>B.1. <a href="documentation_hacking.html#idp22126320">Doxygen Prerequisites</a></dt><dt>B.2. <a href="documentation_hacking.html#idp22201984">HTML to Doxygen Markup Comparison</a></dt><dt>B.3. <a href="documentation_hacking.html#idp22221360">Docbook Prerequisites</a></dt><dt>B.4. <a href="documentation_hacking.html#idp22298992">HTML to Docbook XML Markup Comparison</a></dt><dt>B.5. <a href="documentation_hacking.html#idp22323136">Docbook XML Element Use</a></dt><dt>B.6. <a href="api.html#idp22990128">Extension Allocators</a></dt><dt>B.7. <a href="api.html#idp23017760">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#idp18103552">Ranged Hash Function</a></dt><dt>22.2. <a href="policy_data_structures_design.html#idp18109440">Range-Hashing, Division Method</a></dt><dt>22.3. <a href="policy_data_structures_design.html#idp18113952">Division via Prime Modulo</a></dt><dt>22.4. <a href="policy_data_structures_design.html#idp18115776">Division via Bit Mask</a></dt><dt>22.5. <a href="policy_data_structures_design.html#idp18125408">
++ </a></dt><dt>22.10. <a href="policy_data_structures_design.html#idm269984223568">Non-unique Mapping Containers</a></dt><dt>22.11. <a href="policy_data_structures_design.html#idm269984203760">Point Iterator Hierarchy</a></dt><dt>22.12. <a href="policy_data_structures_design.html#idm269984190416">Invalidation Guarantee Tags Hierarchy</a></dt><dt>22.13. <a href="policy_data_structures_design.html#idm269984160256">Container Tag Hierarchy</a></dt><dt>22.14. <a href="policy_data_structures_design.html#idm269984120160">Hash functions, ranged-hash functions, and
++ range-hashing functions</a></dt><dt>22.15. <a href="policy_data_structures_design.html#idm269984055792">Insert hash sequence diagram</a></dt><dt>22.16. <a href="policy_data_structures_design.html#idm269984048736">Insert hash sequence diagram with a null policy</a></dt><dt>22.17. <a href="policy_data_structures_design.html#idm269984031920">Hash policy class diagram</a></dt><dt>22.18. <a href="policy_data_structures_design.html#idm269984012944">Balls and bins</a></dt><dt>22.19. <a href="policy_data_structures_design.html#idm269983982160">Insert resize sequence diagram</a></dt><dt>22.20. <a href="policy_data_structures_design.html#idm269983974384">Standard resize policy trigger sequence
++ diagram</a></dt><dt>22.21. <a href="policy_data_structures_design.html#idm269983970224">Standard resize policy size sequence
++ diagram</a></dt><dt>22.22. <a href="policy_data_structures_design.html#idm269983892128">Tree node invariants</a></dt><dt>22.23. <a href="policy_data_structures_design.html#idm269983882688">Tree node invalidation</a></dt><dt>22.24. <a href="policy_data_structures_design.html#idm269983869584">A tree and its update policy</a></dt><dt>22.25. <a href="policy_data_structures_design.html#idm269983857920">Restoring node invariants</a></dt><dt>22.26. <a href="policy_data_structures_design.html#idm269983849744">Insert update sequence</a></dt><dt>22.27. <a href="policy_data_structures_design.html#idm269983827488">Useless update path</a></dt><dt>22.28. <a href="policy_data_structures_design.html#idm269983782736">A PATRICIA trie</a></dt><dt>22.29. <a href="policy_data_structures_design.html#idm269983772240">A trie and its update policy</a></dt><dt>22.30. <a href="policy_data_structures_design.html#idm269983741664">A simple list</a></dt><dt>22.31. <a href="policy_data_structures_design.html#idm269983736080">The counter algorithm</a></dt><dt>22.32. <a href="policy_data_structures_design.html#idm269983672320">Underlying Priority-Queue Data-Structures.</a></dt><dt>22.33. <a href="policy_data_structures_design.html#idm269983637280">Priority-Queue Data-Structure Tags.</a></dt><dt>B.1. <a href="appendix_porting.html#idm269980214944">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#idm270001165584">C++ 1998/2003 Implementation Status</a></dt><dt>1.2. <a href="status.html#idm269994202752">C++ 2011 Implementation Status</a></dt><dt>1.3. <a href="status.html#idm270000018688">C++ TR1 Implementation Status</a></dt><dt>1.4. <a href="status.html#idm269989661024">C++ TR 24733 Implementation Status</a></dt><dt>3.1. <a href="using.html#idm269989171392">C++ Command Options</a></dt><dt>3.2. <a href="using_headers.html#idm269989143968">C++ 1998 Library Headers</a></dt><dt>3.3. <a href="using_headers.html#idm269989107488">C++ 1998 Library Headers for C Library Facilities</a></dt><dt>3.4. <a href="using_headers.html#idm269989082752">C++ 2011 Library Headers</a></dt><dt>3.5. <a href="using_headers.html#idm269989031312">C++ 2011 Library Headers for C Library Facilities</a></dt><dt>3.6. <a href="using_headers.html#idm269989001424">C++ TR 1 Library Headers</a></dt><dt>3.7. <a href="using_headers.html#idm269988984496">C++ TR 1 Library Headers for C Library Facilities</a></dt><dt>3.8. <a href="using_headers.html#idm269988963424">C++ TR 24733 Decimal Floating-Point Header</a></dt><dt>3.9. <a href="using_headers.html#idm269988957904">C++ ABI Headers</a></dt><dt>3.10. <a href="using_headers.html#idm269988951504">Extension Headers</a></dt><dt>3.11. <a href="using_headers.html#idm269988915776">Extension Debug Headers</a></dt><dt>3.12. <a href="using_headers.html#idm269988901008">Extension Profile Headers</a></dt><dt>3.13. <a href="using_headers.html#idm269988887632">Extension Parallel Headers</a></dt><dt>17.1. <a href="bk01pt03ch17s03.html#idm269985752944">Debugging Containers</a></dt><dt>17.2. <a href="bk01pt03ch17s03.html#idm269985708048">Debugging Containers C++11</a></dt><dt>18.1. <a href="bk01pt03ch18s03.html#idm269985518144">Parallel Algorithms</a></dt><dt>19.1. <a href="bk01pt03ch19s02.html#idm269985263760">Profile Code Location</a></dt><dt>19.2. <a href="bk01pt03ch19s07.html#idm269985157968">Profile Diagnostics</a></dt><dt>21.1. <a href="bk01pt03ch21s02.html#idm269984747328">Bitmap Allocator Memory Map</a></dt><dt>B.1. <a href="documentation_hacking.html#idm269980088096">Doxygen Prerequisites</a></dt><dt>B.2. <a href="documentation_hacking.html#idm269980012416">HTML to Doxygen Markup Comparison</a></dt><dt>B.3. <a href="documentation_hacking.html#idm269979992976">Docbook Prerequisites</a></dt><dt>B.4. <a href="documentation_hacking.html#idm269979915344">HTML to Docbook XML Markup Comparison</a></dt><dt>B.5. <a href="documentation_hacking.html#idm269979891200">Docbook XML Element Use</a></dt><dt>B.6. <a href="api.html#idm269979221808">Extension Allocators</a></dt><dt>B.7. <a href="api.html#idm269979194176">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#idm269984106352">Ranged Hash Function</a></dt><dt>22.2. <a href="policy_data_structures_design.html#idm269984100464">Range-Hashing, Division Method</a></dt><dt>22.3. <a href="policy_data_structures_design.html#idm269984095952">Division via Prime Modulo</a></dt><dt>22.4. <a href="policy_data_structures_design.html#idm269984094128">Division via Bit Mask</a></dt><dt>22.5. <a href="policy_data_structures_design.html#idm269984084496">
+ A Standard String Hash Function
+- </a></dt><dt>22.6. <a href="policy_data_structures_design.html#idp18131552">
++ </a></dt><dt>22.6. <a href="policy_data_structures_design.html#idm269984078352">
+ Only k String DNA Hash
+- </a></dt><dt>22.7. <a href="policy_data_structures_design.html#idp18202592">
++ </a></dt><dt>22.7. <a href="policy_data_structures_design.html#idm269984007440">
+ Probability of Probe Sequence of Length k
+- </a></dt><dt>22.8. <a href="policy_data_structures_design.html#idp18209360">
++ </a></dt><dt>22.8. <a href="policy_data_structures_design.html#idm269984000672">
+ Probability Probe Sequence in Some Bin
+ </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. 
+ Introduction
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch30s03.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch30s03.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch30s03.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch30s02.html" title="Implementation" /><link rel="next" href="bk01pt04.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="bk01pt03ch30s02.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt04.html">Next</a></td></tr></table><hr /></div><div class="section" title="Use"><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:
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch30s02.html" title="Implementation" /><link rel="next" href="bk01pt04.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="bk01pt03ch30s02.html">Prev</a> </td><th width="60%" align="center">Chapter 30. Concurrency</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt04.html">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:
+ </p><pre class="programlisting">
+ #include &lt;ext/concurrence.h&gt;
+
+@@ -33,4 +32,4 @@
+ and <code class="code">__concurrence_broadcast_error</code>.
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch30s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="ext_concurrency.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt04.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Part IV. 
+ Appendices
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt02ch05s02.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt02ch05s02.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt02ch05s02.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Diagnostics
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="utilities.html">Next</a></td></tr></table><hr /></div><div class="section" title="Concept Checking"><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>
++</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>
+ In 1999, SGI added <span class="quote">“<span class="quote">concept checkers</span>”</span> to their
+ implementation of the STL: code which checked the template
+ parameters of instantiated pieces of the STL, in order to insure
+@@ -47,4 +46,4 @@
+  </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 6. 
+ Utilities
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/bk01pt03ch20s04.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/bk01pt03ch20s04.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/bk01pt03ch20s04.html (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s03.html" title="Implementation" /><link rel="next" href="bk01pt03ch20s05.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="bk01pt03ch20s03.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch20s05.html">Next</a></td></tr></table><hr /></div><div class="section" title="Single Thread Example"><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>
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; allocator&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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="bk01pt03ch20s03.html" title="Implementation" /><link rel="next" href="bk01pt03ch20s05.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="bk01pt03ch20s03.html">Prev</a> </td><th width="60%" align="center">Chapter 20. The mt_allocator</th><td width="20%" align="right"> <a accesskey="n" href="bk01pt03ch20s05.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>
+ Let's start by describing how the data on a freelist is laid out in memory.
+ This is the first two blocks in freelist for thread id 3 in bin 3 (8 bytes):
+ </p><pre class="programlisting">
+@@ -76,4 +75,4 @@
+ The decision to add deallocated blocks to the front of the freelist was made
+ after a set of performance measurements that showed that this is roughly 10%
+ faster than maintaining a set of "last pointers" as well.
+-</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Multiple Thread Example</td></tr></table></div></body></html>
++</p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt03ch20s03.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="mt_allocator.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="bk01pt03ch20s05.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Implementation </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Multiple Thread Example</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/numerics_and_c.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/numerics_and_c.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/numerics_and_c.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Numerics
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="io.html">Next</a></td></tr></table><hr /></div><div class="section" title="Interacting with C"><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" title="Numerics vs. Arrays"><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
++</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
+ is that it is defined to be free of pointer aliasing, an assumption
+ that C89 is not allowed to make, and neither is C++98. C99 adds a new
+ keyword, <code class="code">restrict</code>, to apply to individual pointers. The
+@@ -18,7 +17,7 @@
+ speaking this is only one of the five template classes, and they are
+ designed to be familiar to people who have worked with the BLAS
+ libraries before.
+- </p></div><div class="section" title="C99"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.c.c99"></a>C99</h3></div></div></div><p>In addition to the other topics on this page, we'll note here some
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="numerics.c.c99"></a>C99</h3></div></div></div><p>In addition to the other topics on this page, we'll note here some
+ of the C99 features that appear in libstdc++.
+ </p><p>The C99 features depend on the <code class="code">--enable-c99</code> configure flag.
+ This flag is already on by default, but it can be disabled by the
+@@ -34,4 +33,4 @@
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="generalized_numeric_operations.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="numerics.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="io.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Generalized Operations </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 13. 
+ Input and Output
+
+-</td></tr></table></div></body></html>
++</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/appendix_gpl.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/appendix_gpl.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/appendix_gpl.html (.../branches/gcc-4_7-branch)
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt04.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. 
+ <acronym class="acronym">GNU</acronym> General Public License version 3
+ </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. 
+ Appendices
+-</th><td width="20%" align="right"> <a accesskey="n" href="appendix_gfdl.html">Next</a></td></tr></table><hr /></div><div class="appendix" title="Appendix D.  GNU General Public License version 3"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.gpl-3.0"></a>
++</th><td width="20%" align="right"> <a accesskey="n" href="appendix_gfdl.html">Next</a></td></tr></table><hr /></div><div class="appendix"><div class="titlepage"><div><div><h1 class="title"><a id="appendix.gpl-3.0"></a>
+ <acronym class="acronym">GNU</acronym> General Public License version 3
+ </h1></div></div></div><p>
+ Version 3, 29 June 2007
+@@ -78,7 +77,7 @@
+ </p><p>
+ The precise terms and conditions for copying, distribution and modification
+ follow.
+- </p><h2><a id="idp23427568"></a>
++ </p><h2><a id="idm269978786144"></a>
+ TERMS AND CONDITIONS
+ </h2><h2><a id="gpl-3-definitions"></a>
+ 0. Definitions.
+@@ -619,7 +618,7 @@
+ waiver of all civil liability in connection with the Program, unless a
+ warranty or assumption of liability accompanies a copy of the Program in
+ return for a fee.
+- </p><h2><a id="idp23526496"></a>
++ </p><h2><a id="idm269978687344"></a>
+ END OF TERMS AND CONDITIONS
+ </h2><h2><a id="HowToApply"></a>
+ How to Apply These Terms to Your New Programs
+@@ -680,4 +679,4 @@
+ </p></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="appendix_free.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt04.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="appendix_gfdl.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix C. 
+ Free Software Needs Free Documentation
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix E. GNU Free Documentation License</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Appendix E. GNU Free Documentation License</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/source_code_style.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/source_code_style.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/source_code_style.html (.../branches/gcc-4_7-branch)
+@@ -1,10 +1,9 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Contributing
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="source_design_notes.html">Next</a></td></tr></table><hr /></div><div class="section" title="Coding Style"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="contrib.coding_style"></a>Coding Style</h2></div></div></div><p>
+- </p><div class="section" title="Bad Identifiers"><div class="titlepage"><div><div><h3 class="title"><a id="coding_style.bad_identifiers"></a>Bad Identifiers</h3></div></div></div><p>
++</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>
++ </p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="coding_style.bad_identifiers"></a>Bad Identifiers</h3></div></div></div><p>
+ Identifiers that conflict and should be avoided.
+ </p><div class="literallayout"><p><br />
+       This is the list of names <span class="quote">“<span class="quote">reserved to the<br />
+@@ -192,7 +191,7 @@
+       // long double conversion members mangled as __opr<br />
+       // http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00060.html<br />
+       __opr<br />
+-    </p></div></div><div class="section" title="By Example"><div class="titlepage"><div><div><h3 class="title"><a id="coding_style.example"></a>By Example</h3></div></div></div><div class="literallayout"><p><br />
++    </p></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="coding_style.example"></a>By Example</h3></div></div></div><div class="literallayout"><p><br />
+       This library is written to appropriate C++ coding standards. As such,<br />
+       it is intended to precede the recommendations of the GNU Coding<br />
+       Standard, which can be referenced in full here:<br />
+@@ -617,4 +616,4 @@
+         }<br />
+       } // namespace std<br />
+       </code><br />
+-    </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_organization.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_design_notes.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Directory Layout and Source Conventions </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design Notes</td></tr></table></div></body></html>
++    </p></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="source_organization.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="appendix_contributing.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="source_design_notes.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Directory Layout and Source Conventions </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Design Notes</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/streambufs.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/streambufs.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/streambufs.html (.../branches/gcc-4_7-branch)
+@@ -1,9 +1,8 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><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. 
+ Input and Output
+
+-</th><td width="20%" align="right"> <a accesskey="n" href="stringstreams.html">Next</a></td></tr></table><hr /></div><div class="section" title="Stream Buffers"><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" title="Derived streambuf Classes"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.derived"></a>Derived streambuf Classes</h3></div></div></div><p>
++</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>
+ </p><p>Creating your own stream buffers for I/O can be remarkably easy.
+ If you are interested in doing so, we highly recommend two very
+ excellent books:
+@@ -57,7 +56,7 @@
+ <code class="code">include/ext/*_filebuf.h</code>, and in this article by James Kanze:
+ <a class="link" href="http://kanze.james.neuf.fr/articles/fltrsbf1.html" target="_top">Filtering
+ Streambufs</a>.
+- </p></div><div class="section" title="Buffering"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.buffering"></a>Buffering</h3></div></div></div><p>First, are you sure that you understand buffering? Particularly
++ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="io.streambuf.buffering"></a>Buffering</h3></div></div></div><p>First, are you sure that you understand buffering? Particularly
+ the fact that C++ may not, in fact, have anything to do with it?
+ </p><p>The rules for buffering can be a little odd, but they aren't any
+ different from those of C. (Maybe that's why they can be a bit
+@@ -134,4 +133,4 @@
+ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="io.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="io.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="stringstreams.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 13. 
+ Input and Output
+
+- </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Memory Based Streams</td></tr></table></div></body></html>
++ </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Memory Based Streams</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/doc/html/manual/utilities.html
+===================================================================
+--- a/src/libstdc++-v3/doc/html/manual/utilities.html (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/doc/html/manual/utilities.html (.../branches/gcc-4_7-branch)
+@@ -1,17 +1,16 @@
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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.76.1" /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="bk01pt02ch05s02.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. 
++<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-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="&#10; ISO C++&#10; , &#10; library&#10; " /><meta name="keywords" content="&#10; ISO C++&#10; , &#10; runtime&#10; , &#10; library&#10; " /><link rel="home" href="../index.html" title="The GNU C++ Library" /><link rel="up" href="bk01pt02.html" title="Part II.  Standard Contents" /><link rel="prev" href="bk01pt02ch05s02.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. 
+ Utilities
+
+ </th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk01pt02ch05s02.html">Prev</a> </td><th width="60%" align="center">Part II. 
+ Standard Contents
+- </th><td width="20%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr></table><hr /></div><div class="chapter" title="Chapter 6.  Utilities"><div class="titlepage"><div><div><h2 class="title"><a id="std.util"></a>Chapter 6. 
++ </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. 
+ Utilities
+- <a id="idp13835728" class="indexterm"></a>
+-</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#idp13894640">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idp13898192">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp13911488">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#idp15484560">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idp15507072">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idp15514368">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idp15528992">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#idp15545344">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idp15548928">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" title="Functors"><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
++ <a id="idm269988357376" class="indexterm"></a>
++</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#idm269988298944">Interface Design</a></span></dt><dt><span class="section"><a href="memory.html#idm269988295392">Selecting Default Allocation Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269988282096">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#idm269986714912">Class Hierarchy</a></span></dt><dt><span class="section"><a href="memory.html#idm269986692400">Thread Safety</a></span></dt><dt><span class="section"><a href="memory.html#idm269986685104">Selecting Lock Policy</a></span></dt><dt><span class="section"><a href="memory.html#idm269986670480">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#idm269986654128">Examples</a></span></dt><dt><span class="section"><a href="memory.html#idm269986650544">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
+ get slightly the wrong idea. In the interest of not reinventing
+ the wheel, we will refer you to the introduction to the functor
+ concept written by SGI as part of their STL, in
+ <a class="link" href="http://www.sgi.com/tech/stl/functors.html" target="_top">their
+ http://www.sgi.com/tech/stl/functors.html</a>.
+- </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt02ch05s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concept Checking </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Pairs</td></tr></table></div></body></html>
++ </p></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk01pt02ch05s02.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="bk01pt02.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="pairs.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Concept Checking </td><td width="20%" align="center"><a accesskey="h" href="../index.html">Home</a></td><td width="40%" align="right" valign="top"> Pairs</td></tr></table></div></body></html>
+\ No newline at end of file
+Index: libstdc++-v3/include/std/future
+===================================================================
+--- a/src/libstdc++-v3/include/std/future (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/include/std/future (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,6 @@
+ // <future> -*- C++ -*-
+
+-// Copyright (C) 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
++// Copyright (C) 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
+ //
+ // This file is part of the GNU ISO C++ Library. This library is free
+ // software; you can redistribute it and/or modify it under the
+@@ -456,7 +456,7 @@
+ __setter(promise<void>* __prom);
+
+ template<typename _Tp>
+- static bool
++ static void
+ _S_check(const shared_ptr<_Tp>& __p)
+ {
+ if (!static_cast<bool>(__p))
Index: libstdc++-v3/include/bits/basic_string.h
===================================================================
--- a/src/libstdc++-v3/include/bits/basic_string.h (.../tags/gcc_4_7_3_release)
@@ -72,11 +8546,190 @@ Index: libstdc++-v3/include/bits/basic_string.h
*/
template<typename _CharT, typename _Traits, typename _Alloc>
inline basic_istream<_CharT, _Traits>&
+Index: libstdc++-v3/include/bits/stl_algo.h
+===================================================================
+--- a/src/libstdc++-v3/include/bits/stl_algo.h (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/include/bits/stl_algo.h (.../branches/gcc-4_7-branch)
+@@ -74,10 +74,11 @@
+ {
+ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+- /// Swaps the median value of *__a, *__b and *__c to *__a
++ /// Swaps the median value of *__a, *__b and *__c to *__result
+ template<typename _Iterator>
+ void
+- __move_median_first(_Iterator __a, _Iterator __b, _Iterator __c)
++ __move_median_to_first(_Iterator __result, _Iterator __a,
++ _Iterator __b, _Iterator __c)
+ {
+ // concept requirements
+ __glibcxx_function_requires(_LessThanComparableConcept<
+@@ -86,23 +87,26 @@
+ if (*__a < *__b)
+ {
+ if (*__b < *__c)
+- std::iter_swap(__a, __b);
++ std::iter_swap(__result, __b);
+ else if (*__a < *__c)
+- std::iter_swap(__a, __c);
++ std::iter_swap(__result, __c);
++ else
++ std::iter_swap(__result, __a);
+ }
+ else if (*__a < *__c)
+- return;
++ std::iter_swap(__result, __a);
+ else if (*__b < *__c)
+- std::iter_swap(__a, __c);
++ std::iter_swap(__result, __c);
+ else
+- std::iter_swap(__a, __b);
++ std::iter_swap(__result, __b);
+ }
+
+- /// Swaps the median value of *__a, *__b and *__c under __comp to *__a
++ /// Swaps the median value of *__a, *__b and *__c under __comp to *__result
+ template<typename _Iterator, typename _Compare>
+ void
+- __move_median_first(_Iterator __a, _Iterator __b, _Iterator __c,
+- _Compare __comp)
++ __move_median_to_first(_Iterator __result, _Iterator __a,
++ _Iterator __b, _Iterator __c,
++ _Compare __comp)
+ {
+ // concept requirements
+ __glibcxx_function_requires(_BinaryFunctionConcept<_Compare, bool,
+@@ -112,16 +116,18 @@
+ if (__comp(*__a, *__b))
+ {
+ if (__comp(*__b, *__c))
+- std::iter_swap(__a, __b);
++ std::iter_swap(__result, __b);
+ else if (__comp(*__a, *__c))
+- std::iter_swap(__a, __c);
++ std::iter_swap(__result, __c);
++ else
++ std::iter_swap(__result, __a);
+ }
+ else if (__comp(*__a, *__c))
+- return;
++ std::iter_swap(__result, __a);
+ else if (__comp(*__b, *__c))
+- std::iter_swap(__a, __c);
++ std::iter_swap(__result, __c);
+ else
+- std::iter_swap(__a, __b);
++ std::iter_swap(__result, __b);
+ }
+
+ // for_each
+@@ -2305,7 +2311,7 @@
+ _RandomAccessIterator __last)
+ {
+ _RandomAccessIterator __mid = __first + (__last - __first) / 2;
+- std::__move_median_first(__first, __mid, (__last - 1));
++ std::__move_median_to_first(__first, __first + 1, __mid, __last - 1);
+ return std::__unguarded_partition(__first + 1, __last, *__first);
+ }
+
+@@ -2317,7 +2323,8 @@
+ _RandomAccessIterator __last, _Compare __comp)
+ {
+ _RandomAccessIterator __mid = __first + (__last - __first) / 2;
+- std::__move_median_first(__first, __mid, (__last - 1), __comp);
++ std::__move_median_to_first(__first, __first + 1, __mid, __last - 1,
++ __comp);
+ return std::__unguarded_partition(__first + 1, __last, *__first, __comp);
+ }
+
+Index: libstdc++-v3/include/bits/shared_ptr_base.h
+===================================================================
+--- a/src/libstdc++-v3/include/bits/shared_ptr_base.h (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/include/bits/shared_ptr_base.h (.../branches/gcc-4_7-branch)
+@@ -394,7 +394,7 @@
+ public:
+ template<typename... _Args>
+ _Sp_counted_ptr_inplace(_Alloc __a, _Args&&... __args)
+- : _M_impl(__a), _M_storage()
++ : _M_impl(__a)
+ {
+ _M_impl._M_ptr = static_cast<_Tp*>(static_cast<void*>(&_M_storage));
+ // _GLIBCXX_RESOLVE_LIB_DEFECTS
+Index: libstdc++-v3/include/bits/random.tcc
+===================================================================
+--- a/src/libstdc++-v3/include/bits/random.tcc (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/include/bits/random.tcc (.../branches/gcc-4_7-branch)
+@@ -1125,7 +1125,7 @@
+ operator()(_UniformRandomNumberGenerator& __urng,
+ const param_type& __p)
+ {
+- typedef typename std::gamma_distribution<result_type>::param_type
++ typedef typename std::gamma_distribution<double>::param_type
+ param_type;
+
+ const double __y =
Index: libstdc++-v3/ChangeLog
===================================================================
--- a/src/libstdc++-v3/ChangeLog (.../tags/gcc_4_7_3_release)
+++ b/src/libstdc++-v3/ChangeLog (.../branches/gcc-4_7-branch)
-@@ -1,3 +1,31 @@
+@@ -1,3 +1,88 @@
++2013-11-05 Jonathan Wakely <jwakely.gcc@gmail.com>
++
++ * doc/xml/manual/status_cxx2011.xml: Document aligned_union as
++ missing.
++ * doc/xml/manual/spine.xml: Update copyright years.
++ * doc/html/*: Regenerate.
++
++2013-10-30 Chris Studholme <cvs@cs.utoronto.ca>
++
++ PR libstdc++/58912
++ * include/bits/shared_ptr_base.h (_Sp_counted_ptr_inplace): Remove
++ unnecessary initialization of storage buffer.
++
++2013-10-20 Chris Jefferson <chris@bubblescope.net>
++ Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR libstdc++/58800
++ * include/bits/stl_algo.h (__unguarded_partition_pivot): Change
++ __last - 2 to __last - 1.
++ * testsuite/25_algorithms/nth_element/58800.cc: New
++
++2013-09-30 Chris Jefferson <chris@bubblescope.net>
++
++ PR libstdc++/58437
++ * include/bits/stl_algo.h (__move_median_first): Rename to
++ __move_median_to_first, change to take an addition argument.
++ (__unguarded_partition_pivot): Adjust.
++ * testsuite/performance/25_algorithms/sort.cc: New.
++ * testsuite/performance/25_algorithms/sort_heap.cc: Likewise.
++ * testsuite/performance/25_algorithms/stable_sort.cc: Likewise.
++
++2013-09-26 Jonathan Wakely <jwakely.gcc@gmail.com>
++
++ Backport from mainline
++
++ 2013-01-19 Jonathan Wakely <jwakely.gcc@gmail.com>
++
++ PR libstdc++/55861
++ * include/std/future (_State_base::_S_check(const shared_ptr<T>&)):
++ Fix return type.
++
++2013-09-03 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR libstdc++/58302
++ * include/bits/random.tcc (negative_binomial_distribution<>::
++ operator()(_UniformRandomNumberGenerator&, const param_type&):
++ Fix typo in template argument.
++ * testsuite/26_numerics/random/negative_binomial_distribution/
++ operators/58302.cc: New.
++
++2013-08-17 Uros Bizjak <ubizjak@gmail.com>
++
++ * src/c++98/compatibility.cc (_ZTIe): Use
++ reinterpret_cast<const cast *> to avoid -Wcast-qual warnings.
++ (_ZTIPe): Ditto.
++ (ZTIPKe): Ditto.
++
+2013-05-15 Jonathan Wakely <jwakely.gcc@gmail.com>
+
+ * include/bits/basic_string.h (getline): Fix doxygen comments.
@@ -108,6 +8761,102 @@ Index: libstdc++-v3/ChangeLog
2013-04-11 Release Manager
* GCC 4.7.3 released.
+Index: libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/testsuite/25_algorithms/nth_element/58800.cc (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,52 @@
++// Copyright (C) 2013 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++
++// 25.3.2 [lib.alg.nth.element]
++
++// { dg-options "-std=gnu++11" }
++
++#include <algorithm>
++#include <testsuite_hooks.h>
++#include <testsuite_iterators.h>
++
++using __gnu_test::test_container;
++using __gnu_test::random_access_iterator_wrapper;
++
++typedef test_container<int, random_access_iterator_wrapper> Container;
++
++void test01()
++{
++ std::vector<int> v = {
++ 207089,
++ 202585,
++ 180067,
++ 157549,
++ 211592,
++ 216096,
++ 207089
++ };
++
++ Container con(v.data(), v.data() + 7);
++
++ std::nth_element(con.begin(), con.begin() + 3, con.end());
++}
++
++int main()
++{
++ test01();
++ return 0;
++}
+Index: libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/58302.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/58302.cc (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/testsuite/26_numerics/random/negative_binomial_distribution/operators/58302.cc (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,34 @@
++// { dg-do compile }
++// { dg-options "-std=gnu++11" }
++// { dg-require-cstdint "" }
++//
++// Copyright (C) 2013 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++//
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++
++#include <random>
++
++void test01()
++{
++ typedef std::negative_binomial_distribution<> dist_type;
++
++ std::default_random_engine engine;
++
++ dist_type dist;
++ dist_type::param_type param(3, 0.5);
++
++ dist(engine, param); // compile error!
++}
Index: libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc
===================================================================
--- a/src/libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc (.../tags/gcc_4_7_3_release)
@@ -119,6 +8868,224 @@ Index: libstdc++-v3/testsuite/30_threads/condition_variable/members/53841.cc
// { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } }
// { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } }
// { dg-require-cstdint "" }
+Index: libstdc++-v3/testsuite/performance/25_algorithms/stable_sort.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/performance/25_algorithms/stable_sort.cc (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/testsuite/performance/25_algorithms/stable_sort.cc (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,65 @@
++// Copyright (C) 2013 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++
++#include <vector>
++#include <algorithm>
++#include <testsuite_performance.h>
++
++int main()
++{
++ using namespace __gnu_test;
++
++ time_counter time;
++ resource_counter resource;
++
++ const int max_size = 10000000;
++
++ std::vector<int> v(max_size);
++
++ for (int i = 0; i < max_size; ++i)
++ v[i] = -i;
++
++ start_counters(time, resource);
++ std::stable_sort(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "reverse", time, resource);
++ clear_counters(time, resource);
++
++ for (int i = 0; i < max_size; ++i)
++ v[i] = i;
++
++ start_counters(time, resource);
++ std::stable_sort(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "forwards", time, resource);
++ clear_counters(time, resource);
++
++ // a simple psuedo-random series which does not rely on rand() and friends
++ v[0] = 0;
++ for (int i = 1; i < max_size; ++i)
++ v[i] = (v[i-1] + 110211473) * 745988807;
++
++ start_counters(time, resource);
++ std::stable_sort(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "random", time, resource);
++
++ return 0;
++}
+Index: libstdc++-v3/testsuite/performance/25_algorithms/sort_heap.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/performance/25_algorithms/sort_heap.cc (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/testsuite/performance/25_algorithms/sort_heap.cc (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,73 @@
++// Copyright (C) 2013 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++
++#include <vector>
++#include <algorithm>
++#include <testsuite_performance.h>
++
++int main()
++{
++ using namespace __gnu_test;
++
++ time_counter time;
++ resource_counter resource;
++
++ const int max_size = 10000000;
++
++ std::vector<int> v(max_size);
++
++ for (int i = 0; i < max_size; ++i)
++ v[i] = -i;
++
++ start_counters(time, resource);
++ std::make_heap(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "make_heap_reverse", time, resource);
++ clear_counters(time, resource);
++
++ for (int i = 0; i < max_size; ++i)
++ v[i] = i;
++
++ start_counters(time, resource);
++ std::make_heap(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "make_heap_forwards", time, resource);
++ clear_counters(time, resource);
++
++ // a simple psuedo-random series which does not rely on rand() and friends
++ v[0] = 0;
++ for (int i = 1; i < max_size; ++i)
++ v[i] = (v[i-1] + 110211473) * 745988807;
++
++ start_counters(time, resource);
++ std::make_heap(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "make_heap_random", time, resource);
++
++
++ start_counters(time, resource);
++ std::sort_heap(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "sort_heap", time, resource);
++ clear_counters(time, resource);
++
++ return 0;
++}
+Index: libstdc++-v3/testsuite/performance/25_algorithms/sort.cc
+===================================================================
+--- a/src/libstdc++-v3/testsuite/performance/25_algorithms/sort.cc (.../tags/gcc_4_7_3_release)
++++ b/src/libstdc++-v3/testsuite/performance/25_algorithms/sort.cc (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,65 @@
++// Copyright (C) 2013 Free Software Foundation, Inc.
++//
++// This file is part of the GNU ISO C++ Library. This library is free
++// software; you can redistribute it and/or modify it under the
++// terms of the GNU General Public License as published by the
++// Free Software Foundation; either version 3, or (at your option)
++// any later version.
++
++// This library is distributed in the hope that it will be useful,
++// but WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++// GNU General Public License for more details.
++
++// You should have received a copy of the GNU General Public License along
++// with this library; see the file COPYING3. If not see
++// <http://www.gnu.org/licenses/>.
++
++#include <vector>
++#include <algorithm>
++#include <testsuite_performance.h>
++
++int main()
++{
++ using namespace __gnu_test;
++
++ time_counter time;
++ resource_counter resource;
++
++ const int max_size = 10000000;
++
++ std::vector<int> v(max_size);
++
++ for (int i = 0; i < max_size; ++i)
++ v[i] = -i;
++
++ start_counters(time, resource);
++ std::sort(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "reverse", time, resource);
++ clear_counters(time, resource);
++
++ for (int i = 0; i < max_size; ++i)
++ v[i] = i;
++
++ start_counters(time, resource);
++ std::sort(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "forwards", time, resource);
++ clear_counters(time, resource);
++
++ // a simple psuedo-random series which does not rely on rand() and friends
++ v[0] = 0;
++ for (int i = 1; i < max_size; ++i)
++ v[i] = (v[i-1] + 110211473) * 745988807;
++
++ start_counters(time, resource);
++ std::sort(v.begin(), v.end());
++ stop_counters(time, resource);
++
++ report_performance(__FILE__, "random", time, resource);
++
++ return 0;
++}
Index: libstdc++-v3/config/os/bsd/darwin/os_defines.h
===================================================================
--- a/src/libstdc++-v3/config/os/bsd/darwin/os_defines.h (.../tags/gcc_4_7_3_release)
@@ -149,11 +9116,346 @@ Index: libstdc++-v3/acinclude.m4
AC_DEFUN([GLIBCXX_ENABLE_LIBSTDCXX_TIME], [
AC_MSG_CHECKING([for clock_gettime, nanosleep and sched_yield])
+Index: libiberty/ChangeLog
+===================================================================
+--- a/src/libiberty/ChangeLog (.../tags/gcc_4_7_3_release)
++++ b/src/libiberty/ChangeLog (.../branches/gcc-4_7-branch)
+@@ -1,3 +1,11 @@
++2013-11-15 Joseph Myers <joseph@codesourcery.com>
++
++ Backport from mainline:
++ 2012-06-29 Andreas Schwab <schwab@linux-m68k.org>
++
++ * copying-lib.texi (Library Copying): Don't use @heading inside
++ @enumerate.
++
+ 2013-04-11 Release Manager
+
+ * GCC 4.7.3 released.
+Index: contrib/ChangeLog
+===================================================================
+--- a/src/contrib/ChangeLog (.../tags/gcc_4_7_3_release)
++++ b/src/contrib/ChangeLog (.../branches/gcc-4_7-branch)
+@@ -1,3 +1,10 @@
++2014-02-02 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2012-05-09 David Edelsohn <dje.gcc@gmail.com>
++
++ * gcc_update: Use $GCC_SVN to retrieve branch and revision.
++
+ 2013-04-11 Release Manager
+
+ * GCC 4.7.3 released.
+Index: contrib/gcc_update
+===================================================================
+--- a/src/contrib/gcc_update (.../tags/gcc_4_7_3_release)
++++ b/src/contrib/gcc_update (.../branches/gcc-4_7-branch)
+@@ -367,8 +367,8 @@
+ exit 1
+ fi
+
+- revision=`svn info | awk '/Revision:/ { print $2 }'`
+- branch=`svn info | sed -ne "/URL:/ {
++ revision=`$GCC_SVN info | awk '/Revision:/ { print $2 }'`
++ branch=`$GCC_SVN info | sed -ne "/^URL:/ {
+ s,.*/trunk,trunk,
+ s,.*/branches/,,
+ s,.*/tags/,,
+Index: libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
+===================================================================
+--- a/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c (.../tags/gcc_4_7_3_release)
++++ b/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c (.../branches/gcc-4_7-branch)
+@@ -39,10 +39,11 @@
+ #include <pango/pango.h>
+ #include <pango/pangoft2.h>
+ #include <pango/pangofc-font.h>
+-#include <freetype/ftglyph.h>
+-#include <freetype/ftoutln.h>
+-#include <freetype/fttypes.h>
+-#include <freetype/tttables.h>
++#include <ft2build.h>
++#include FT_GLYPH_H
++#include FT_OUTLINE_H
++#include FT_TYPES_H
++#include FT_TRUETYPE_TABLES_H
+ #include "gdkfont.h"
+ #include "gtkpeer.h"
+ #include "gnu_java_awt_peer_gtk_GdkFontPeer.h"
+Index: libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c
+===================================================================
+--- a/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c (.../tags/gcc_4_7_3_release)
++++ b/src/libjava/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c (.../branches/gcc-4_7-branch)
+@@ -42,8 +42,9 @@
+ #include <pango/pango.h>
+ #include <pango/pangoft2.h>
+ #include <pango/pangofc-font.h>
+-#include <freetype/ftglyph.h>
+-#include <freetype/ftoutln.h>
++#include <ft2build.h>
++#include FT_GLYPH_H
++#include FT_OUTLINE_H
+ #include "jcl.h"
+ #include "gdkfont.h"
+ #include "gnu_java_awt_peer_gtk_FreetypeGlyphVector.h"
+Index: libjava/classpath/ChangeLog.gcj
+===================================================================
+--- a/src/libjava/classpath/ChangeLog.gcj (.../tags/gcc_4_7_3_release)
++++ b/src/libjava/classpath/ChangeLog.gcj (.../branches/gcc-4_7-branch)
+@@ -1,3 +1,9 @@
++2013-11-29 Matthias Klose <doko@ubuntu.com>
++
++ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c,
++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c:
++ Fix freetype includes.
++
+ 2013-02-21 Jakub Jelinek <jakub@redhat.com>
+
+ PR bootstrap/56258
+Index: libjava/ChangeLog
+===================================================================
+--- a/src/libjava/ChangeLog (.../tags/gcc_4_7_3_release)
++++ b/src/libjava/ChangeLog (.../branches/gcc-4_7-branch)
+@@ -1,3 +1,8 @@
++2014-03-11 Uros Bizjak <ubizjak@gmail.com>
++
++ * java/lang/natObject.cc (_Jv_MonitorEnter): Add missing parenthesis
++ around comparison with (address | LOCKED) in JvAssert.
++
+ 2013-04-11 Release Manager
+
+ * GCC 4.7.3 released.
+Index: libjava/java/lang/natObject.cc
+===================================================================
+--- a/src/libjava/java/lang/natObject.cc (.../tags/gcc_4_7_3_release)
++++ b/src/libjava/java/lang/natObject.cc (.../branches/gcc-4_7-branch)
+@@ -929,7 +929,7 @@
+ // only be held by other threads waiting for conversion, and
+ // they, like us, drop it quickly without blocking.
+ _Jv_MutexLock(&(hl->si.mutex));
+- JvAssert(he -> address == address | LOCKED );
++ JvAssert(he -> address == (address | LOCKED));
+ release_set(&(he -> address), (address | REQUEST_CONVERSION | HEAVY));
+ // release lock on he
+ LOG(REQ_CONV, (address | REQUEST_CONVERSION | HEAVY), self);
+@@ -961,7 +961,7 @@
+ }
+ obj_addr_t was_heavy = (address & HEAVY);
+ if ((address & LOCKED) ||
+- !compare_and_swap(&(he -> address), address, (address | LOCKED )))
++ !compare_and_swap(&(he -> address), address, address | LOCKED ))
+ {
+ wait_unlocked(he);
+ goto retry;
+Index: libgcc/config.host
+===================================================================
+--- a/src/libgcc/config.host (.../tags/gcc_4_7_3_release)
++++ b/src/libgcc/config.host (.../branches/gcc-4_7-branch)
+@@ -315,7 +315,7 @@
+ md_unwind_header=alpha/vms-unwind.h
+ ;;
+ arm-wrs-vxworks)
+- tmake_file="$tmake_file arm/t-arm arm/t-vxworks t-fdpbit"
++ tmake_file="$tmake_file arm/t-arm arm/t-vxworks t-softfp-sfdf t-softfp-excl arm/t-softfp t-softfp"
+ extra_parts="$extra_parts crti.o crtn.o"
+ ;;
+ arm*-*-freebsd*)
+@@ -1127,7 +1127,7 @@
+ extra_parts="$extra_parts crti.o crtn.o"
+ ;;
+ xtensa*-*-linux*)
+- tmake_file="$tmake_file xtensa/t-xtensa xtensa/t-linux"
++ tmake_file="$tmake_file xtensa/t-xtensa xtensa/t-linux t-slibgcc-libgcc"
+ md_unwind_header=xtensa/linux-unwind.h
+ ;;
+ am33_2.0-*-linux*)
+Index: libgcc/Makefile.in
+===================================================================
+--- a/src/libgcc/Makefile.in (.../tags/gcc_4_7_3_release)
++++ b/src/libgcc/Makefile.in (.../branches/gcc-4_7-branch)
+@@ -121,7 +121,8 @@
+ .PHONY: all clean
+
+ clean:
+- -rm -f config.h libgcc_tm.h stamp-h stmp-ldirs libgcc.map
++ -rm -f config.h libgcc_tm.h libgcc.map
++ -rm -f libgcc_tm.stamp stamp-h stmp-ldirs
+ -rm -f *$(objext)
+ -rm -f *.dep
+ -rm -f *.a
Index: libgcc/ChangeLog
===================================================================
--- a/src/libgcc/ChangeLog (.../tags/gcc_4_7_3_release)
+++ b/src/libgcc/ChangeLog (.../branches/gcc-4_7-branch)
-@@ -1,3 +1,10 @@
+@@ -1,3 +1,178 @@
++014-02-28 Joey Ye <joey.ye@arm.com>
++
++ Backport from mainline r208229
++ 2014-02-28 Joey Ye <joey.ye@arm.com>
++
++ PR libgcc/60166
++ * config/arm/sfp-machine.h (_FP_NANFRAC_H,
++ _FP_NANFRAC_S, _FP_NANFRAC_D, _FP_NANFRAC_Q):
++ Set to zero.
++
++2014-01-25 Walter Lee <walt@tilera.com>
++
++ Backport from mainline
++ 2014-01-25 Walter Lee <walt@tilera.com>
++
++ * config/tilepro/atomic.c (pre_atomic_barrier): Mark inline.
++ (post_atomic_barrier): Ditto.
++ (__fetch_and_do): New macro.
++ (__atomic_fetch_and_do): Use __fetch_and_do.
++ (__sync_fetch_and_do): New macro.
++ (__sync_fetch_and_add_4): New function.
++ (__sync_fetch_and_sub_4): New function.
++ (__sync_fetch_and_or_4): New function.
++ (__sync_fetch_and_and_4): New function.
++ (__sync_fetch_and_xor_4): New function.
++ (__sync_fetch_and_nand_4): New function.
++ (__sync_fetch_and_add_8): New function.
++ (__sync_fetch_and_sub_8): New function.
++ (__sync_fetch_and_or_8): New function.
++ (__sync_fetch_and_and_8): New function.
++ (__sync_fetch_and_xor_8): New function.
++ (__sync_fetch_and_nand_8): New function.
++ (__do_and_fetch): New macro.
++ (__atomic_do_and_fetch): Use __do_and_fetch.
++ (__sync_do_and_fetch): New macro.
++ (__sync_add_and_fetch_4): New function.
++ (__sync_sub_and_fetch_4): New function.
++ (__sync_or_and_fetch_4): New function.
++ (__sync_and_and_fetch_4): New function.
++ (__sync_xor_and_fetch_4): New function.
++ (__sync_nand_and_fetch_4): New function.
++ (__sync_add_and_fetch_8): New function.
++ (__sync_sub_and_fetch_8): New function.
++ (__sync_or_and_fetch_8): New function.
++ (__sync_and_and_fetch_8): New function.
++ (__sync_xor_and_fetch_8): New function.
++ (__sync_nand_and_fetch_8): New function.
++ (__sync_exchange_methods): New macro.
++ (__sync_val_compare_and_swap_4): New function.
++ (__sync_bool_compare_and_swap_4): New function.
++ (__sync_lock_test_and_test_4): New function.
++ (__sync_val_compare_and_swap_8): New function.
++ (__sync_bool_compare_and_swap_8): New function.
++ (__sync_lock_test_and_test_8): New function.
++ (__subword_cmpxchg_body): New macro.
++ (__atomic_compare_exchange_1): Use __subword_cmpxchg_body.
++ (__atomic_compare_exchange_2): Ditto.
++ (__sync_subword_cmpxchg): New macro.
++ (__sync_val_compare_and_swap_1): New function.
++ (__sync_bool_compare_and_swap_1): New function.
++ (__sync_val_compare_and_swap_2): New function.
++ (__sync_bool_compare_and_swap_2): New function.
++ (__atomic_subword): Rename to ...
++ (__subword): ... New name.
++ (__atomic_subword_fetch): Use __subword.
++ (__sync_subword_fetch): New macro.
++ (__sync_fetch_and_add_1): New function.
++ (__sync_fetch_and_sub_1): New function.
++ (__sync_fetch_and_or_1): New function.
++ (__sync_fetch_and_and_1): New function.
++ (__sync_fetch_and_xor_1): New function.
++ (__sync_fetch_and_nand_1): New function.
++ (__sync_fetch_and_add_2): New function.
++ (__sync_fetch_and_sub_2): New function.
++ (__sync_fetch_and_or_2): New function.
++ (__sync_fetch_and_and_2): New function.
++ (__sync_fetch_and_xor_2): New function.
++ (__sync_fetch_and_nand_2): New function.
++ (__sync_add_and_fetch_1): New function.
++ (__sync_sub_and_fetch_1): New function.
++ (__sync_or_and_fetch_1): New function.
++ (__sync_and_and_fetch_1): New function.
++ (__sync_xor_and_fetch_1): New function.
++ (__sync_nand_and_fetch_1): New function.
++ (__sync_add_and_fetch_2): New function.
++ (__sync_sub_and_fetch_2): New function.
++ (__sync_or_and_fetch_2): New function.
++ (__sync_and_and_fetch_2): New function.
++ (__sync_xor_and_fetch_2): New function.
++ (__sync_nand_and_fetch_2): New function.
++ (__atomic_subword_lock): Use __subword.
++ (__sync_subword_lock): New macro.
++ (__sync_lock_test_and_set_1): New function.
++ (__sync_lock_test_and_set_2): New function.
++
++2014-01-25 Walter Lee <walt@tilera.com>
++
++ Backport from mainline
++ 2014-01-25 Walter Lee <walt@tilera.com>
++
++ * config/tilepro/atomic.c (BIT_OFFSET): Define.
++ (__atomic_subword_cmpxchg): Use BIT_OFFSET.
++ (__atomic_subword): Ditto.
++
++2014-01-25 Walter Lee <walt@tilera.com>
++
++ Backport from mainline
++ 2014-01-25 Walter Lee <walt@tilera.com>
++
++ * config/tilepro/atomic.c (__atomic_do_and_fetch): Add
++ a prefix op argument.
++ (__atomic_nand_fetch_4): Add prefix op.
++ (__atomic_nand_fetch_8): Ditto.
++
++2014-01-21 Baruch Siach <barch@tkos.co.il>
++
++ * config.host (tmake_file): add t-slibgcc-libgcc for xtensa*-*-linux*.
++
++2014-01-03 Joseph Myers <joseph@codesourcery.com>
++
++ * config/rs6000/ibm-ldouble.c (__gcc_qdiv): Scale up arguments in
++ case of small numerator and finite nonzero result.
++
++2013-11-10 Kai Tietz <ktietz@redhat.com>
++
++ Back-merged from trunk
++ * config/i386/cygming-crtbegin.c (__gcc_register_frame):
++ Increment load-count on use of LIBGCC_SONAME DLL.
++ (hmod_libgcc): New static variable to hold handle of
++ LIBGCC_SONAME DLL.
++ (__gcc_deregister_frame): Decrement load-count of
++ LIBGCC_SONAME DLL.
++
++2013-11-07 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/32/sfp-machine.c (FP_HANDLE_EXCEPTIONS): Handle
++ FP_EX_DENORM.
++ * config/i386/64/sfp-machine.c (FP_HANDLE_EXCEPTIONS): Ditto.
++
++2013-08-01 Maxim Kuvyrkov <maxim@kugelworks.com>
++
++ Backport from trunk: Fix licenses on several libgcc files.
++
++ * config/ia64/unwind-ia64.h,
++ * config/mips/vr4120-div.S: Fix license from GPL-3.0+ to
++ GPL-3.0-with-GCC-exception.
++
++2013-06-08 Walter Lee <walt@tilera.com>
++
++ Backport from mainline:
++ 2013-06-08 Walter Lee <walt@tilera.com>
++
++ * config/tilepro/atomic.h: Don't include stdint.h or features.h.
++ Replace int64_t with long long. Add __extension__ where
++ appropriate.
++
++2013-06-06 Douglas B Rupp <rupp@adacore.com>
++
++ * config.host (arm-wrs-vxworks): Configure with other soft float.
++
++2013-05-20 Chung-Ju Wu <jasonwucj@gmail.com>
++
++ Backport from mainline:
++ 2012-05-24 Olivier Hainque <hainque@adacore.com>
++
++ * Makefile.in (clean): Remove libgcc_tm.stamp as well.
++ Use a separate command for stamp removals.
++
+2013-04-11 Julian Brown <julian@codesourcery.com>
+
+ * config/arm/linux-atomic.c (SUBWORD_SYNC_OP, SUBWORD_VAL_CAS)
@@ -164,6 +9466,691 @@ Index: libgcc/ChangeLog
2013-04-11 Release Manager
* GCC 4.7.3 released.
+@@ -14,7 +189,8 @@
+
+ PR target/49880
+ * config/sh/lib1funcs.S (sdivsi3_i4, udivsi3_i4): Enable for SH2A.
+- (sdivsi3, udivsi3): Remove SH4 check and always compile these functions.
++ (sdivsi3, udivsi3): Remove SH4 check and always compile these
++ functions.
+
+ 2013-03-06 Oleg Endo <olegendo@gcc.gnu.org>
+
+Index: libgcc/config/ia64/unwind-ia64.h
+===================================================================
+--- a/src/libgcc/config/ia64/unwind-ia64.h (.../tags/gcc_4_7_3_release)
++++ b/src/libgcc/config/ia64/unwind-ia64.h (.../branches/gcc-4_7-branch)
+@@ -2,22 +2,27 @@
+ Contributed by Andrew MacLeod <amacleod@cygnus.com>
+ Andrew Haley <aph@cygnus.com>
+
+- This file is part of GCC.
++This file is part of GCC.
+
+- GCC is free software; you can redistribute it and/or modify
+- it under the terms of the GNU General Public License as published by
+- the Free Software Foundation; either version 3, or (at your option)
+- any later version.
++GCC is free software; you can redistribute it and/or modify it under
++the terms of the GNU General Public License as published by the Free
++Software Foundation; either version 3, or (at your option) any later
++version.
+
+- GCC is distributed in the hope that it will be useful,
+- but WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+- GNU General Public License for more details.
++GCC is distributed in the hope that it will be useful, but WITHOUT ANY
++WARRANTY; without even the implied warranty of MERCHANTABILITY or
++FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++for more details.
+
+- You should have received a copy of the GNU General Public License
+- along with GCC; see the file COPYING3. If not see
+- <http://www.gnu.org/licenses/>. */
++Under Section 7 of GPL version 3, you are granted additional
++permissions described in the GCC Runtime Library Exception, version
++3.1, as published by the Free Software Foundation.
+
++You should have received a copy of the GNU General Public License and
++a copy of the GCC Runtime Library Exception along with this program;
++see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
++<http://www.gnu.org/licenses/>. */
++
+ struct unw_table_entry
+ {
+ unsigned long start_offset;
+Index: libgcc/config/i386/32/sfp-machine.h
+===================================================================
+--- a/src/libgcc/config/i386/32/sfp-machine.h (.../tags/gcc_4_7_3_release)
++++ b/src/libgcc/config/i386/32/sfp-machine.h (.../branches/gcc-4_7-branch)
+@@ -140,6 +140,14 @@
+ __asm__ __volatile__ ("fdiv {%y0, %0|%0, %y0}" : "+t" (f)); \
+ __asm__ __volatile__ ("fwait"); \
+ } \
++ if (_fex & FP_EX_DENORM) \
++ { \
++ struct fenv temp; \
++ __asm__ __volatile__ ("fnstenv %0" : "=m" (temp)); \
++ temp.__status_word |= FP_EX_DENORM; \
++ __asm__ __volatile__ ("fldenv %0" : : "m" (temp)); \
++ __asm__ __volatile__ ("fwait"); \
++ } \
+ if (_fex & FP_EX_DIVZERO) \
+ { \
+ float f = 1.0, g = 0.0; \
+Index: libgcc/config/i386/cygming-crtbegin.c
+===================================================================
+--- a/src/libgcc/config/i386/cygming-crtbegin.c (.../tags/gcc_4_7_3_release)
++++ b/src/libgcc/config/i386/cygming-crtbegin.c (.../branches/gcc-4_7-branch)
+@@ -1,5 +1,5 @@
+ /* crtbegin object for windows32 targets.
+- Copyright (C) 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
++ Copyright (C) 2007, 2009-2011, 2013 Free Software Foundation, Inc.
+
+ Contributed by Danny Smith <dannysmith@users.sourceforge.net>
+
+@@ -69,6 +69,9 @@
+ = { };
+
+ static struct object obj;
++
++/* Handle of libgcc's DLL reference. */
++HANDLE hmod_libgcc;
+ #endif
+
+ #if TARGET_USE_JCR_SECTION
+@@ -93,9 +96,14 @@
+
+ void (*register_frame_fn) (const void *, struct object *);
+ HANDLE h = GetModuleHandle (LIBGCC_SONAME);
++
+ if (h)
+- register_frame_fn = (void (*) (const void *, struct object *))
+- GetProcAddress (h, "__register_frame_info");
++ {
++ /* Increasing the load-count of LIBGCC_SONAME DLL. */
++ hmod_libgcc = LoadLibrary (LIBGCC_SONAME);
++ register_frame_fn = (void (*) (const void *, struct object *))
++ GetProcAddress (h, "__register_frame_info");
++ }
+ else
+ register_frame_fn = __register_frame_info;
+ if (register_frame_fn)
+@@ -132,5 +140,7 @@
+ deregister_frame_fn = __deregister_frame_info;
+ if (deregister_frame_fn)
+ deregister_frame_fn (__EH_FRAME_BEGIN__);
++ if (hmod_libgcc)
++ FreeLibrary (hmod_libgcc);
+ #endif
+ }
+Index: libgcc/config/i386/64/sfp-machine.h
+===================================================================
+--- a/src/libgcc/config/i386/64/sfp-machine.h (.../tags/gcc_4_7_3_release)
++++ b/src/libgcc/config/i386/64/sfp-machine.h (.../branches/gcc-4_7-branch)
+@@ -89,6 +89,14 @@
+ float f = 0.0; \
+ __asm__ __volatile__ (ASM_INVALID : : "x" (f)); \
+ } \
++ if (_fex & FP_EX_DENORM) \
++ { \
++ struct fenv temp; \
++ __asm__ __volatile__ ("fnstenv %0" : "=m" (temp)); \
++ temp.__status_word |= FP_EX_DENORM; \
++ __asm__ __volatile__ ("fldenv %0" : : "m" (temp)); \
++ __asm__ __volatile__ ("fwait"); \
++ } \
+ if (_fex & FP_EX_DIVZERO) \
+ { \
+ float f = 1.0, g = 0.0; \
+Index: libgcc/config/rs6000/ibm-ldouble.c
+===================================================================
+--- a/src/libgcc/config/rs6000/ibm-ldouble.c (.../tags/gcc_4_7_3_release)
++++ b/src/libgcc/config/rs6000/ibm-ldouble.c (.../branches/gcc-4_7-branch)
+@@ -189,7 +189,16 @@
+ || nonfinite (t))
+ return t;
+
+- /* Finite nonzero result requires corrections to the highest order term. */
++ /* Finite nonzero result requires corrections to the highest order
++ term. These corrections require the low part of c * t to be
++ exactly represented in double. */
++ if (fabs (a) <= 0x1p-969)
++ {
++ a *= 0x1p106;
++ b *= 0x1p106;
++ c *= 0x1p106;
++ d *= 0x1p106;
++ }
+
+ s = c * t; /* (s,sigma) = c*t exactly. */
+ w = -(-b + d * t); /* Written to get fnmsub for speed, but not
+Index: libgcc/config/tilepro/atomic.h
+===================================================================
+--- a/src/libgcc/config/tilepro/atomic.h (.../tags/gcc_4_7_3_release)
++++ b/src/libgcc/config/tilepro/atomic.h (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,5 @@
+ /* Macros for atomic functionality for tile.
+- Copyright (C) 2011, 2012
+- Free Software Foundation, Inc.
++ Copyright (C) 2011-2013 Free Software Foundation, Inc.
+ Contributed by Walter Lee (walt@tilera.com)
+
+ This file is free software; you can redistribute it and/or modify it
+@@ -93,8 +92,6 @@
+ compare-and-exchange routine, so may be potentially less efficient. */
+ #endif
+
+-#include <stdint.h>
+-#include <features.h>
+ #ifdef __tilegx__
+ #include <arch/spr_def.h>
+ #else
+@@ -123,9 +120,9 @@
+
+ /* 64-bit integer compare-and-exchange. */
+ static __inline __attribute__ ((always_inline))
+- int64_t arch_atomic_val_compare_and_exchange_8 (volatile int64_t * mem,
+- int64_t oldval,
+- int64_t newval)
++ long long arch_atomic_val_compare_and_exchange_8 (volatile long long
++ *mem, long long oldval,
++ long long newval)
+ {
+ #ifdef __tilegx__
+ __insn_mtspr (SPR_CMPEXCH_VALUE, oldval);
+@@ -140,7 +137,7 @@
+ "R04" (newval_lo), "R05" (newval_hi),
+ "m" (*mem):"r20", "r21", "r22", "r23", "r24", "r25",
+ "r26", "r27", "r28", "r29", "memory");
+- return ((uint64_t) result_hi) << 32 | result_lo;
++ return ((long long) result_hi) << 32 | result_lo;
+ #endif
+ }
+
+@@ -151,11 +148,11 @@
+
+
+ #define arch_atomic_val_compare_and_exchange(mem, o, n) \
+- ({ \
++ __extension__ ({ \
+ (__typeof(*(mem)))(__typeof(*(mem)-*(mem))) \
+ ((sizeof(*(mem)) == 8) ? \
+ arch_atomic_val_compare_and_exchange_8( \
+- (volatile int64_t*)(mem), (__typeof((o)-(o)))(o), \
++ (volatile long long*)(mem), (__typeof((o)-(o)))(o), \
+ (__typeof((n)-(n)))(n)) : \
+ (sizeof(*(mem)) == 4) ? \
+ arch_atomic_val_compare_and_exchange_4( \
+@@ -165,7 +162,7 @@
+ })
+
+ #define arch_atomic_bool_compare_and_exchange(mem, o, n) \
+- ({ \
++ __extension__ ({ \
+ __typeof(o) __o = (o); \
+ __builtin_expect( \
+ __o == arch_atomic_val_compare_and_exchange((mem), __o, (n)), 1); \
+@@ -175,7 +172,7 @@
+ /* Loop with compare_and_exchange until we guess the correct value.
+ Normally "expr" will be an expression using __old and __value. */
+ #define __arch_atomic_update_cmpxchg(mem, value, expr) \
+- ({ \
++ __extension__ ({ \
+ __typeof(value) __value = (value); \
+ __typeof(*(mem)) *__mem = (mem), __old = *__mem, __guess; \
+ do { \
+@@ -190,12 +187,14 @@
+ /* Generic atomic op with 8- or 4-byte variant.
+ The _mask, _addend, and _expr arguments are ignored on tilegx. */
+ #define __arch_atomic_update(mem, value, op, _mask, _addend, _expr) \
+- ({ \
++ __extension__ ({ \
+ ((__typeof(*(mem))) \
+ ((sizeof(*(mem)) == 8) ? (__typeof(*(mem)-*(mem)))__insn_##op( \
+- (void *)(mem), (int64_t)(__typeof((value)-(value)))(value)) : \
++ (volatile void *)(mem), \
++ (long long)(__typeof((value)-(value)))(value)) : \
+ (sizeof(*(mem)) == 4) ? (int)__insn_##op##4( \
+- (void *)(mem), (int32_t)(__typeof((value)-(value)))(value)) : \
++ (volatile void *)(mem), \
++ (int)(__typeof((value)-(value)))(value)) : \
+ __arch_atomic_error_bad_argument_size())); \
+ })
+
+@@ -225,7 +224,7 @@
+ /* Generic atomic op with 8- or 4-byte variant.
+ The _op argument is ignored on tilepro. */
+ #define __arch_atomic_update(mem, value, _op, mask, addend, expr) \
+- ({ \
++ __extension__ ({ \
+ (__typeof(*(mem)))(__typeof(*(mem)-*(mem))) \
+ ((sizeof(*(mem)) == 8) ? \
+ __arch_atomic_update_cmpxchg((mem), (value), (expr)) : \
+@@ -264,13 +263,13 @@
+ __arch_atomic_update_cmpxchg(mem, mask, ~(__old & __value))
+
+ #define arch_atomic_bit_set(mem, bit) \
+- ({ \
++ __extension__ ({ \
+ __typeof(*(mem)) __mask = (__typeof(*(mem)))1 << (bit); \
+ __mask & arch_atomic_or((mem), __mask); \
+ })
+
+ #define arch_atomic_bit_clear(mem, bit) \
+- ({ \
++ __extension__ ({ \
+ __typeof(*(mem)) __mask = (__typeof(*(mem)))1 << (bit); \
+ __mask & arch_atomic_and((mem), ~__mask); \
+ })
+Index: libgcc/config/tilepro/atomic.c
+===================================================================
+--- a/src/libgcc/config/tilepro/atomic.c (.../tags/gcc_4_7_3_release)
++++ b/src/libgcc/config/tilepro/atomic.c (.../branches/gcc-4_7-branch)
+@@ -29,7 +29,7 @@
+ /* This code should be inlined by the compiler, but for now support
+ it as out-of-line methods in libgcc. */
+
+-static void
++static inline void
+ pre_atomic_barrier (int model)
+ {
+ switch ((enum memmodel) model)
+@@ -45,7 +45,7 @@
+ return;
+ }
+
+-static void
++static inline void
+ post_atomic_barrier (int model)
+ {
+ switch ((enum memmodel) model)
+@@ -63,16 +63,21 @@
+
+ #define __unused __attribute__((unused))
+
+-#define __atomic_fetch_and_do(type, size, opname) \
+-type \
+-__atomic_fetch_##opname##_##size(type* p, type i, int model) \
++#define __fetch_and_do(proto, type, size, opname, top, bottom) \
++proto \
+ { \
+- pre_atomic_barrier(model); \
++ top; \
+ type rv = arch_atomic_##opname(p, i); \
+- post_atomic_barrier(model); \
++ bottom; \
+ return rv; \
+ }
+
++#define __atomic_fetch_and_do(type, size, opname) \
++ __fetch_and_do(type __atomic_fetch_##opname##_##size(type* p, type i, int model), \
++ type, size, opname, \
++ pre_atomic_barrier(model), \
++ post_atomic_barrier(model)) \
++
+ __atomic_fetch_and_do (int, 4, add)
+ __atomic_fetch_and_do (int, 4, sub)
+ __atomic_fetch_and_do (int, 4, or)
+@@ -85,27 +90,73 @@
+ __atomic_fetch_and_do (long long, 8, and)
+ __atomic_fetch_and_do (long long, 8, xor)
+ __atomic_fetch_and_do (long long, 8, nand)
+-#define __atomic_do_and_fetch(type, size, opname, op) \
+-type \
+-__atomic_##opname##_fetch_##size(type* p, type i, int model) \
+-{ \
+- pre_atomic_barrier(model); \
+- type rv = arch_atomic_##opname(p, i) op i; \
+- post_atomic_barrier(model); \
+- return rv; \
++
++#define __sync_fetch_and_do(type, size, opname) \
++ __fetch_and_do(type __sync_fetch_and_##opname##_##size(type* p, type i), \
++ type, size, opname, \
++ arch_atomic_write_barrier(), \
++ arch_atomic_read_barrier())
++
++__sync_fetch_and_do (int, 4, add)
++__sync_fetch_and_do (int, 4, sub)
++__sync_fetch_and_do (int, 4, or)
++__sync_fetch_and_do (int, 4, and)
++__sync_fetch_and_do (int, 4, xor)
++__sync_fetch_and_do (int, 4, nand)
++__sync_fetch_and_do (long long, 8, add)
++__sync_fetch_and_do (long long, 8, sub)
++__sync_fetch_and_do (long long, 8, or)
++__sync_fetch_and_do (long long, 8, and)
++__sync_fetch_and_do (long long, 8, xor)
++__sync_fetch_and_do (long long, 8, nand)
++
++#define __do_and_fetch(proto, type, size, opname, op, op2, top, bottom) \
++proto \
++{ \
++ top; \
++ type rv = op2 (arch_atomic_##opname(p, i) op i); \
++ bottom; \
++ return rv; \
+ }
+-__atomic_do_and_fetch (int, 4, add, +)
+-__atomic_do_and_fetch (int, 4, sub, -)
+-__atomic_do_and_fetch (int, 4, or, |)
+-__atomic_do_and_fetch (int, 4, and, &)
+-__atomic_do_and_fetch (int, 4, xor, |)
+-__atomic_do_and_fetch (int, 4, nand, &)
+-__atomic_do_and_fetch (long long, 8, add, +)
+-__atomic_do_and_fetch (long long, 8, sub, -)
+-__atomic_do_and_fetch (long long, 8, or, |)
+-__atomic_do_and_fetch (long long, 8, and, &)
+-__atomic_do_and_fetch (long long, 8, xor, |)
+-__atomic_do_and_fetch (long long, 8, nand, &)
++
++#define __atomic_do_and_fetch(type, size, opname, op, op2) \
++ __do_and_fetch(type __atomic_##opname##_fetch_##size(type* p, type i, int model), \
++ type, size, opname, op, op2, \
++ pre_atomic_barrier(model), \
++ post_atomic_barrier(model)) \
++
++__atomic_do_and_fetch (int, 4, add, +, )
++__atomic_do_and_fetch (int, 4, sub, -, )
++__atomic_do_and_fetch (int, 4, or, |, )
++__atomic_do_and_fetch (int, 4, and, &, )
++__atomic_do_and_fetch (int, 4, xor, |, )
++__atomic_do_and_fetch (int, 4, nand, &, ~)
++__atomic_do_and_fetch (long long, 8, add, +, )
++__atomic_do_and_fetch (long long, 8, sub, -, )
++__atomic_do_and_fetch (long long, 8, or, |, )
++__atomic_do_and_fetch (long long, 8, and, &, )
++__atomic_do_and_fetch (long long, 8, xor, |, )
++__atomic_do_and_fetch (long long, 8, nand, &, ~)
++
++#define __sync_do_and_fetch(type, size, opname, op, op2) \
++ __do_and_fetch(type __sync_##opname##_and_fetch_##size(type* p, type i), \
++ type, size, opname, op, op2, \
++ arch_atomic_write_barrier(), \
++ arch_atomic_read_barrier()) \
++
++__sync_do_and_fetch (int, 4, add, +, )
++__sync_do_and_fetch (int, 4, sub, -, )
++__sync_do_and_fetch (int, 4, or, |, )
++__sync_do_and_fetch (int, 4, and, &, )
++__sync_do_and_fetch (int, 4, xor, |, )
++__sync_do_and_fetch (int, 4, nand, &, ~)
++__sync_do_and_fetch (long long, 8, add, +, )
++__sync_do_and_fetch (long long, 8, sub, -, )
++__sync_do_and_fetch (long long, 8, or, |, )
++__sync_do_and_fetch (long long, 8, and, &, )
++__sync_do_and_fetch (long long, 8, xor, |, )
++__sync_do_and_fetch (long long, 8, nand, &, ~)
++
+ #define __atomic_exchange_methods(type, size) \
+ bool \
+ __atomic_compare_exchange_##size(volatile type* ptr, type* oldvalp, \
+@@ -129,49 +180,117 @@
+ post_atomic_barrier(model); \
+ return retval; \
+ }
++
+ __atomic_exchange_methods (int, 4)
+ __atomic_exchange_methods (long long, 8)
+
++#define __sync_exchange_methods(type, size) \
++type \
++__sync_val_compare_and_swap_##size(type* ptr, type oldval, type newval) \
++{ \
++ arch_atomic_write_barrier(); \
++ type retval = arch_atomic_val_compare_and_exchange(ptr, oldval, newval); \
++ arch_atomic_read_barrier(); \
++ return retval; \
++} \
++ \
++bool \
++__sync_bool_compare_and_swap_##size(type* ptr, type oldval, type newval) \
++{ \
++ arch_atomic_write_barrier(); \
++ bool retval = arch_atomic_bool_compare_and_exchange(ptr, oldval, newval); \
++ arch_atomic_read_barrier(); \
++ return retval; \
++} \
++ \
++type \
++__sync_lock_test_and_set_##size(type* ptr, type val) \
++{ \
++ type retval = arch_atomic_exchange(ptr, val); \
++ arch_atomic_acquire_barrier_value(retval); \
++ return retval; \
++}
++
++__sync_exchange_methods (int, 4)
++__sync_exchange_methods (long long, 8)
++
++#ifdef __LITTLE_ENDIAN__
++#define BIT_OFFSET(n, type) ((n) * 8)
++#else
++#define BIT_OFFSET(n, type) ((4 - sizeof(type) - (n)) * 8)
++#endif
++
+ /* Subword methods require the same approach for both TILEPro and
+ TILE-Gx. We load the background data for the word, insert the
+ desired subword piece, then compare-and-exchange it into place. */
+ #define u8 unsigned char
+ #define u16 unsigned short
++
++#define __subword_cmpxchg_body(type, size, ptr, guess, val) \
++ ({ \
++ unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL); \
++ const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type); \
++ const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1; \
++ const unsigned int bgmask = ~(valmask << shift); \
++ unsigned int oldword = *p; \
++ type oldval = (oldword >> shift) & valmask; \
++ if (__builtin_expect((oldval == guess), 1)) { \
++ unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
++ oldword = arch_atomic_val_compare_and_exchange(p, oldword, word); \
++ oldval = (oldword >> shift) & valmask; \
++ } \
++ oldval; \
++ }) \
++
+ #define __atomic_subword_cmpxchg(type, size) \
+ \
+ bool \
+-__atomic_compare_exchange_##size(volatile type* ptr, type* guess, \
++__atomic_compare_exchange_##size(volatile type* ptr, type* guess_ptr, \
+ type val, bool weak __unused, int models, \
+ int modelf __unused) \
+ { \
+ pre_atomic_barrier(models); \
+- unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL); \
+- const int shift = ((unsigned long)ptr & 3UL) * 8; \
+- const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1; \
+- const unsigned int bgmask = ~(valmask << shift); \
+- unsigned int oldword = *p; \
+- type oldval = (oldword >> shift) & valmask; \
+- if (__builtin_expect((oldval == *guess), 1)) { \
+- unsigned int word = (oldword & bgmask) | ((val & valmask) << shift); \
+- oldword = arch_atomic_val_compare_and_exchange(p, oldword, word); \
+- oldval = (oldword >> shift) & valmask; \
+- } \
++ type guess = *guess_ptr; \
++ type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val); \
+ post_atomic_barrier(models); \
+- bool success = (oldval == *guess); \
+- *guess = oldval; \
++ bool success = (oldval == guess); \
++ *guess_ptr = oldval; \
+ return success; \
+ }
++
+ __atomic_subword_cmpxchg (u8, 1)
+ __atomic_subword_cmpxchg (u16, 2)
++
++#define __sync_subword_cmpxchg(type, size) \
++ \
++type \
++__sync_val_compare_and_swap_##size(type* ptr, type guess, type val) \
++{ \
++ arch_atomic_write_barrier(); \
++ type oldval = __subword_cmpxchg_body(type, size, ptr, guess, val); \
++ arch_atomic_read_barrier(); \
++ return oldval; \
++} \
++ \
++bool \
++__sync_bool_compare_and_swap_##size(type* ptr, type guess, type val) \
++{ \
++ type oldval = __sync_val_compare_and_swap_##size(ptr, guess, val); \
++ return oldval == guess; \
++}
++
++__sync_subword_cmpxchg (u8, 1)
++__sync_subword_cmpxchg (u16, 2)
++
+ /* For the atomic-update subword methods, we use the same approach as
+ above, but we retry until we succeed if the compare-and-exchange
+ fails. */
+-#define __atomic_subword(type, proto, top, expr, bottom) \
++#define __subword(type, proto, top, expr, bottom) \
+ proto \
+ { \
+ top \
+ unsigned int *p = (unsigned int *)((unsigned long)ptr & ~3UL); \
+- const int shift = ((unsigned long)ptr & 3UL) * 8; \
++ const int shift = BIT_OFFSET((unsigned long)ptr & 3UL, type); \
+ const unsigned int valmask = (1 << (sizeof(type) * 8)) - 1; \
+ const unsigned int bgmask = ~(valmask << shift); \
+ unsigned int oldword, xword = *p; \
+@@ -185,12 +304,14 @@
+ } while (__builtin_expect(xword != oldword, 0)); \
+ bottom \
+ }
++
+ #define __atomic_subword_fetch(type, funcname, expr, retval) \
+- __atomic_subword(type, \
+- type __atomic_ ## funcname(volatile type *ptr, type i, int model), \
+- pre_atomic_barrier(model);, \
+- expr, \
+- post_atomic_barrier(model); return retval;)
++ __subword(type, \
++ type __atomic_ ## funcname(volatile type *ptr, type i, int model), \
++ pre_atomic_barrier(model);, \
++ expr, \
++ post_atomic_barrier(model); return retval;)
++
+ __atomic_subword_fetch (u8, fetch_add_1, oldval + i, oldval)
+ __atomic_subword_fetch (u8, fetch_sub_1, oldval - i, oldval)
+ __atomic_subword_fetch (u8, fetch_or_1, oldval | i, oldval)
+@@ -197,6 +318,7 @@
+ __atomic_subword_fetch (u8, fetch_and_1, oldval & i, oldval)
+ __atomic_subword_fetch (u8, fetch_xor_1, oldval ^ i, oldval)
+ __atomic_subword_fetch (u8, fetch_nand_1, ~(oldval & i), oldval)
++
+ __atomic_subword_fetch (u16, fetch_add_2, oldval + i, oldval)
+ __atomic_subword_fetch (u16, fetch_sub_2, oldval - i, oldval)
+ __atomic_subword_fetch (u16, fetch_or_2, oldval | i, oldval)
+@@ -203,6 +325,7 @@
+ __atomic_subword_fetch (u16, fetch_and_2, oldval & i, oldval)
+ __atomic_subword_fetch (u16, fetch_xor_2, oldval ^ i, oldval)
+ __atomic_subword_fetch (u16, fetch_nand_2, ~(oldval & i), oldval)
++
+ __atomic_subword_fetch (u8, add_fetch_1, oldval + i, val)
+ __atomic_subword_fetch (u8, sub_fetch_1, oldval - i, val)
+ __atomic_subword_fetch (u8, or_fetch_1, oldval | i, val)
+@@ -209,6 +332,7 @@
+ __atomic_subword_fetch (u8, and_fetch_1, oldval & i, val)
+ __atomic_subword_fetch (u8, xor_fetch_1, oldval ^ i, val)
+ __atomic_subword_fetch (u8, nand_fetch_1, ~(oldval & i), val)
++
+ __atomic_subword_fetch (u16, add_fetch_2, oldval + i, val)
+ __atomic_subword_fetch (u16, sub_fetch_2, oldval - i, val)
+ __atomic_subword_fetch (u16, or_fetch_2, oldval | i, val)
+@@ -215,12 +339,58 @@
+ __atomic_subword_fetch (u16, and_fetch_2, oldval & i, val)
+ __atomic_subword_fetch (u16, xor_fetch_2, oldval ^ i, val)
+ __atomic_subword_fetch (u16, nand_fetch_2, ~(oldval & i), val)
++
++#define __sync_subword_fetch(type, funcname, expr, retval) \
++ __subword(type, \
++ type __sync_ ## funcname(type *ptr, type i), \
++ arch_atomic_read_barrier();, \
++ expr, \
++ arch_atomic_write_barrier(); return retval;)
++
++__sync_subword_fetch (u8, fetch_and_add_1, oldval + i, oldval)
++__sync_subword_fetch (u8, fetch_and_sub_1, oldval - i, oldval)
++__sync_subword_fetch (u8, fetch_and_or_1, oldval | i, oldval)
++__sync_subword_fetch (u8, fetch_and_and_1, oldval & i, oldval)
++__sync_subword_fetch (u8, fetch_and_xor_1, oldval ^ i, oldval)
++__sync_subword_fetch (u8, fetch_and_nand_1, ~(oldval & i), oldval)
++
++__sync_subword_fetch (u16, fetch_and_add_2, oldval + i, oldval)
++__sync_subword_fetch (u16, fetch_and_sub_2, oldval - i, oldval)
++__sync_subword_fetch (u16, fetch_and_or_2, oldval | i, oldval)
++__sync_subword_fetch (u16, fetch_and_and_2, oldval & i, oldval)
++__sync_subword_fetch (u16, fetch_and_xor_2, oldval ^ i, oldval)
++__sync_subword_fetch (u16, fetch_and_nand_2, ~(oldval & i), oldval)
++
++__sync_subword_fetch (u8, add_and_fetch_1, oldval + i, val)
++__sync_subword_fetch (u8, sub_and_fetch_1, oldval - i, val)
++__sync_subword_fetch (u8, or_and_fetch_1, oldval | i, val)
++__sync_subword_fetch (u8, and_and_fetch_1, oldval & i, val)
++__sync_subword_fetch (u8, xor_and_fetch_1, oldval ^ i, val)
++__sync_subword_fetch (u8, nand_and_fetch_1, ~(oldval & i), val)
++
++__sync_subword_fetch (u16, add_and_fetch_2, oldval + i, val)
++__sync_subword_fetch (u16, sub_and_fetch_2, oldval - i, val)
++__sync_subword_fetch (u16, or_and_fetch_2, oldval | i, val)
++__sync_subword_fetch (u16, and_and_fetch_2, oldval & i, val)
++__sync_subword_fetch (u16, xor_and_fetch_2, oldval ^ i, val)
++__sync_subword_fetch (u16, nand_and_fetch_2, ~(oldval & i), val)
++
+ #define __atomic_subword_lock(type, size) \
+- \
+-__atomic_subword(type, \
+- type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
+- pre_atomic_barrier(model);, \
+- nval, \
+- post_atomic_barrier(model); return oldval;)
++ __subword(type, \
++ type __atomic_exchange_##size(volatile type* ptr, type nval, int model), \
++ pre_atomic_barrier(model);, \
++ nval, \
++ post_atomic_barrier(model); return oldval;)
++
+ __atomic_subword_lock (u8, 1)
+ __atomic_subword_lock (u16, 2)
++
++#define __sync_subword_lock(type, size) \
++ __subword(type, \
++ type __sync_lock_test_and_set_##size(type* ptr, type nval), \
++ , \
++ nval, \
++ arch_atomic_acquire_barrier_value(oldval); return oldval;)
++
++__sync_subword_lock (u8, 1)
++__sync_subword_lock (u16, 2)
+Index: libgcc/config/arm/sfp-machine.h
+===================================================================
+--- a/src/libgcc/config/arm/sfp-machine.h (.../tags/gcc_4_7_3_release)
++++ b/src/libgcc/config/arm/sfp-machine.h (.../branches/gcc-4_7-branch)
+@@ -19,10 +19,12 @@
+ #define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y)
+ #define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+
+-#define _FP_NANFRAC_H ((_FP_QNANBIT_H << 1) - 1)
+-#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1)
+-#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1
+-#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
++/* According to RTABI, QNAN is only with the most significant bit of the
++ significand set, and all other significand bits zero. */
++#define _FP_NANFRAC_H 0
++#define _FP_NANFRAC_S 0
++#define _FP_NANFRAC_D 0, 0
++#define _FP_NANFRAC_Q 0, 0, 0, 0
+ #define _FP_NANSIGN_H 0
+ #define _FP_NANSIGN_S 0
+ #define _FP_NANSIGN_D 0
Index: libgcc/config/arm/linux-atomic.c
===================================================================
--- a/src/libgcc/config/arm/linux-atomic.c (.../tags/gcc_4_7_3_release)
@@ -274,6 +10261,120 @@ Index: libgcc/config/arm/linux-atomic.c
#define SYNC_LOCK_RELEASE(TYPE, WIDTH) \
void HIDDEN \
+Index: libgcc/config/mips/vr4120-div.S
+===================================================================
+--- a/src/libgcc/config/mips/vr4120-div.S (.../tags/gcc_4_7_3_release)
++++ b/src/libgcc/config/mips/vr4120-div.S (.../branches/gcc-4_7-branch)
+@@ -3,18 +3,23 @@
+
+ This file is part of GCC.
+
+-GCC is free software; you can redistribute it and/or modify
+-it under the terms of the GNU General Public License as published by
+-the Free Software Foundation; either version 3, or (at your option)
+-any later version.
++GCC is free software; you can redistribute it and/or modify it under
++the terms of the GNU General Public License as published by the Free
++Software Foundation; either version 3, or (at your option) any later
++version.
+
+-GCC is distributed in the hope that it will be useful,
+-but WITHOUT ANY WARRANTY; without even the implied warranty of
+-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-GNU General Public License for more details.
++GCC is distributed in the hope that it will be useful, but WITHOUT ANY
++WARRANTY; without even the implied warranty of MERCHANTABILITY or
++FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++for more details.
+
+-You should have received a copy of the GNU General Public License
+- along with GCC; see the file COPYING3. If not see
++Under Section 7 of GPL version 3, you are granted additional
++permissions described in the GCC Runtime Library Exception, version
++3.1, as published by the Free Software Foundation.
++
++You should have received a copy of the GNU General Public License and
++a copy of the GCC Runtime Library Exception along with this program;
++see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ /* This file contains functions which implement divsi3 and modsi3 for
+Index: gcc/tree-ssa-loop-niter.c
+===================================================================
+--- a/src/gcc/tree-ssa-loop-niter.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/tree-ssa-loop-niter.c (.../branches/gcc-4_7-branch)
+@@ -2068,7 +2068,8 @@
+ return NULL;
+ }
+
+- if (gimple_code (stmt) != GIMPLE_ASSIGN)
++ if (gimple_code (stmt) != GIMPLE_ASSIGN
++ || gimple_assign_rhs_class (stmt) == GIMPLE_TERNARY_RHS)
+ return NULL;
+
+ code = gimple_assign_rhs_code (stmt);
+@@ -2136,7 +2137,7 @@
+ {
+ gimple stmt;
+
+- gcc_assert (is_gimple_min_invariant (base));
++ gcc_checking_assert (is_gimple_min_invariant (base));
+
+ if (!x)
+ return base;
+@@ -2145,7 +2146,7 @@
+ if (gimple_code (stmt) == GIMPLE_PHI)
+ return base;
+
+- gcc_assert (is_gimple_assign (stmt));
++ gcc_checking_assert (is_gimple_assign (stmt));
+
+ /* STMT must be either an assignment of a single SSA name or an
+ expression involving an SSA name and a constant. Try to fold that
+Index: gcc/c-family/ChangeLog
+===================================================================
+--- a/src/gcc/c-family/ChangeLog (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/c-family/ChangeLog (.../branches/gcc-4_7-branch)
+@@ -1,3 +1,11 @@
++2013-09-01 Iain Sandoe <iain@codesourcery.com>
++
++ Backported from 4.8
++ 2012-06-19 Steven Bosscher <steven@gcc.gnu.org>
++
++ * c-target.def (objc_declare_unresolved_class_reference,
++ objc_declare_class_definition): Add new hooks.
++
+ 2013-04-11 Release Manager
+
+ * GCC 4.7.3 released.
+Index: gcc/c-family/c-target.def
+===================================================================
+--- a/src/gcc/c-family/c-target.def (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/c-family/c-target.def (.../branches/gcc-4_7-branch)
+@@ -59,8 +59,22 @@
+ common-format string object when the target provides one.",
+ tree, (tree string),
+ NULL)
+-
++
+ DEFHOOK
++(objc_declare_unresolved_class_reference,
++ "Declare that Objective C class @var{classname} is referenced\
++ by the current TU.",
++ void, (const char *classname),
++ NULL)
++
++DEFHOOK
++(objc_declare_class_definition,
++ "Declare that Objective C class @var{classname} is defined\
++ by the current TU.",
++ void, (const char *classname),
++ NULL)
++
++DEFHOOK
+ (string_object_ref_type_p,
+ "If a target implements string objects then this hook should return\
+ @code{true} if @var{stringref} is a valid reference to such an object.",
Index: gcc/target.def
===================================================================
--- a/src/gcc/target.def (.../tags/gcc_4_7_3_release)
@@ -292,13 +10393,142 @@ Index: gcc/target.def
(delay_sched2, "True if sched2 is not to be run at its normal place. \
This usually means it will be run as part of machine-specific reorg.",
bool, false)
+Index: gcc/optabs.c
+===================================================================
+--- a/src/gcc/optabs.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/optabs.c (.../branches/gcc-4_7-branch)
+@@ -7212,8 +7212,7 @@
+
+ create_output_operand (&ops[0], target, mode);
+ create_fixed_operand (&ops[1], mem);
+- /* VAL may have been promoted to a wider mode. Shrink it if so. */
+- create_convert_operand_to (&ops[2], val, mode, true);
++ create_input_operand (&ops[2], val, mode);
+ create_integer_operand (&ops[3], model);
+ if (maybe_expand_insn (icode, 4, ops))
+ return ops[0].value;
+@@ -7252,8 +7251,7 @@
+ struct expand_operand ops[3];
+ create_output_operand (&ops[0], target, mode);
+ create_fixed_operand (&ops[1], mem);
+- /* VAL may have been promoted to a wider mode. Shrink it if so. */
+- create_convert_operand_to (&ops[2], val, mode, true);
++ create_input_operand (&ops[2], val, mode);
+ if (maybe_expand_insn (icode, 3, ops))
+ return ops[0].value;
+ }
+@@ -7295,8 +7293,6 @@
+ {
+ if (!target || !register_operand (target, mode))
+ target = gen_reg_rtx (mode);
+- if (GET_MODE (val) != VOIDmode && GET_MODE (val) != mode)
+- val = convert_modes (mode, GET_MODE (val), val, 1);
+ if (expand_compare_and_swap_loop (mem, target, val, NULL_RTX))
+ return target;
+ }
+@@ -7508,8 +7504,8 @@
+ create_output_operand (&ops[0], target_bool, bool_mode);
+ create_output_operand (&ops[1], target_oval, mode);
+ create_fixed_operand (&ops[2], mem);
+- create_convert_operand_to (&ops[3], expected, mode, true);
+- create_convert_operand_to (&ops[4], desired, mode, true);
++ create_input_operand (&ops[3], expected, mode);
++ create_input_operand (&ops[4], desired, mode);
+ create_integer_operand (&ops[5], is_weak);
+ create_integer_operand (&ops[6], succ_model);
+ create_integer_operand (&ops[7], fail_model);
+@@ -7530,8 +7526,8 @@
+
+ create_output_operand (&ops[0], target_oval, mode);
+ create_fixed_operand (&ops[1], mem);
+- create_convert_operand_to (&ops[2], expected, mode, true);
+- create_convert_operand_to (&ops[3], desired, mode, true);
++ create_input_operand (&ops[2], expected, mode);
++ create_input_operand (&ops[3], desired, mode);
+ if (!maybe_expand_insn (icode, 4, ops))
+ return false;
+
Index: gcc/DATESTAMP
===================================================================
--- a/src/gcc/DATESTAMP (.../tags/gcc_4_7_3_release)
+++ b/src/gcc/DATESTAMP (.../branches/gcc-4_7-branch)
@@ -1 +1 @@
-20130411
-+20130517
++20140320
+Index: gcc/tree-tailcall.c
+===================================================================
+--- a/src/gcc/tree-tailcall.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/tree-tailcall.c (.../branches/gcc-4_7-branch)
+@@ -329,8 +329,10 @@
+ case NEGATE_EXPR:
+ if (FLOAT_TYPE_P (TREE_TYPE (op0)))
+ *m = build_real (TREE_TYPE (op0), dconstm1);
++ else if (INTEGRAL_TYPE_P (TREE_TYPE (op0)))
++ *m = build_int_cst (TREE_TYPE (op0), -1);
+ else
+- *m = build_int_cst (TREE_TYPE (op0), -1);
++ return false;
+
+ *ass_var = dest;
+ return true;
+@@ -342,8 +344,10 @@
+ {
+ if (FLOAT_TYPE_P (TREE_TYPE (non_ass_var)))
+ *m = build_real (TREE_TYPE (non_ass_var), dconstm1);
+- else
++ else if (INTEGRAL_TYPE_P (TREE_TYPE (non_ass_var)))
+ *m = build_int_cst (TREE_TYPE (non_ass_var), -1);
++ else
++ return false;
+
+ *a = fold_build1 (NEGATE_EXPR, TREE_TYPE (non_ass_var), non_ass_var);
+ }
+Index: gcc/configure
+===================================================================
+--- a/src/gcc/configure (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/configure (.../branches/gcc-4_7-branch)
+@@ -24878,6 +24878,10 @@
+
+ # These two are used unconditionally by i386.[ch]; it is to be defined
+ # to 1 if the feature is present, 0 otherwise.
++ as_ix86_gotoff_in_data_opt=
++ if test x$gas = xyes; then
++ as_ix86_gotoff_in_data_opt="--32"
++ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking assembler for GOTOFF in data" >&5
+ $as_echo_n "checking assembler for GOTOFF in data... " >&6; }
+ if test "${gcc_cv_as_ix86_gotoff_in_data+set}" = set; then :
+@@ -24894,7 +24898,7 @@
+ nop
+ .data
+ .long .L0@GOTOFF' > conftest.s
+- if { ac_try='$gcc_cv_as $gcc_cv_as_flags -o conftest.o conftest.s >&5'
++ if { ac_try='$gcc_cv_as $gcc_cv_as_flags $as_ix86_gotoff_in_data_opt -o conftest.o conftest.s >&5'
+ { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+@@ -27309,8 +27313,8 @@
+ $as_echo_n "checking for exported symbols... " >&6; }
+ if test "x$export_sym_check" != x; then
+ echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c
+- ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest > /dev/null 2>&1
+- if $export_sym_check conftest | grep foobar > /dev/null; then
++ ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest$ac_exeext > /dev/null 2>&1
++ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
+ : # No need to use a flag
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+@@ -27319,8 +27323,8 @@
+ $as_echo "yes" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -rdynamic" >&5
+ $as_echo_n "checking for -rdynamic... " >&6; }
+- ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest > /dev/null 2>&1
+- if $export_sym_check conftest | grep foobar > /dev/null; then
++ ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest$ac_exeext > /dev/null 2>&1
++ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
+ plugin_rdynamic=yes
+ pluginlibs="-rdynamic"
+ else
Index: gcc/builtins.c
===================================================================
--- a/src/gcc/builtins.c (.../tags/gcc_4_7_3_release)
@@ -321,11 +10551,993 @@ Index: gcc/builtins.c
/* Fall through... */
case rvc_zero:
/* Zero may set errno and/or raise an exception for logb, also
+Index: gcc/fold-const.c
+===================================================================
+--- a/src/gcc/fold-const.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/fold-const.c (.../branches/gcc-4_7-branch)
+@@ -486,11 +486,24 @@
+ and actually traps on some architectures. But if overflow is
+ undefined, we can negate, because - (INT_MIN / 1) is an
+ overflow. */
+- if (INTEGRAL_TYPE_P (TREE_TYPE (t))
+- && !TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (t)))
+- break;
+- return negate_expr_p (TREE_OPERAND (t, 1))
+- || negate_expr_p (TREE_OPERAND (t, 0));
++ if (INTEGRAL_TYPE_P (TREE_TYPE (t)))
++ {
++ if (!TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (t)))
++ break;
++ /* If overflow is undefined then we have to be careful because
++ we ask whether it's ok to associate the negate with the
++ division which is not ok for example for
++ -((a - b) / c) where (-(a - b)) / c may invoke undefined
++ overflow because of negating INT_MIN. So do not use
++ negate_expr_p here but open-code the two important cases. */
++ if (TREE_CODE (TREE_OPERAND (t, 0)) == NEGATE_EXPR
++ || (TREE_CODE (TREE_OPERAND (t, 0)) == INTEGER_CST
++ && may_negate_without_overflow_p (TREE_OPERAND (t, 0))))
++ return true;
++ }
++ else if (negate_expr_p (TREE_OPERAND (t, 0)))
++ return true;
++ return negate_expr_p (TREE_OPERAND (t, 1));
+
+ case NOP_EXPR:
+ /* Negate -((double)float) as (double)(-float). */
+@@ -670,16 +683,20 @@
+ return fold_build2_loc (loc, TREE_CODE (t), type,
+ TREE_OPERAND (t, 0), negate_expr (tem));
+ }
++ /* If overflow is undefined then we have to be careful because
++ we ask whether it's ok to associate the negate with the
++ division which is not ok for example for
++ -((a - b) / c) where (-(a - b)) / c may invoke undefined
++ overflow because of negating INT_MIN. So do not use
++ negate_expr_p here but open-code the two important cases. */
+ tem = TREE_OPERAND (t, 0);
+- if (negate_expr_p (tem))
+- {
+- if (INTEGRAL_TYPE_P (type)
+- && (TREE_CODE (tem) != INTEGER_CST
+- || tree_int_cst_equal (tem, TYPE_MIN_VALUE (type))))
+- fold_overflow_warning (warnmsg, WARN_STRICT_OVERFLOW_MISC);
+- return fold_build2_loc (loc, TREE_CODE (t), type,
+- negate_expr (tem), TREE_OPERAND (t, 1));
+- }
++ if ((INTEGRAL_TYPE_P (type)
++ && (TREE_CODE (tem) == NEGATE_EXPR
++ || (TREE_CODE (tem) == INTEGER_CST
++ && may_negate_without_overflow_p (tem))))
++ || !INTEGRAL_TYPE_P (type))
++ return fold_build2_loc (loc, TREE_CODE (t), type,
++ negate_expr (tem), TREE_OPERAND (t, 1));
+ }
+ break;
+
+Index: gcc/objc/ChangeLog
+===================================================================
+--- a/src/gcc/objc/ChangeLog (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/objc/ChangeLog (.../branches/gcc-4_7-branch)
+@@ -1,3 +1,14 @@
++2013-09-01 Iain Sandoe <iain@codesourcery.com>
++
++ Backported from 4.8
++ 2012-06-19 Steven Bosscher <steven@gcc.gnu.org>
++
++ * objc-next-runtime-abi-01.c: Do not include tm.h and output.h.
++ Include c-family/c-target.h.
++ (handle_next_class_ref): Rewrite to emit top-level asm statements.
++ (handle_next_impent): Likewise.
++ * objc/Make-lang.in: Fix dependencies for objc-next-runtime-abi-01.o.
++
+ 2013-04-11 Release Manager
+
+ * GCC 4.7.3 released.
+Index: gcc/objc/Make-lang.in
+===================================================================
+--- a/src/gcc/objc/Make-lang.in (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/objc/Make-lang.in (.../branches/gcc-4_7-branch)
+@@ -106,7 +106,7 @@
+ gt-objc-objc-next-runtime-abi-01.h \
+ $(START_HDRS) \
+ $(GGC_H) $(DIAGNOSTIC_CORE_H) $(FLAGS_H) input.h \
+- $(TARGET_H) output.h \
++ $(TARGET_H) \
+ objc/objc-encoding.h \
+ objc/objc-next-metadata-tags.h \
+ objc/objc-runtime-hooks.h \
+Index: gcc/objc/objc-next-runtime-abi-01.c
+===================================================================
+--- a/src/gcc/objc/objc-next-runtime-abi-01.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/objc/objc-next-runtime-abi-01.c (.../branches/gcc-4_7-branch)
+@@ -26,7 +26,6 @@
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+-#include "tm.h"
+ #include "tree.h"
+
+ #ifdef OBJCPLUS
+@@ -49,7 +48,7 @@
+
+ #include "ggc.h"
+ #include "target.h"
+-#include "output.h"
++#include "c-family/c-target.h"
+ #include "tree-iterator.h"
+
+ #include "objc-runtime-hooks.h"
+@@ -2268,47 +2267,50 @@
+ init_objc_symtab (TREE_TYPE (UOBJC_SYMBOLS_decl)));
+ }
+
++/* Any target implementing NeXT ObjC m32 ABI has to ensure that objects
++ refer to, and define, symbols that enforce linkage of classes into the
++ executable image, preserving unix archive semantics.
+
++ At present (4.8), the only targets implementing this are Darwin; these
++ use top level asms to implement a scheme (see config/darwin-c.c). The
++ latter method is a hack, but compatible with LTO see also PR48109 for
++ further discussion and other possible methods. */
++
+ static void
+-handle_next_class_ref (tree chain)
++handle_next_class_ref (tree chain ATTRIBUTE_UNUSED)
+ {
+- const char *name = IDENTIFIER_POINTER (TREE_VALUE (chain));
+- char *string = (char *) alloca (strlen (name) + 30);
+-
+- sprintf (string, ".objc_class_name_%s", name);
+-
+-#ifdef ASM_DECLARE_UNRESOLVED_REFERENCE
+- ASM_DECLARE_UNRESOLVED_REFERENCE (asm_out_file, string);
+-#else
+- return ; /* NULL build for targets other than Darwin. */
+-#endif
++ if (targetcm.objc_declare_unresolved_class_reference)
++ {
++ const char *name = IDENTIFIER_POINTER (TREE_VALUE (chain));
++ char *string = (char *) alloca (strlen (name) + 30);
++ sprintf (string, ".objc_class_name_%s", name);
++ targetcm.objc_declare_unresolved_class_reference (string);
++ }
+ }
+
+ static void
+-handle_next_impent (struct imp_entry *impent)
++handle_next_impent (struct imp_entry *impent ATTRIBUTE_UNUSED)
+ {
+- char buf[BUFSIZE];
++ if (targetcm.objc_declare_class_definition)
++ {
++ char buf[BUFSIZE];
+
+- switch (TREE_CODE (impent->imp_context))
+- {
+- case CLASS_IMPLEMENTATION_TYPE:
+- snprintf (buf, BUFSIZE, ".objc_class_name_%s",
+- IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context)));
+- break;
+- case CATEGORY_IMPLEMENTATION_TYPE:
+- snprintf (buf, BUFSIZE, "*.objc_category_name_%s_%s",
+- IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context)),
+- IDENTIFIER_POINTER (CLASS_SUPER_NAME (impent->imp_context)));
+- break;
+- default:
+- return;
++ switch (TREE_CODE (impent->imp_context))
++ {
++ case CLASS_IMPLEMENTATION_TYPE:
++ snprintf (buf, BUFSIZE, ".objc_class_name_%s",
++ IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context)));
++ break;
++ case CATEGORY_IMPLEMENTATION_TYPE:
++ snprintf (buf, BUFSIZE, "*.objc_category_name_%s_%s",
++ IDENTIFIER_POINTER (CLASS_NAME (impent->imp_context)),
++ IDENTIFIER_POINTER (CLASS_SUPER_NAME (impent->imp_context)));
++ break;
++ default:
++ return;
++ }
++ targetcm.objc_declare_class_definition (buf);
+ }
+-
+-#ifdef ASM_DECLARE_CLASS_REFERENCE
+- ASM_DECLARE_CLASS_REFERENCE (asm_out_file, buf);
+-#else
+- return ; /* NULL build for targets other than Darwin. */
+-#endif
+ }
+
+ static void
+@@ -2415,8 +2417,7 @@
+
+ /* Dump the class references. This forces the appropriate classes
+ to be linked into the executable image, preserving unix archive
+- semantics. This can be removed when we move to a more dynamically
+- linked environment. */
++ semantics. */
+
+ for (chain = cls_ref_chain; chain; chain = TREE_CHAIN (chain))
+ {
Index: gcc/ChangeLog
===================================================================
--- a/src/gcc/ChangeLog (.../tags/gcc_4_7_3_release)
+++ b/src/gcc/ChangeLog (.../branches/gcc-4_7-branch)
-@@ -1,3 +1,191 @@
+@@ -1,3 +1,963 @@
++2014-03-19 Eric Botcazou <ebotcazou@adacore.com>
++
++ * tree-dfa.c (get_ref_base_and_extent) <ARRAY_REF>: Remove space.
++
++2014-03-18 Kai Tietz <ktietz@redhat.com>
++
++ PR rtl-optimization/56356
++ * sdbout.c (sdbout_parms): Verify that parms'
++ incoming argument is valid.
++ (sdbout_reg_parms): Likewise.
++
++2014-03-18 Richard Biener <rguenther@suse.de>
++
++ Backport from mainline
++ 2013-11-05 Richard Biener <rguenther@suse.de>
++
++ PR middle-end/58941
++ * tree-dfa.c (get_ref_base_and_extent): Merge common code
++ in MEM_REF and TARGET_MEM_REF handling. Make sure to
++ process trailing array detection before diving into the
++ view-converted object (and possibly apply some extra offset).
++
++ 2012-05-07 Eric Botcazou <ebotcazou@adacore.com>
++
++ * tree-dfa.c (get_ref_base_and_extent) <ARRAY_REF>: Do the offset
++ computation using the precision of the index type.
++
++ 2012-05-31 Eric Botcazou <ebotcazou@adacore.com>
++
++ * tree-dfa.c (get_ref_base_and_extent): Compute the offset using
++ double ints throughout.
++
++2014-03-18 Richard Biener <rguenther@suse.de>
++
++ Backport from mainline
++ 2013-08-27 Richard Biener <rguenther@suse.de>
++
++ PR tree-optimization/57521
++ * tree-if-conv.c (if_convertible_bb_p): Verify that at least
++ one edge is non-critical.
++ (find_phi_replacement_condition): Make sure to use a non-critical
++ edge. Cleanup and remove old bug workarounds.
++ (bb_postdominates_preds): Remove.
++ (if_convertible_loop_p_1): Do not compute post-dominators.
++ (combine_blocks): Do not free post-dominators.
++ (main_tree_if_conversion): Likewise.
++
++ 2013-09-03 Richard Biener <rguenther@suse.de>
++
++ PR middle-end/57656
++ * fold-const.c (negate_expr_p): Fix division case.
++ (negate_expr): Likewise.
++
++ 2013-11-19 Richard Biener <rguenther@suse.de>
++
++ PR tree-optimization/57517
++ * tree-predcom.c (combinable_refs_p): Verify the combination
++ is always executed when the refs are.
++
++2014-03-17 Richard Biener <rguenther@suse.de>
++
++ Backport from mainline
++ 2013-05-21 Richard Biener <rguenther@suse.de>
++
++ PR tree-optimization/57303
++ * tree-ssa-sink.c (statement_sink_location): Properly handle
++ self-assignments.
++
++ 2013-12-02 Richard Biener <rguenther@suse.de>
++
++ PR tree-optimization/59139
++ * tree-ssa-loop-niter.c (chain_of_csts_start): Properly match
++ code in get_val_for.
++ (get_val_for): Use gcc_checking_asserts.
++
++ 2014-02-14 Richard Biener <rguenther@suse.de>
++
++ PR tree-optimization/60183
++ * tree-ssa-phiprop.c (propagate_with_phi): Avoid speculating
++ loads.
++ (tree_ssa_phiprop): Calculate and free post-dominators.
++
++2014-03-14 Georg-Johann Lay <avr@gjlay.de>
++
++ Backport from 2014-03-14 trunk r208562.
++
++ PR target/59396
++ * config/avr/avr.c (avr_set_current_function): Pass function name
++ through default_strip_name_encoding before sanity checking instead
++ of skipping the first char of the assembler name.
++
++2014-02-24 John David Anglin <danglin@gcc.gnu.org>
++
++ * config/pa/pa.c (pa_output_move_double): Don't valididate when
++ adjusting offsetable addresses.
++
++2014-02-21 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2014-02-21 Jakub Jelinek <jakub@redhat.com>
++
++ * config/i386/i386.c (ix86_expand_vec_perm): Use V8SImode
++ mode for mask of V8SFmode permutation.
++
++ Backport from 4.8 branch
++ 2014-02-20 Jakub Jelinek <jakub@redhat.com>
++
++ PR target/57896
++ * config/i386/i386.c (expand_vec_perm_interleave2): Don't call
++ gen_reg_rtx if d->testing_p.
++ (expand_vec_perm_pshufb2, expand_vec_perm_even_odd_1,
++ expand_vec_perm_broadcast_1): Return early if d->testing_p and
++ we will certainly return true.
++
++2014-02-20 Terry Guo <terry.guo@arm.com>
++
++ Backport from mainline
++ 2014-02-08 Terry Guo <terry.guo@arm.com>
++
++ * doc/invoke.texi: Document ARM -march=armv7e-m.
++
++2014-02-19 H.J. Lu <hongjiu.lu@intel.com>
++
++ Backport from mainline
++ 2014-02-19 H.J. Lu <hongjiu.lu@intel.com>
++
++ PR target/60207
++ * config/i386/i386.c (construct_container): Remove TFmode check
++ for X86_64_INTEGER_CLASS.
++
++2014-02-18 Kai Tietz <ktietz@redhat.com>
++
++ Backport from mainline
++ PR target/60193
++ * config/i386/i386.c (ix86_expand_prologue): Use
++ rax register as displacement for restoring %r10, %rax.
++ Additional fix wrong offset for restoring both-registers.
++
++2014-02-18 Eric Botcazou <ebotcazou@adacore.com>
++
++ * ipa-prop.c (compute_complex_ancestor_jump_func): Replace overzealous
++ assertion with conditional return.
++
++2014-02-18 Jakub Jelinek <jakub@redhat.com>
++ Uros Bizjak <ubizjak@gmail.com>
++
++ PR driver/60233
++ * config/i386/driver-i386.c (host_detect_local_cpu): If
++ YMM state is not saved by the OS, also clear has_f16c. Move
++ CPUID 0x80000001 handling before YMM state saving checking.
++
++2014-02-13 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2014-02-13 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/sse.md (xop_vmfrcz<mode>2): Generate const0 in
++ operands[2], not operands[3].
++
++2014-02-12 H.J. Lu <hongjiu.lu@intel.com>
++
++ Backport from mainline
++ 2014-02-12 H.J. Lu <hongjiu.lu@intel.com>
++ Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/60151
++ * configure.ac (HAVE_AS_GOTOFF_IN_DATA): Pass --32 to GNU assembler.
++
++2014-02-05 James Greenhalgh <james.greenhalgh@arm.com>
++
++ * doc/invoke.texi: Fix thinko introduced by previous revision.
++
++2014-02-05 James Greenhalgh <james.greenhalgh@arm.com>
++
++ Backport from mainline.
++ 2014-02-05 James Greenhalgh <james.greenhalgh@arm.com>
++
++ PR target/59718
++ * doc/invoke.texi (-march): Clarify documentation for ARM.
++ (-mtune): Likewise.
++ (-mcpu): Likewise.
++
++2014-02-04 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2014-02-02 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/60017
++ * config/i386/i386.c (classify_argument): Fix handling of bit_offset
++ when calculating size of integer atomic types.
++
++2014-02-02 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2014-01-30 Jakub Jelinek <jakub@redhat.com>
++
++ * config/i386/f16cintrin.h (_cvtsh_ss): Avoid -Wnarrowing warning.
++
++2014-01-31 Richard Henderson <rth@redhat.com>
++
++ PR middle-end/60004
++ * tree-eh.c (lower_try_finally_switch): Delay lowering finally block
++ until after else_eh is processed.
++
++2014-01-29 Markus Trippelsdorf <markus@trippelsdorf.de>
++
++ Backport from mainline
++ 2012-12-13 Jakub Jelinek <jakub@redhat.com>
++
++ PR gcov-profile/55650
++ * coverage.c (coverage_obj_init): Return false if no functions
++ are being emitted.
++
++2014-01-25 Walter Lee <walt@tilera.com>
++
++ Backport from mainline
++ 2014-01-25 Walter Lee <walt@tilera.com>
++
++ * config/tilegx/sync.md (atomic_fetch_sub): Fix negation and
++ avoid clobbering a live register.
++
++2014-01-25 Walter Lee <walt@tilera.com>
++
++ Backport from mainline
++ 2014-01-25 Walter Lee <walt@tilera.com>
++
++ * config/tilegx/tilegx-c.c (tilegx_cpu_cpp_builtins):
++ Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_{1,2}.
++ * config/tilegx/tilepro-c.c (tilepro_cpu_cpp_builtins):
++ Define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_{1,2,4,8}.
++
++2014-01-25 Walter Lee <walt@tilera.com>
++
++ Backport from mainline
++ 2014-01-25 Walter Lee <walt@tilera.com>
++
++ * config/tilegx/tilegx.c (tilegx_gen_bundles): Delete barrier
++ insns before bundling.
++ * config/tilegx/tilegx.md (tile_network_barrier): Update comment.
++
++2014-01-25 Walter Lee <walt@tilera.com>
++
++ Backport from mainline
++ 2014-01-25 Walter Lee <walt@tilera.com>
++
++ * config/tilegx/tilegx.c (tilegx_expand_builtin): Set
++ PREFETCH_SCHEDULE_BARRIER_P to true for prefetches.
++ * config/tilepro/tilepro.c (tilepro_expand_builtin): Ditto.
++
++2014-01-25 Walter Lee <walt@tilera.com>
++
++ Backport from mainline
++ 2014-01-25 Walter Lee <walt@tilera.com>
++
++ * config/tilepro/tilepro.md (ctzdi2): Use register_operand predicate.
++ (clzdi2): Ditto.
++ (ffsdi2): Ditto.
++
++2014-01-25 Walter Lee <walt@tilera.com>
++
++ Backport from mainline
++ 2014-01-25 Walter Lee <walt@tilera.com>
++
++ * config/tilegx/tilegx.c (tilegx_expand_to_rtl_hook): New.
++ (TARGET_EXPAND_TO_RTL_HOOK): Define.
++
++2014-01-22 Uros Bizjak <ubizjak@gmail.com>
++ Jakub Jelinek <jakub@redhat.com>
++
++ PR target/59880
++ * config/i386/i386.c (ix86_avoid_lea_for_addr): Return false
++ for SImode_address_operand operands. Return false
++ if operands[1] is a REG.
++
++2014-01-21 Andrey Belevantsev <abel@ispras.ru>
++
++ Backport from mainline
++ 2013-12-23 Andrey Belevantsev <abel@ispras.ru>
++
++ PR rtl-optimization/57422
++ * sel-sched.c (mark_unavailable_hard_regs): Fix typo when calling
++ add_to_hard_reg_set.
++
++2014-01-19 John David Anglin <danglin@gcc.gnu.org>
++
++ * config/pa/pa.c (pa_attr_length_millicode_call): Correct length of
++ long non-pic millicode calls.
++
++2014-01-17 John David Anglin <danglin@gcc.gnu.org>
++
++ * config/pa/pa.c (pa_attr_length_indirect_call): Don't output a short
++ call to $$dyncall when TARGET_LONG_CALLS is true.
++
++2014-01-17 Charles Baylis <charles.baylis@linaro.org>
++
++ Backport from mainline
++ 2013-12-19 Charles Baylis <charles.baylis@linaro.org>
++
++ PR target/59142
++ * config/arm/arm-ldmstm.ml: Use low_register_operand for Thumb
++ patterns.
++ * config/arm/ldmstm.md: Regenerate.
++
++ 2013-12-19 Charles Baylis <charles.baylis@linaro.org>
++
++ PR target/59142
++ * config/arm/predicates.md (arm_hard_general_register_operand):
++ New predicate.
++ (arm_hard_register_operand): Remove.
++ * config/arm/arm-ldmstm.ml: Use arm_hard_general_register_operand
++ for all patterns.
++ * config/arm/ldmstm.md: Regenerate.
++
++2014-01-16 Jakub Jelinek <jakub@redhat.com>
++
++ PR target/59839
++ * config/i386/i386.c (ix86_expand_builtin): If target doesn't
++ satisfy operand 0 predicate for gathers, use a new pseudo as
++ subtarget.
++
++2014-01-16 Richard Henderson <rth@redhat.com>
++
++ PR debug/54694
++ * reginfo.c (global_regs_decl): Globalize.
++ * rtl.h (global_regs_decl): Declare.
++ * ira.c (do_reload): Diagnose frame_pointer_needed and it
++ reserved via global_regs.
++
++2014-01-16 Marek Polacek <polacek@redhat.com>
++
++ Backport from mainline
++ 2014-01-16 Marek Polacek <polacek@redhat.com>
++
++ PR middle-end/59827
++ * gimple-low.c (gimple_check_call_args): Don't use DECL_ARG_TYPE if
++ it is error_mark_node.
++
++2014-01-14 Uros Bizjak <ubizjak@gmail.com>
++
++ Revert:
++ 2014-01-08 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/i386.c (ix86_data_alignment): Calculate max_align
++ from prefetch_block tune setting.
++
++2014-01-10 Richard Earnshaw <rearnsha@arm.com>
++
++ PR rtl-optimization/54300
++ * regcprop.c (copyprop_hardreg_forward_1): Ensure any unused
++ outputs in a single-set are killed from the value chains.
++
++2014-01-10 Huacai Chen <chenhc@lemote.com>
++
++ * config/mips/driver-native.c (host_detect_local_cpu): Handle new
++ kernel strings for Loongson-2E/2F/3A.
++
++2014-01-08 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2014-01-05 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/i386.c (ix86_data_alignment): Calculate max_align
++ from prefetch_block tune setting.
++ (nocona_cost): Correct size of prefetch block to 64.
++
++2013-12-28 Eric Botcazou <ebotcazou@adacore.com>
++
++ * doc/invoke.texi (output file options): Add missing markers.
++
++2013-12-11 Kai Tietz <ktietz@redhat.com>
++
++ PR target/56807
++ * config/i386/i386.c (ix86_expand_prologue): plus_constant
++ takes no mode-argument.
++
++2013-12-10 Kai Tietz <ktietz@redhat.com>
++
++ PR target/56807
++ * config/i386/i386.c (ix86_expand_prologue): Address saved
++ registers stack-relative, not via frame-pointer.
++
++2013-12-03 Marek Polacek <polacek@redhat.com>
++
++ Backport from mainline
++ 2013-12-03 Marek Polacek <polacek@redhat.com>
++
++ PR c/59351
++ * c-decl.c (build_compound_literal): Allow compound literals with
++ empty initial value.
++
++2013-12-01 Eric Botcazou <ebotcazou@adacore.com>
++
++ * config/i386/winnt.c (i386_pe_asm_named_section): Be prepared for an
++ identifier node.
++
++2013-11-28 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-11-23 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/56788
++ * config/i386/i386.c (bdesc_multi_arg) <IX86_BUILTIN_VFRCZSS>:
++ Declare as MULTI_ARG_1_SF instruction.
++ <IX86_BUILTIN_VFRCZSD>: Decleare as MULTI_ARG_1_DF instruction.
++ * config/i386/sse.md (*xop_vmfrcz<mode>2): Rename
++ from *xop_vmfrcz_<mode>.
++ * config/i386/xopintrin.h (_mm_frcz_ss): Use __builtin_ia32_movss
++ to merge scalar result with __A.
++ (_mm_frcz_sd): Use __builtin_ia32_movsd to merge scalar
++ result with __A.
++
++2013-11-19 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-11-18 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/i386.c (ix86_decompose_address): Use REG_P instead of
++ ix86_address_subreg_operand. Move subreg checks to
++ ix86_validate_address_register. Move address override check to
++ ix86_legitimate_address_p.
++ (ix86_validate_address_register): New function.
++ (ix86_legitimate_address_p): Call ix86_validate_address_register
++ to validate base and index registers. Add address override check
++ from ix86_decompose_address.
++ (ix86_decompose_address): Remove.
++
++ Backport from mainline
++ 2013-11-17 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/59153
++ * config/i386/i386.c (ix86_address_subreg_operand): Do not
++ reject non-integer subregs.
++ (ix86_decompose_address): Do not reject invalid CONST_INT RTXes.
++ Move check for invalid x32 constant addresses ...
++ (ix86_legitimate_address_p): ... here.
++
++ Bacport from mainline
++ 2012-03-13 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/i386.c (ix86_decompose_address): Prevent %fs:(%reg)
++ addresses only when %reg is not in word mode.
++
++2013-11-10 Karlson2k <k2k@narod.ru>
++ Kai Tietz <ktietz@redhat.com>
++
++ Merged from trunk
++ PR plugins/52872
++ * configure.ac: Adding for exported symbols check
++ and for rdynamic-check executable-extension.
++ * configure: Regenerated.
++
++2013-11-07 H.J. Lu <hongjiu.lu@intel.com>
++
++ PR target/59034
++ * config/i386/i386.md (push peepholer/splitter): Use Pmode
++ with stack_pointer_rtx.
++
++2013-11-05 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/t-rtems (MULTILIB_MATCHES): Fix option typos.
++
++2013-10-26 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-10-22 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/58779
++ * config/i386/i386.c (put_condition_code) <case GTU, case LEU>:
++ Remove CCCmode handling.
++ <case LTU>: Return 'c' suffix for CCCmode.
++ <case GEU>: Return 'nc' suffix for CCCmode.
++ (ix86_cc_mode) <case GTU, case LEU>: Do not generate overflow checks.
++ * config/i386/i386.md (*sub<mode>3_cconly_overflow): Remove.
++ (*sub<mode>3_cc_overflow): Ditto.
++ (*subsi3_zext_cc_overflow): Ditto.
++
++2013-10-26 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-10-19 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/58792
++ * config/i386/i386.c (ix86_function_value_regno): Add DX_REG,
++ ST1_REG and XMM1_REG for 32bit and 64bit targets. Also add DI_REG
++ and SI_REG for 64bit SYSV ABI targets.
++
++2013-10-25 Richard Henderson <rth@twiddle.net>
++
++ PR rtl/58542
++ * optabs.c (maybe_emit_atomic_exchange): Use create_input_operand
++ instead of create_convert_operand_to.
++ (maybe_emit_sync_lock_test_and_set): Likewise.
++ (expand_atomic_compare_and_swap): Likewise.
++ (maybe_emit_compare_and_swap_exchange_loop): Don't convert_modes.
++
++2013-10-25 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR rtl-optimization/58831
++ * alias.c (init_alias_analysis): At the beginning of each iteration,
++ set the reg_seen[N] flag if static_reg_base_value[N] is non-null.
++
++2013-10-25 Eric Botcazou <ebotcazou@adacore.com>
++
++ * recog.c (search_ofs): New static variable moved from...
++ (peep2_find_free_register): ...here.
++ (peephole2_optimize): Initialize it.
++
++2013-10-02 John David Anglin <danglin@gcc.gnu.org>
++
++ * config.gcc (hppa*64*-*-linux*): Don't add pa/t-linux to tmake_file.
++
++2013-09-23 Eric Botcazou <ebotcazou@adacore.com>
++
++ * tree-ssa-ccp.c (insert_clobber_before_stack_restore): Recurse on copy
++ assignment statements.
++
++2013-09-20 John David Anglin <danglin@gcc.gnu.org>
++
++ * config/pa/pa.md: In "scc" insn patterns, change output template to
++ handle const0_rtx in reg_or_0_operand operands.
++
++2013-09-18 Daniel Morris <danielm@ecoscentric.com>
++ Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/58458
++ * doc/implement-cxx.texi: Fix references to the C++ standards.
++
++2013-09-14 John David Anglin <danglin@gcc.gnu.org>
++
++ PR target/58382
++ * config/pa/pa.c (pa_expand_prologue): Change mode in gen_rtx_POST_INC
++ calls to word_mode.
++
++2013-09-12 Terry Guo <terry.guo@arm.com>
++
++ Backport from mainline
++ 2012-09-17 Richard Guenther <rguenther@suse.de>
++
++ PR lto/54598
++ * tree-streamer-in.c (unpack_ts_real_cst_value_fields): Use ggc'ed
++ FIXED_VALUE_TYPE instead of struct fixed_value.
++
++2013-09-10 Richard Earnshaw <rearnsha@arm.com>
++
++ PR target/58361
++ * arm/vfp.md (combine_vcvt_f32_<FCVTI32typename>): Fix pattern to
++ support conditional execution.
++ (combine_vcvt_f64_<FCVTI32typename>): Likewise.
++
++2013-09-01 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-08-31 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/alpha/alpha.c (alpha_emit_conditional_move): Update
++ "cmp" RTX before signed_comparison_operator check to account
++ for "code" changes.
++
++2013-09-01 John David Anglin <danglin@gcc.gnu.org>
++
++ * config/pa/pa.md: Allow "const 0" operand 1 in "scc" insns.
++
++2013-09-01 Iain Sandoe <iain@codesourcery.com>
++
++ Backported from 4.8
++ 2012-06-19 Steven Bosscher <steven@gcc.gnu.org>
++
++ * doc/tm.texi.in (TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE,
++ TARGET_OBJC_DECLARE_CLASS_DEFINITION): Add @hooks.
++ (ASM_DECLARE_CLASS_REFERENCE, ASM_DECLARE_UNRESOLVED_REFERENCE):
++ Remove.
++ * doc/tm.texi: Regenerate.
++ * config/darwin.h (ASM_OUTPUT_LABELREF): Remove special case for
++ .objc_class_name_*.
++ * config/darwin-c.c: Include target.h.
++ (darwin_objc_declare_unresolved_class_reference): New function.
++ (darwin_objc_declare_class_definition): New function.
++ (TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE): Define.
++ (TARGET_OBJC_DECLARE_CLASS_DEFINITION): Define.
++
++2013-09-01 Iain Sandoe <iain@codesourcery.com>
++
++ Backport from mainline:
++ 2013-07-22 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/i386.md (nonlocal_goto_receiver): Delete insn if
++ it is not needed after split.
++
++ 2013-07-20 Iain Sandoe <iain@codesourcery.com>
++
++ PR target/51784
++ * config/i386/i386.c (output_set_got) [TARGET_MACHO]: Adjust to emit a
++ second label for nonlocal goto receivers. Don't output pic base labels
++ unless we're producing PIC; mark that action unreachable().
++ (ix86_save_reg): If the function contains a nonlocal label, save the
++ PIC base reg.
++ * config/darwin-protos.h (machopic_should_output_picbase_label): New.
++ * gcc/config/darwin.c (emitted_pic_label_num): New GTY.
++ (update_pic_label_number_if_needed): New.
++ (machopic_output_function_base_name): Adjust for nonlocal receiver
++ case.
++ (machopic_should_output_picbase_label): New.
++ * config/i386/i386.md (enum unspecv): UNSPECV_NLGR: New.
++ (nonlocal_goto_receiver): New insn and split.
++
++2013-08-28 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-08-27 Christian Widmer <shadow@umbrox.de>
++
++ PR target/57927
++ * config/i386/driver-i386.c (host_detect_local_cpu): Add detection
++ of Ivy Bridge processors.
++
++2013-08-21 Richard Earnshaw <rearnsha@arm.com>
++
++ PR target/56979
++ * arm.c (aapcs_vfp_allocate): Decompose the argument if the
++ suggested mode for the assignment isn't compatible with the
++ registers required.
++
++2013-08-17 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-08-12 Perez Read <netfirewall@gmail.com>
++
++ PR target/58132
++ * config/i386/i386.md (*movabs<mode>_1): Add <ptrsize> PTR before
++ operand 0 for intel asm alternative.
++ (*movabs<mode>_2): Ditto for operand 1.
++
++2013-08-13 Marek Polacek <polacek@redhat.com>
++
++ Backport from 4.8:
++ 2013-0813 Marek Polacek <polacek@redhat.com>
++ Jakub Jelinek <jakub@redhat.com>
++
++ PR tree-optimization/57980
++ * tree-tailcall.c (process_assignment): Return false
++ when not dealing with integers or floats.
++
++2013-08-12 David Edelsohn <dje.gcc@gmail.com>
++
++ Backport from mainline
++ 2013-02-14 Steven Bosscher <steven@gcc.gnu.org>
++
++ * collect2-aix.h: Define F_LOADONLY.
++
++2013-08-02 Eric Botcazou <ebotcazou@adacore.com>
++
++ * config/sparc/sparc.c (sparc_emit_membar_for_model) <SMM_TSO>: Add
++ the implied StoreLoad barrier for atomic operations if before.
++
++2013-07-11 Georg-Johann Lay <avr@gjlay.de>
++
++ Backport from 2013-07-11 trunk r200901.
++
++ PR target/57631
++ * config/avr/avr.c (avr_set_current_function): Sanity-check signal
++ name seen by assembler/linker if available.
++
++2013-07-10 Georg-Johann Lay <avr@gjlay.de>
++
++ Backport from 2013-07-10 trunk r200872.
++
++ PR target/57844
++ * config/avr/avr.c (avr_prologue_setup_frame): Trunk -size to mode
++ of my_fp.
++
++2013-07-10 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-07-06 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/sse.md (sse_movlhps): Change alternative 3
++ of operand 2 to "m".
++
++2013-07-09 Joseph Myers <joseph@codesourcery.com>
++
++ * config/rs6000/rs6000.c (rs6000_init_hard_regno_mode_ok): Only
++ adjust register size for TDmode and TFmode for VSX registers.
++
++2013-07-08 Eric Botcazou <ebotcazou@adacore.com>
++
++ * Makefile.in (tree-ssa-reassoc.o): Add dependency on $(PARAMS_H).
++
++2013-07-08 Jakub Jelinek <jakub@redhat.com>
++
++ PR rtl-optimization/57829
++ * simplify-rtx.c (simplify_binary_operation_1) <case IOR>: Ensure that
++ mask bits outside of mode are just sign-extension from mode to HWI.
++
++2013-07-05 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-06-20 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/57655
++ * config/i386/i386.c (construct_container): Report error if
++ long double is used with disabled x87 float returns.
++
++2013-06-21 David Edelsohn <dje.gcc@gmail.com>
++
++ Backport from mainline
++ 2013-06-19 David Edelsohn <dje.gcc@gmail.com>
++
++ PR driver/57652
++ * collect2.c (collect_atexit): New.
++ (collect_exit): Delete.
++ (main): Register collect_atexit with atexit.
++ (collect_wait): Change collect_exit to exit.
++ (do_wait): Same.
++ * collect2.h (collect_exit): Delete.
++ * tlink.c (do_tlink): Rename exit to ret. Change collect_exit to exit.
++
++2013-06-07 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-06-10 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/alpha/alpha.c (alpha_emit_xfloating_compare): Also use
++ cmp_code to construct REG_EQUAL note.
++
++ Backport from mainline
++ 2013-06-05 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/alpha/alpha.c (alpha_emit_conditional_move): Swap all
++ GE, GT, GEU and GTU compares, modulo DImode compares with zero.
++
++ Backport from mainline
++ 2013-05-23 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/57379
++ * config/alpha/alpha.md (unspec): Add UNSPEC_XFLT_COMPARE.
++ * config/alpha/alpha.c (alpha_emit_xfloating_compare): Construct
++ REG_EQUAL note as UNSPEC_XFLT_COMPARE unspec.
++
++2013-06-09 Jakub Jelinek <jakub@redhat.com>
++
++ PR target/57568
++ * config/i386/i386.md (TARGET_READ_MODIFY_WRITE peepholes): Ensure
++ that operands[2] doesn't overlap with operands[0].
++
++2013-05-22 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/57356
++ * config/i386/i386.md (*movti_internal_rex64): Emit movaps/movups
++ for non-sse2 targets. Simplify mode attribute calculation.
++
++2013-05-17 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-05-16 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/driver-i386.c (host_detect_local_cpu): Determine
++ cache parameters using detect_caches_amd also for CYRIX,
++ NSC and TM2 signatures.
++
++ 2013-05-16 Uros Bizjak <ubizjak@gmail.com>
++ Dzianis Kahanovich <mahatma@eu.by>
++
++ PR target/45359
++ PR target/46396
++ * config/i386/driver-i386.c (host_detect_local_cpu): Detect
++ VIA/Centaur processors and determine their cache parameters
++ using detect_caches_amd.
++
++ 2013-05-15 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/i386/i386.c (ix86_option_override_internal): Add
++ PTA_POPCNT to corei7 entry.
++
+2013-05-14 Richard Biener <rguenther@suse.de>
+
+ PR gcov-profile/57269
@@ -388,7 +11600,7 @@ Index: gcc/ChangeLog
+
+2013-05-10 Ralf Corsépius <ralf.corsepius@rtems.org>
+
-+ PR target/57237
++ PR target/57237
+ * config/v850/t-rtems: Add more multilibs.
+
+2013-05-07 Michael Meissner <meissner@linux.vnet.ibm.com>
@@ -517,6 +11729,72 @@ Index: gcc/ChangeLog
2013-04-11 Release Manager
* GCC 4.7.3 released.
+Index: gcc/testsuite/gcc.target/arm/pr54300.C
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/arm/pr54300.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.target/arm/pr54300.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,61 @@
++/* { dg-do run } */
++/* { dg-require-effective-target arm_neon } */
++/* { dg-options "-O2" } */
++/* { dg-add-options arm_neon } */
++
++#include <arm_neon.h>
++#include <stdlib.h>
++
++struct __attribute__ ((aligned(8))) _v16u8_ {
++ uint8x16_t val;
++ _v16u8_( const int16x8_t &src) { val = vreinterpretq_u8_s16(src); }
++ operator int16x8_t () const { return vreinterpretq_s16_u8(val); }
++};
++typedef struct _v16u8_ v16u8;
++
++struct __attribute__ ((aligned(4))) _v8u8_ {
++ uint8x8_t val;
++ _v8u8_( const uint8x8_t &src) { val = src; }
++ operator int16x4_t () const { return vreinterpret_s16_u8(val); }
++};
++typedef struct _v8u8_ v8u8;
++
++typedef v16u8 v8i16;
++typedef int32x4_t v4i32;
++typedef const short cv1i16;
++typedef const unsigned char cv1u8;
++typedef const v8i16 cv8i16;
++
++static inline __attribute__((always_inline)) v8u8 zero_64(){ return vdup_n_u8( 0 ); }
++
++static inline __attribute__((always_inline)) v8i16 loadlo_8i16( cv8i16* p ){
++ return vcombine_s16( vld1_s16( (cv1i16 *)p ), zero_64() );
++}
++static inline __attribute__((always_inline)) v8i16 _loadlo_8i16( cv8i16* p, int offset ){
++ return loadlo_8i16( (cv8i16*)(&((cv1u8*)p)[offset]) );
++}
++
++void __attribute__((noinline))
++test(unsigned short *_Inp, int32_t *_Out,
++ unsigned int s1v, unsigned int dv0,
++ unsigned int smask_v)
++{
++ int32x4_t c = vdupq_n_s32(0);
++
++ for(unsigned int sv=0 ; sv!=dv0 ; sv=(sv+s1v)&smask_v )
++ {
++ int32x4_t s;
++ s = vmovl_s16( vget_low_s16( _loadlo_8i16( (cv8i16*) _Inp, sv ) ) );
++ c = vaddq_s32( c, s );
++ }
++ vst1q_s32( _Out, c );
++}
++
++main()
++{
++ unsigned short a[4] = {1, 2, 3, 4};
++ int32_t b[4] = {0, 0, 0, 0};
++ test(a, b, 1, 1, ~0);
++ if (b[0] != 1 || b[1] != 2 || b[2] != 3 || b[3] != 4)
++ abort();
++}
Index: gcc/testsuite/gcc.target/powerpc/pr57150.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/powerpc/pr57150.c (.../tags/gcc_4_7_3_release)
@@ -545,6 +11823,84 @@ Index: gcc/testsuite/gcc.target/powerpc/pr57150.c
+ for (i = 0; i < n; i++)
+ ptr[i] += modify (value);
+}
+Index: gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.target/powerpc/rs6000-ldouble-3.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,21 @@
++/* Test accuracy of long double division (glibc bug 15396). */
++/* { dg-do run { target powerpc*-*-linux* powerpc*-*-darwin* powerpc*-*-aix* rs6000-*-* } } */
++/* { dg-options "-mlong-double-128" } */
++
++extern void exit (int);
++extern void abort (void);
++
++volatile long double a = 0x1p-1024L;
++volatile long double b = 0x3p-53L;
++volatile long double r;
++volatile long double expected = 0x1.55555555555555555555555555p-973L;
++
++int
++main (void)
++{
++ r = a / b;
++ /* Allow error up to 2ulp. */
++ if (__builtin_fabsl (r - expected) > 0x1p-1073L)
++ abort ();
++ exit (0);
++}
+Index: gcc/testsuite/gcc.target/i386/pr54694.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/pr54694.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.target/i386/pr54694.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,11 @@
++/* { dg-do compile } */
++/* { dg-options "-O" } */
++
++register void *hfp __asm__("%ebp"); /* { dg-message "note: for" } */
++
++extern void g(void *);
++
++void f(int x) /* { dg-error "frame pointer required" } */
++{
++ g(__builtin_alloca(x));
++}
+Index: gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-2.c (.../branches/gcc-4_7-branch)
+@@ -15,7 +15,7 @@
+ avx_test (void)
+ {
+ union256d u;
+- double e [4] __attribute__ ((aligned (8))) = {0.0};
++ double e [4] __attribute__ ((aligned (32))) = {0.0};
+
+ u.x = _mm256_set_pd (39578.467285, 7856.342941, 85632.783567, 47563.234215);
+
+Index: gcc/testsuite/gcc.target/i386/pr9771-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/pr9771-1.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.target/i386/pr9771-1.c (.../branches/gcc-4_7-branch)
+@@ -45,7 +45,17 @@
+ exit(0);
+ }
+
+-int main()
++/* main usually performs dynamic realignment of the stack in case
++ _start would fail to properly align the stack, but for dynamic
++ stack realignment we need frame pointer which is incompatible
++ with -ffixed-ebp and the global register var. So, cheat here
++ and hide from the compiler that main is really main. */
++#define ASMNAME(cname) ASMNAME2 (__USER_LABEL_PREFIX__, cname)
++#define ASMNAME2(prefix, cname) STRING (prefix) cname
++#define STRING(x) #x
++int real_main() __asm (ASMNAME ("main"));
++
++int real_main()
+ {
+ test();
+ return 0;
Index: gcc/testsuite/gcc.target/i386/pr57264.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/i386/pr57264.c (.../tags/gcc_4_7_3_release)
@@ -604,6 +11960,19 @@ Index: gcc/testsuite/gcc.target/i386/pr44578.c
+
+ return 0;
+}
+Index: gcc/testsuite/gcc.target/i386/sse2-movapd-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.target/i386/sse2-movapd-1.c (.../branches/gcc-4_7-branch)
+@@ -25,7 +25,7 @@
+ TEST (void)
+ {
+ union128d u;
+- double e[2] __attribute__ ((aligned (8))) = {2134.3343,1234.635654};
++ double e[2] __attribute__ ((aligned (16))) = {2134.3343,1234.635654};
+
+ u.x = test (e);
+
Index: gcc/testsuite/gcc.target/i386/pr56866.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/i386/pr56866.c (.../tags/gcc_4_7_3_release)
@@ -625,6 +11994,88 @@ Index: gcc/testsuite/gcc.target/i386/pr56866.c
+{
+ xop_test_main ();
+}
+Index: gcc/testsuite/gcc.target/i386/pr59839.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/pr59839.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.target/i386/pr59839.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,12 @@
++/* PR target/59839 */
++/* { dg-do compile } */
++/* { dg-options "-O0 -mavx2" } */
++
++#include <x86intrin.h>
++
++void
++test (const float *x)
++{
++ __m256i i = _mm256_set1_epi32 (1);
++ __m256 d = _mm256_i32gather_ps (x, i, 1);
++}
+Index: gcc/testsuite/gcc.target/i386/xop-frczX.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/xop-frczX.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.target/i386/xop-frczX.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,60 @@
++/* { dg-do run } */
++/* { dg-require-effective-target xop } */
++/* { dg-options "-O2 -mxop" } */
++
++#include "xop-check.h"
++
++#include <x86intrin.h>
++
++void
++check_mm_vmfrcz_sd (__m128d __A, __m128d __B)
++{
++ union128d a, b, c;
++ double d[2];
++
++ a.x = __A;
++ b.x = __B;
++ c.x = _mm_frcz_sd (__A, __B);
++ d[0] = b.a[0] - (int)b.a[0] ;
++ d[1] = a.a[1];
++ if (check_union128d (c, d))
++ abort ();
++}
++
++void
++check_mm_vmfrcz_ss (__m128 __A, __m128 __B)
++{
++ union128 a, b, c;
++ float f[4];
++
++ a.x = __A;
++ b.x = __B;
++ c.x = _mm_frcz_ss (__A, __B);
++ f[0] = b.a[0] - (int)b.a[0] ;
++ f[1] = a.a[1];
++ f[2] = a.a[2];
++ f[3] = a.a[3];
++ if (check_union128 (c, f))
++ abort ();
++}
++
++static void
++xop_test (void)
++{
++ union128 a, b;
++ union128d c,d;
++ int i;
++
++ for (i = 0; i < 4; i++)
++ {
++ a.a[i] = i + 3.5;
++ b.a[i] = i + 7.9;
++ }
++ for (i = 0; i < 2; i++)
++ {
++ c.a[i] = i + 3.5;
++ d.a[i] = i + 7.987654321;
++ }
++ check_mm_vmfrcz_ss (a.x, b.x);
++ check_mm_vmfrcz_sd (c.x, d.x);
++}
Index: gcc/testsuite/gcc.target/i386/pr57098.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/i386/pr57098.c (.../tags/gcc_4_7_3_release)
@@ -640,6 +12091,134 @@ Index: gcc/testsuite/gcc.target/i386/pr57098.c
+{
+ *p = __builtin_shuffle (*p, *mask);
+}
+Index: gcc/testsuite/gcc.target/i386/sse2-movapd-2.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.target/i386/sse2-movapd-2.c (.../branches/gcc-4_7-branch)
+@@ -25,7 +25,7 @@
+ TEST (void)
+ {
+ union128d u;
+- double e[2] __attribute__ ((aligned (8))) = {0.0};
++ double e[2] __attribute__ ((aligned (16))) = {0.0};
+
+ u.x = _mm_set_pd (2134.3343,1234.635654);
+
+Index: gcc/testsuite/gcc.target/i386/pr30315.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/pr30315.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.target/i386/pr30315.c (.../branches/gcc-4_7-branch)
+@@ -1,6 +1,6 @@
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+-/* { dg-final { scan-assembler-times "cmp" 4 } } */
++/* { dg-final { scan-assembler-not "cmp" } } */
+
+ extern void abort (void);
+ int c;
+@@ -34,39 +34,10 @@
+ }
+ #define PLUSCCONLY(T, t) PLUSCCONLY1(T, t, a) PLUSCCONLY1(T, t, b)
+
+-#define MINUSCC(T, t) \
+-T minuscc##t (T a, T b) \
+-{ \
+- T difference = a - b; \
+- if (difference > a) \
+- abort (); \
+- return difference; \
+-}
+-
+-#define DECCC(T, t) \
+-T deccc##t (T a, T b) \
+-{ \
+- T difference = a - b; \
+- if (difference > a) \
+- c --; \
+- return difference; \
+-}
+-
+-#define MINUSCCONLY(T, t) \
+-void minuscconly##t (T a, T b) \
+-{ \
+- T difference = a - b; \
+- if (difference > a) \
+- abort (); \
+-}
+-
+ #define TEST(T, t) \
+ PLUSCC(T, t) \
+ PLUSCCONLY(T, t) \
+- INCCC(T, t) \
+- MINUSCC(T, t) \
+- MINUSCCONLY(T, t) \
+- DECCC(T, t)
++ INCCC(T, t)
+
+ TEST (unsigned long, l)
+ TEST (unsigned int, i)
+@@ -84,14 +55,3 @@
+
+ PLUSCCZEXT(a)
+ PLUSCCZEXT(b)
+-
+-#define MINUSCCZEXT \
+-unsigned long minuscczext (unsigned int a, unsigned int b) \
+-{ \
+- unsigned int difference = a - b; \
+- if (difference > a) \
+- abort (); \
+- return difference; \
+-}
+-
+-MINUSCCZEXT
+Index: gcc/testsuite/gcc.target/i386/pr57655.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/pr57655.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.target/i386/pr57655.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,10 @@
++/* { dg-do compile } */
++/* { dg-options "-mavx -mvzeroupper -mno-fp-ret-in-387" }
++
++/* { dg-error "x87 register return with x87 disabled" "" { target { ! ia32 } } 8 } */
++
++long double
++foo (long double x)
++{
++ return __builtin_ilogbl (x);
++}
+Index: gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.target/i386/avx-vmovapd-256-1.c (.../branches/gcc-4_7-branch)
+@@ -15,7 +15,7 @@
+ avx_test (void)
+ {
+ union256d u;
+- double e [4] __attribute__ ((aligned (8))) = {41124.234,2344.2354,8653.65635,856.43576};
++ double e [4] __attribute__ ((aligned (32))) = {41124.234,2344.2354,8653.65635,856.43576};
+
+ u.x = test (e);
+
+Index: gcc/testsuite/gcc.target/i386/nest-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.target/i386/nest-1.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.target/i386/nest-1.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,14 @@
++/* { dg-do compile { target llp64 } } */
++/* { dg-options "" } */
++
++void foo (int i)
++{
++ void nested (void)
++ {
++ char arr[(1U << 31) + 4U];
++ arr[i] = 0;
++ }
++
++ nested ();
++}
++
Index: gcc/testsuite/gcc.target/sh/pr57108.c
===================================================================
--- a/src/gcc/testsuite/gcc.target/sh/pr57108.c (.../tags/gcc_4_7_3_release)
@@ -664,6 +12243,21 @@ Index: gcc/testsuite/gcc.target/sh/pr57108.c
+
+
+ }
+Index: gcc/testsuite/gfortran.dg/shape_8.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/shape_8.f90 (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gfortran.dg/shape_8.f90 (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,10 @@
++! { dg-do compile }
++!
++! PR 60450: [4.7/4.8 Regression] ICE with SHAPE intrinsic
++!
++! Contributed by Dave Allured <dave.allured@noaa.gov>
++
++ real, allocatable :: x(:,:)
++ allocate (x(3,2), source=99.)
++ print *, shape (x / 10.0)
++end
Index: gcc/testsuite/gfortran.dg/size_kind_3.f90
===================================================================
--- a/src/gcc/testsuite/gfortran.dg/size_kind_3.f90 (.../tags/gcc_4_7_3_release)
@@ -729,6 +12323,224 @@ Index: gcc/testsuite/gfortran.dg/transfer_check_4.f90
+ real(r8_),intent(out) :: val
+ val = transfer(byte_array(1:8),val)
+end subroutine
+Index: gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90 (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gfortran.dg/unresolved_fixup_2.f90 (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,36 @@
++! { dg-do compile }
++!
++! PR fortran/58007
++! Unresolved fiixup while loading a module.
++!
++! This tests that the specification expression A%MAX_DEGREE in module BSR is
++! correctly loaded and resolved in program MAIN.
++!
++! Original testcase from Daniel Shapiro <shapero@uw.edu>
++
++module matrix
++ type :: sparse_matrix
++ integer :: max_degree
++ end type
++end module
++
++module bsr
++ use matrix
++
++ type, extends(sparse_matrix) :: bsr_matrix
++ end type
++
++ integer :: i1
++ integer :: i2
++ integer :: i3
++contains
++ function get_neighbors (A)
++ type(bsr_matrix), intent(in) :: A
++ integer :: get_neighbors(A%max_degree)
++ end function
++end module
++
++program main
++ use matrix
++ use bsr
++end
+Index: gcc/testsuite/gfortran.dg/init_flag_12.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/init_flag_12.f90 (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gfortran.dg/init_flag_12.f90 (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,13 @@
++! { dg-do compile }
++! { dg-options "-fno-automatic -finit-local-zero" }
++!
++! PR 55907: [4.7/4.8/4.9 Regression] ICE with -fno-automatic -finit-local-zero
++!
++! Contributed by J.R. Garcia <garcia.espinosa.jr@gmail.com>
++
++subroutine cchaine (i)
++ implicit none
++ integer :: i
++ character(len=i) :: chaine
++ write(*,*) chaine
++end subroutine
+Index: gcc/testsuite/gfortran.dg/derived_external_function_1.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/derived_external_function_1.f90 (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gfortran.dg/derived_external_function_1.f90 (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,27 @@
++! { dg-do run }
++!
++! PR fortran/58771
++!
++! Contributed by Vittorio Secca <zeccav@gmail.com>
++!
++! ICEd on the write statement with f() because the derived type backend
++! declaration not built.
++!
++module m
++ type t
++ integer(4) g
++ end type
++end
++
++type(t) function f() result(ff)
++ use m
++ ff%g = 42
++end
++
++ use m
++ character (20) :: line1, line2
++ type(t) f
++ write (line1, *) f()
++ write (line2, *) 42_4
++ if (line1 .ne. line2) call abort
++end
+Index: gcc/testsuite/gfortran.dg/round_3.f08
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/round_3.f08 (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gfortran.dg/round_3.f08 (.../branches/gcc-4_7-branch)
+@@ -16,19 +16,44 @@
+ call checkfmt("(RU,1P,G6.0E2)", 2.0, "2.E+00")
+ call checkfmt("(RU,1P,G10.4E2)", 2.3456e5, "2.3456E+05")
+
+- call checkfmt("(RU,F2.0)", 0.09, "1.") ! 0.
++ call checkfmt("(RC,G10.2)", 99.5, " 0.10E+03") ! pr59774
++ call checkfmt("(RC,G10.2)", 995., " 0.10E+04") ! pr59774
++ call checkfmt("(RC,G10.3)", 999.5, " 0.100E+04") ! pr59774
++ call checkfmt("(RC,G10.3)", 9995., " 0.100E+05") ! pr59774
++ call checkfmt("(RU,G10.2)", .099, " 0.10 ") ! pr59774
++ call checkfmt("(RC,G10.1)", .095, " 0.1 ") ! pr59774
++ call checkfmt("(RU,G10.3)", .0999, " 0.100 ") ! pr59774
++ call checkfmt("(RC,G10.2)", .0995, " 0.10 ") ! pr59774
++
++ call checkfmt("(RU,G9.3)", 891.1, " 892.") ! pr59836
++ call checkfmt("(RD,G9.3)", -891.1, "-892.") ! pr59836
++
++ call checkfmt("(RU,F6.4)", 0.00006, "0.0001")! 0.
++ call checkfmt("(RU,F5.3)", 0.0007, "0.001") ! 0.
++ call checkfmt("(RU,F4.2)", 0.008, "0.01") ! 0.
++ call checkfmt("(RU,F3.1)", 0.09, "0.1") ! 0.
++
++ call checkfmt("(RU,F2.0)", 0.09, "1.") ! 0.
+ call checkfmt("(RD,F3.0)", -0.09, "-1.") ! -0.
+- call checkfmt("(RU,F2.0)", 2.0, "2.") ! 3.
+- call checkfmt("(RD,F3.0)", -2.0, "-2.") ! -3.
+- call checkfmt("(RU,F6.4)", 2.0, "2.0000") ! 2.0001
+- call checkfmt("(RD,F7.4)", -2.0, "-2.0000") ! -2.0001
+- call checkfmt("(RU,1P,E6.0E2)", 2.0, "2.E+00") ! 3.E+00
++ call checkfmt("(RU,F2.0)", 0.9, "1.") ! pr59836
++ call checkfmt("(RC,F2.0)", 0.4, "0.") ! pr59836
++ call checkfmt("(RC,F2.0)", 0.5, "1.") ! pr59836
++ call checkfmt("(RC,F2.0)", 0.6, "1.") ! pr59836
++ call checkfmt("(RD,F3.0)", -0.9, "-1.") ! pr59836
++ call checkfmt("(RC,F3.0)", -0.4, "-0.") ! pr59836
++ call checkfmt("(RC,F3.0)", -0.5, "-1.") ! pr59836
++ call checkfmt("(RC,F3.0)", -0.6, "-1.") ! pr59836
++ call checkfmt("(RU,F2.0)", 2.0, "2.") ! 3.
++ call checkfmt("(RD,F3.0)", -2.0, "-2.") ! -3.
++ call checkfmt("(RU,F6.4)", 2.0, "2.0000") ! 2.0001
++ call checkfmt("(RD,F7.4)", -2.0, "-2.0000") ! -2.0001
++ call checkfmt("(RU,1P,E6.0E2)", 2.0, "2.E+00") ! 3.E+00
+ call checkfmt("(RD,1P,E7.0E2)", -2.0, "-2.E+00") ! -3.E+00
+- call checkfmt("(RU,1P,E7.1E2)", 2.5, "2.5E+00") ! 2.6E+00
++ call checkfmt("(RU,1P,E7.1E2)", 2.5, "2.5E+00") ! 2.6E+00
+ call checkfmt("(RD,1P,E8.1E2)", -2.5, "-2.5E+00") ! -2.6E+00
+ call checkfmt("(RU,1P,E10.4E2)", 2.5, "2.5000E+00") ! 2.5001E+00
+ call checkfmt("(RD,1P,E11.4E2)", -2.5, "-2.5000E+00") ! -2.5001E+00
+- call checkfmt("(RU,1P,G6.0E2)", 2.0, "2.E+00") ! 3.E+00
++ call checkfmt("(RU,1P,G6.0E2)", 2.0, "2.E+00") ! 3.E+00
+ call checkfmt("(RD,1P,G7.0E2)", -2.0, "-2.E+00") ! -3.E+00
+ call checkfmt("(RU,1P,G10.4E2)", 2.3456e5, "2.3456E+05") ! 2.3457E+05
+ call checkfmt("(RD,1P,G11.4E2)", -2.3456e5, "-2.3456E+05") ! -2.3457E+05
+Index: gcc/testsuite/gfortran.dg/typebound_proc_26.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/typebound_proc_26.f90 (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gfortran.dg/typebound_proc_26.f90 (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,38 @@
++! { dg-do compile }
++!
++! PR 59941: [4.7 Regression] [OOP] ICE with polymorphic types
++!
++! Contributed by Jürgen Reuter <juergen.reuter@desy.de>
++
++module tao_random_numbers
++ integer, dimension(10), private :: s_buffer
++ integer, private :: s_buffer_end = size (s_buffer)
++end module
++
++
++module beam_structures
++
++ private
++
++ type :: beam_structure_t
++ integer, dimension(:), allocatable :: smatrix
++ contains
++ procedure :: get_smatrix
++ end type
++
++contains
++
++ function get_smatrix (beam_structure) result (matrix)
++ class(beam_structure_t), intent(in) :: beam_structure
++ integer, dimension (size (beam_structure%smatrix)) :: matrix
++ end function
++
++end module
++
++
++program p
++ use tao_random_numbers
++ use beam_structures
++end
++
++! { dg-final { cleanup-modules "tao_random_numbers beam_structures" } }
+Index: gcc/testsuite/gfortran.dg/default_initialization_7.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/default_initialization_7.f90 (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gfortran.dg/default_initialization_7.f90 (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,22 @@
++! { dg-do compile }
++!
++! PR fortran/57033
++! ICE on a structure constructor of an extended derived type whose parent
++! type last component has a default initializer
++!
++! Contributed by Tilo Schwarz <tilo@tilo-schwarz.de>
++
++program ice
++
++type m
++ integer i
++ logical :: f = .false.
++end type m
++
++type, extends(m) :: me
++end type me
++
++type(me) meo
++
++meo = me(1) ! ICE
++end program ice
Index: gcc/testsuite/gfortran.dg/namelist_77.f90
===================================================================
--- a/src/gcc/testsuite/gfortran.dg/namelist_77.f90 (.../tags/gcc_4_7_3_release)
@@ -831,6 +12643,92 @@ Index: gcc/testsuite/gfortran.dg/namelist_79.f90
+ if (.not. tracer(3)%lini) call abort
+
+end program testje
+Index: gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90 (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gfortran.dg/str_comp_optimize_1.f90 (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,22 @@
++! { dg-do compile }
++! { dg-options "-ffrontend-optimize" }
++!
++! PR fortran/60341
++! An unguarded union access was wrongly enabling a frontend optimization on a
++! string comparison, leading to an ICE.
++!
++! Original testcase from Steve Chapel <steve.chapel@a2pg.com>.
++! Reduced by Steven G. Kargl <kargl@gcc.gnu.org>.
++!
++
++ subroutine modelg(ncm)
++ implicit none
++ integer, parameter :: pc = 30, pm = pc - 1
++ integer i
++ character*4 catt(pm,2)
++ integer ncm,iatt(pm,pc)
++ do i=1,ncm
++ if (catt(i,1)//catt(i,2).eq.'central') exit
++ end do
++ iatt(i,4)=1
++ end
+Index: gcc/testsuite/gfortran.dg/dot_product_2.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/dot_product_2.f90 (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gfortran.dg/dot_product_2.f90 (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,38 @@
++! { dg-do compile }
++! { dg-options "-fdump-tree-original" }
++!
++! PR fortran/57785
++!
++! Contributed by Kontantinos Anagnostopoulos
++!
++! The implicit complex conjugate was missing for DOT_PRODUCT
++
++
++! For the following, the compile-time simplification fails for SUM;
++! see PR fortran/56342. Hence, a manually expanded SUM is used.
++
++!if (DOT_PRODUCT ((/ (1.0, 2.0), (2.0, 3.0) /), (/ (1.0, 1.0), (1.0, 4.0) /)) &
++! /= SUM (CONJG ((/ (1.0, 2.0), (2.0, 3.0) /))*(/ (1.0, 1.0), (1.0, 4.0) /))) &
++! call abort ()
++!
++!if (ANY (MATMUL ((/ (1.0, 2.0), (2.0, 3.0) /), &
++! RESHAPE ((/ (1.0, 1.0), (1.0, 4.0) /),(/2, 1/))) /= &
++! SUM ((/ (1.0, 2.0), (2.0, 3.0) /)*(/ (1.0, 1.0), (1.0, 4.0) /)))) &
++! call abort ()
++
++
++if (DOT_PRODUCT ((/ (1.0, 2.0), (2.0, 3.0) /), (/ (1.0, 1.0), (1.0, 4.0) /)) &
++ /= CONJG (cmplx(1.0, 2.0)) * cmplx(1.0, 1.0) &
++ + CONJG (cmplx(2.0, 3.0)) * cmplx(1.0, 4.0)) &
++ call abort ()
++
++if (ANY (MATMUL ((/ (1.0, 2.0), (2.0, 3.0) /), &
++ RESHAPE ((/ (1.0, 1.0), (1.0, 4.0) /),(/2, 1/))) &
++ /= cmplx(1.0, 2.0) * cmplx(1.0, 1.0) &
++ + cmplx(2.0, 3.0) * cmplx(1.0, 4.0))) &
++ call abort ()
++end
++
++
++! { dg-final { scan-tree-dump-not "abort" "original" } }
++! { dg-final { cleanup-tree-dump "original" } }
+Index: gcc/testsuite/gfortran.dg/list_read_12.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/list_read_12.f90 (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gfortran.dg/list_read_12.f90 (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,11 @@
++! { dg-do run }
++! PR58324 Bogus end of file condition
++integer :: i, ios
++open(99, access='stream', form='unformatted')
++write(99) "5 a"
++close(99)
++
++open(99, access='sequential', form='formatted')
++read(99, *, iostat=ios) i
++if (ios /= 0) call abort
++end
Index: gcc/testsuite/gfortran.dg/size_kind_2.f90
===================================================================
--- a/src/gcc/testsuite/gfortran.dg/size_kind_2.f90 (.../tags/gcc_4_7_3_release)
@@ -853,6 +12751,114 @@ Index: gcc/testsuite/gfortran.dg/size_kind_2.f90
+! { dg-final { scan-tree-dump "var2 = 4294967300;" "original" } }
+! { dg-final { scan-tree-dump "var3 = 2147483650;" "original" } }
+! { dg-final { cleanup-tree-dump "original" } }
+Index: gcc/testsuite/gfortran.dg/do_5.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/do_5.f90 (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gfortran.dg/do_5.f90 (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,29 @@
++! { dg-do compile }
++!
++! PR fortran/54370
++!
++! The following program was ICEing at tree-check time
++! "L()" was regarded as default-kind logical.
++!
++! Contributed by Kirill Chilikin
++!
++ MODULE M
++ CONTAINS
++
++ LOGICAL(C_BOOL) FUNCTION L() BIND(C)
++ USE, INTRINSIC :: ISO_C_BINDING
++ L = .FALSE.
++ END FUNCTION
++
++ LOGICAL(8) FUNCTION L2() BIND(C) ! { dg-warning "may not be a C interoperable kind but it is bind" }
++ L2 = .FALSE._8
++ END FUNCTION
++
++ SUBROUTINE S()
++ DO WHILE (L())
++ ENDDO
++ DO WHILE (L2())
++ ENDDO
++ END
++
++ END
+Index: gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90 (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gfortran.dg/unresolved_fixup_1.f90 (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,44 @@
++! { dg-do compile }
++!
++! PR fortran/58007
++! Unresolved fixup while loading a module.
++!
++! This tests that the specification expression A%MAX_DEGREE in module BSR is
++! correctly loaded and resolved in program MAIN.
++!
++! Original testcase from Daniel Shapiro <shapero@uw.edu>
++! Reduced by Tobias Burnus <burnus@net-b.de> and Janus Weil <janus@gcc.gnu.org>
++
++module matrix
++ type :: sparse_matrix
++ integer :: max_degree
++ end type
++contains
++ subroutine init_interface (A)
++ class(sparse_matrix), intent(in) :: A
++ end subroutine
++ real function get_value_interface()
++ end function
++end module
++
++module ellpack
++ use matrix
++end module
++
++module bsr
++ use matrix
++ type, extends(sparse_matrix) :: bsr_matrix
++ contains
++ procedure :: get_neighbors
++ end type
++contains
++ function get_neighbors (A)
++ class(bsr_matrix), intent(in) :: A
++ integer :: get_neighbors(A%max_degree)
++ end function
++end module
++
++program main
++ use ellpack
++ use bsr
++end
+Index: gcc/testsuite/gfortran.dg/transfer_intrinsic_6.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/transfer_intrinsic_6.f90 (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gfortran.dg/transfer_intrinsic_6.f90 (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,20 @@
++! { dg-do compile }
++! { dg-options "-fdump-tree-original" }
++!
++! PR 58058: [4.7/4.8/4.9 Regression] Memory leak with transfer function
++!
++! Contributed by Thomas Jourdan <thomas.jourdan@orange.fr>
++
++ implicit none
++
++ integer, dimension(3) :: t1
++ character(len=64) :: str
++
++ t1 = (/1,2,3/)
++
++ str = transfer(t1,str)
++
++end
++
++! { dg-final { scan-tree-dump-times "__builtin_free" 1 "original" } }
++! { dg-final { cleanup-tree-dump "original" } }
Index: gcc/testsuite/gfortran.dg/proc_ptr_41.f90
===================================================================
--- a/src/gcc/testsuite/gfortran.dg/proc_ptr_41.f90 (.../tags/gcc_4_7_3_release)
@@ -943,6 +12949,66 @@ Index: gcc/testsuite/gfortran.dg/namelist_81.f90
+call abort()
+ 60 close(99)
+end
+Index: gcc/testsuite/gfortran.dg/extends_15.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/extends_15.f90 (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gfortran.dg/extends_15.f90 (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,16 @@
++! { dg-do compile }
++!
++! PR 58355: [4.7/4.8/4.9 Regression] [F03] ICE with TYPE, EXTENDS before parent TYPE defined
++!
++! Contributed by Andrew Benson <abensonca@gmail.com>
++
++module ct
++ public :: t1
++
++ type, extends(t1) :: t2 ! { dg-error "has not been previously defined" }
++
++ type :: t1
++ end type
++end
++
++! { dg-final { cleanup-modules "ct" } }
+Index: gcc/testsuite/gfortran.dg/typebound_override_4.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/typebound_override_4.f90 (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gfortran.dg/typebound_override_4.f90 (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,34 @@
++! { dg-do compile }
++!
++! PR 57217: [4.7/4.8/4.9 Regression][OOP] Accepts invalid TBP overriding - lacking arguments check
++!
++! Contributed by Salvatore Filippone <filippone.salvatore@gmail.com>
++
++module base_mod
++ implicit none
++ type base_type
++ contains
++ procedure, pass(map) :: clone => base_clone
++ end type
++contains
++ subroutine base_clone(map,mapout)
++ class(base_type) :: map
++ class(base_type) :: mapout
++ end subroutine
++end module
++
++module r_mod
++ use base_mod
++ implicit none
++ type, extends(base_type) :: r_type
++ contains
++ procedure, pass(map) :: clone => r_clone ! { dg-error "Type/rank mismatch in argument" }
++ end type
++contains
++ subroutine r_clone(map,mapout)
++ class(r_type) :: map
++ class(r_type) :: mapout
++ end subroutine
++end module
++
++! { dg-final { cleanup-modules "base_mod r_mod" } }
Index: gcc/testsuite/gfortran.dg/namelist_78.f90
===================================================================
--- a/src/gcc/testsuite/gfortran.dg/namelist_78.f90 (.../tags/gcc_4_7_3_release)
@@ -982,6 +13048,220 @@ Index: gcc/testsuite/gfortran.dg/namelist_78.f90
+ if (der%d(1)%k%j /= 1) call abort
+ if (der%d(2)%k%j /= 2) call abort
+end program namelist
+Index: gcc/testsuite/gfortran.dg/ichar_3.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/ichar_3.f90 (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gfortran.dg/ichar_3.f90 (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,13 @@
++! { dg-do compile }
++!
++! PR fortran/59599
++! The call to ichar was triggering an ICE.
++!
++! Original testcase from Fran Martinez Fadrique <fmartinez@gmv.com>
++
++character(1) cpk(2)
++integer res(2)
++cpk = 'a'
++res = ichar( cpk, kind=1 )
++print *, ichar( cpk, kind=1 )
++end
+Index: gcc/testsuite/gfortran.dg/fmt_g_1.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/fmt_g_1.f90 (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gfortran.dg/fmt_g_1.f90 (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,11 @@
++! { dg-do run }
++! PR59771 Cleanup handling of Gw.0 and Gw.0Ee format
++! Test case prepared by Dominique d'Humieres <dominiq@lps.ens.fr>
++ PROGRAM FOO
++ character(len=60) :: buffer, buffer1
++
++ write (buffer ,'(6(1X,1PG9.0e2))') 0.0, 0.04, 0.06, 0.4, 0.6, 243.0
++ write (buffer1,'(6(1X,1PE9.0e2))') 0.0, 0.04, 0.06, 0.4, 0.6, 243.0
++
++ if (buffer /= buffer1) call abort
++ end
+Index: gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90 (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gfortran.dg/elemental_subroutine_9.f90 (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,39 @@
++! { dg-do run }
++!
++! PR fortran/59906
++!
++! Contributed by H Anlauf <anlauf@gmx.de>
++!
++! Failed generate character scalar for scalarized loop for elemantal call.
++!
++program x
++ implicit none
++ call y('bbb')
++contains
++
++ subroutine y(str)
++ character(len=*), intent(in) :: str
++ character(len=len_trim(str)) :: str_aux
++ character(len=3) :: str3 = 'abc'
++
++ str_aux = str
++
++ ! Compiled but did not give correct result
++ if (any (str_cmp((/'aaa','bbb'/), str) .neqv. [.FALSE.,.TRUE.])) call abort
++
++ ! Did not compile
++ if (any (str_cmp((/'bbb', 'aaa'/), str_aux) .neqv. [.TRUE.,.FALSE.])) call abort
++
++ ! Verify patch
++ if (any (str_cmp((/'bbb', 'aaa'/), str3) .neqv. [.FALSE.,.FALSE.])) call abort
++ if (any (str_cmp((/'bbb', 'aaa'/), 'aaa') .neqv. [.FALSE.,.TRUE.])) call abort
++
++ end subroutine y
++
++ elemental logical function str_cmp(str1, str2)
++ character(len=*), intent(in) :: str1
++ character(len=*), intent(in) :: str2
++ str_cmp = (str1 == str2)
++ end function str_cmp
++
++end program x
+Index: gcc/testsuite/gcc.c-torture/execute/pr60017.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/execute/pr60017.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr60017.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,33 @@
++/* PR target/60017 */
++
++extern void abort (void);
++
++struct S0
++{
++ short m0;
++ short m1;
++};
++
++struct S1
++{
++ unsigned m0:1;
++ char m1[2][2];
++ struct S0 m2[2];
++};
++
++struct S1 x = { 1, {{2, 3}, {4, 5}}, {{6, 7}, {8, 9}} };
++
++struct S1 func (void)
++{
++ return x;
++}
++
++int main (void)
++{
++ struct S1 ret = func ();
++
++ if (ret.m2[1].m1 != 9)
++ abort ();
++
++ return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/pr57829.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/execute/pr57829.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr57829.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,31 @@
++/* PR rtl-optimization/57829 */
++
++__attribute__((noinline, noclone))
++int
++f1 (int k)
++{
++ return 2 | ((k - 1) >> ((int) sizeof (int) * __CHAR_BIT__ - 1));
++}
++
++__attribute__((noinline, noclone))
++long int
++f2 (long int k)
++{
++ return 2L | ((k - 1L) >> ((int) sizeof (long int) * __CHAR_BIT__ - 1));
++}
++
++__attribute__((noinline, noclone))
++int
++f3 (int k)
++{
++ k &= 63;
++ return 4 | ((k + 2) >> 5);
++}
++
++int
++main ()
++{
++ if (f1 (1) != 2 || f2 (1L) != 2L || f3 (63) != 6 || f3 (1) != 4)
++ __builtin_abort ();
++ return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/pr58831.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/execute/pr58831.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr58831.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,40 @@
++#include <assert.h>
++
++int a, *b, c, d, f, **i, p, q, *r;
++short o, j;
++
++static int __attribute__((noinline, noclone))
++fn1 (int *p1, int **p2)
++{
++ int **e = &b;
++ for (; p; p++)
++ *p1 = 1;
++ *e = *p2 = &d;
++
++ assert (r);
++
++ return c;
++}
++
++static int ** __attribute__((noinline, noclone))
++fn2 (void)
++{
++ for (f = 0; f != 42; f++)
++ {
++ int *g[3] = {0, 0, 0};
++ for (o = 0; o; o--)
++ for (; a > 1;)
++ {
++ int **h[1] = { &g[2] };
++ }
++ }
++ return &r;
++}
++
++int
++main (void)
++{
++ i = fn2 ();
++ fn1 (b, i);
++ return 0;
++}
+Index: gcc/testsuite/gcc.c-torture/execute/pr57568.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.c-torture/execute/pr57568.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.c-torture/execute/pr57568.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,12 @@
++/* PR target/57568 */
++
++extern void abort (void);
++int a[6][9] = { }, b = 1, *c = &a[3][5];
++
++int
++main ()
++{
++ if (b && (*c = *c + *c))
++ abort ();
++ return 0;
++}
Index: gcc/testsuite/gcc.c-torture/execute/pr56866.c
===================================================================
--- a/src/gcc/testsuite/gcc.c-torture/execute/pr56866.c (.../tags/gcc_4_7_3_release)
@@ -1032,6 +13312,226 @@ Index: gcc/testsuite/gcc.c-torture/execute/pr56866.c
+#endif
+ return 0;
+}
+Index: gcc/testsuite/gnat.dg/opt28.adb
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/opt28.adb (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gnat.dg/opt28.adb (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,31 @@
++with Opt28_Pkg; use Opt28_Pkg;
++
++package body Opt28 is
++
++ function Full_Filename (Filename : String) return String is
++ Path : constant String := "PATH";
++ Posix_Path : constant Posix_String := To_Posix (Path);
++ begin
++
++ declare
++ M : constant Posix_String := Value_Of (Posix_Path);
++ N : constant Posix_String (1 .. M'Length) := M;
++ Var : constant String := To_String (Str => N);
++ Start_Pos : Natural := 1;
++ End_Pos : Natural := 1;
++ begin
++ while Start_Pos <= Var'Length loop
++ End_Pos := Position (Var (Start_Pos .. Var'Length));
++
++ if Is_File (To_Posix (Var (Start_Pos .. End_Pos - 1) & Filename)) then
++ return Var (Start_Pos .. End_Pos - 1) & Filename;
++ else
++ Start_Pos := End_Pos + 1;
++ end if;
++ end loop;
++ end;
++
++ return "";
++ end;
++
++end Opt28;
+Index: gcc/testsuite/gnat.dg/opt28.ads
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/opt28.ads (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gnat.dg/opt28.ads (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,8 @@
++-- { dg-do compile }
++-- { dg-options "-O2" }
++
++package Opt28 is
++
++ function Full_Filename (Filename : String) return String;
++
++end Opt28;
+Index: gcc/testsuite/gnat.dg/loop_optimization16_pkg.adb
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/loop_optimization16_pkg.adb (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gnat.dg/loop_optimization16_pkg.adb (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,8 @@
++package body Loop_Optimization16_Pkg is
++
++ function F return Natural is
++ begin
++ return Natural (Index_Base'Last);
++ end;
++
++end Loop_Optimization16_Pkg;
+Index: gcc/testsuite/gnat.dg/loop_optimization16_pkg.ads
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/loop_optimization16_pkg.ads (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gnat.dg/loop_optimization16_pkg.ads (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,7 @@
++package Loop_Optimization16_Pkg is
++
++ type Index_Base is range 0 .. 127;
++
++ function F return Natural;
++
++end Loop_Optimization16_Pkg;
+Index: gcc/testsuite/gnat.dg/in_out_parameter4.adb
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/in_out_parameter4.adb (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gnat.dg/in_out_parameter4.adb (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,30 @@
++-- { dg-do run }
++-- { dg-options "-gnat12 -gnatVa" }
++
++procedure In_Out_Parameter4 is
++
++ type Enum is (E_Undetermined, E_Down, E_Up);
++ subtype Status_T is Enum range E_Down .. E_Up;
++
++ function Recurse (Val : in out Integer) return Status_T is
++
++ Result : Status_T;
++
++ procedure Dummy (I : in out Integer) is begin null; end;
++
++ begin
++ if Val > 500 then
++ Val := Val - 1;
++ Result := Recurse (Val);
++ return Result;
++ else
++ return E_UP;
++ end if;
++ end;
++
++ Val : Integer := 501;
++ S : Status_T;
++
++begin
++ S := Recurse (Val);
++end;
+Index: gcc/testsuite/gnat.dg/opt32.adb
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/opt32.adb (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gnat.dg/opt32.adb (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,37 @@
++-- { dg-do compile }
++-- { dg-options "-O2" }
++
++with Ada.Containers; use Ada.Containers;
++with Ada.Containers.Vectors;
++
++function Opt32 return Natural is
++
++ package My_Vectors
++ is new Vectors (Index_Type => Natural, Element_Type => Integer);
++ use My_Vectors;
++
++ V : Vector;
++
++ function Sign_Changes return Natural is
++ Cur : Cursor := To_Cursor (V, 0);
++ R : Natural := 0;
++ Negative : Boolean;
++ begin
++ Negative := Element (Cur) < 0;
++
++ loop
++ Cur := Next (Cur);
++ exit when R > 100;
++
++ if (Element (Cur) < 0) /= Negative then
++ Negative := not Negative;
++ R := R + 1;
++ end if;
++ end loop;
++
++ return R;
++ end;
++
++begin
++ return Sign_Changes;
++end;
+Index: gcc/testsuite/gnat.dg/opt28_pkg.ads
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/opt28_pkg.ads (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gnat.dg/opt28_pkg.ads (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,11 @@
++package Opt28_Pkg is
++
++ type Posix_String is array (Positive range <>) of aliased Character;
++
++ function To_Posix (Str : String) return Posix_String;
++ function To_String (Str : Posix_String) return String;
++ function Is_File (Str : Posix_String) return Boolean;
++ function Value_Of (Name : Posix_String) return Posix_String;
++ function Position (In_Line : String) return Natural;
++
++end Opt28_Pkg;
+Index: gcc/testsuite/gnat.dg/loop_optimization16.adb
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/loop_optimization16.adb (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gnat.dg/loop_optimization16.adb (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,24 @@
++-- { dg-do run }
++
++with Loop_Optimization16_Pkg; use Loop_Optimization16_Pkg;
++
++procedure Loop_Optimization16 is
++
++ Counter : Natural := 0;
++
++ C : constant Natural := F;
++
++ subtype Index_T is Index_Base range 1 .. Index_Base (C);
++
++begin
++
++ for I in Index_T'First .. Index_T'Last loop
++ Counter := Counter + 1;
++ exit when Counter > 200;
++ end loop;
++
++ if Counter > 200 then
++ raise Program_Error;
++ end if;
++
++end Loop_Optimization16;
+Index: gcc/testsuite/gnat.dg/specs/last_bit.ads
+===================================================================
+--- a/src/gcc/testsuite/gnat.dg/specs/last_bit.ads (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gnat.dg/specs/last_bit.ads (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,19 @@
++-- { dg-do compile }
++
++package Last_Bit is
++
++ Max_Components : constant := 100;
++ type Count_Type is new Natural range 0 .. Max_Components;
++ subtype Index_Type is Count_Type range 1 .. Count_Type'Last;
++
++ type List_Type is array (Index_Type range <>) of Integer;
++
++ type Record_Type (Count : Count_Type := 0) is record
++ List : List_Type (1 .. Count);
++ end record;
++
++ Null_Record : Record_Type (Count => 0);
++
++ List_Last_Bit : Integer := Null_Record.List'Last_Bit;
++
++end Last_Bit;
Index: gcc/testsuite/gcc.dg/pr56890-2.c
===================================================================
--- a/src/gcc/testsuite/gcc.dg/pr56890-2.c (.../tags/gcc_4_7_3_release)
@@ -1056,6 +13556,70 @@ Index: gcc/testsuite/gcc.dg/pr56890-2.c
+ }
+ return number;
+}
+Index: gcc/testsuite/gcc.dg/20050922-1.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/20050922-1.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.dg/20050922-1.c (.../branches/gcc-4_7-branch)
+@@ -4,7 +4,7 @@
+ /* { dg-do run } */
+ /* { dg-options "-O1 -std=c99" } */
+
+-#include <stdlib.h>
++extern void abort (void);
+
+ #if __INT_MAX__ == 2147483647
+ typedef unsigned int uint32_t;
+Index: gcc/testsuite/gcc.dg/atomic-store-6.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/atomic-store-6.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.dg/atomic-store-6.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,13 @@
++/* { dg-do run } */
++/* { dg-require-effective-target sync_int_128_runtime } */
++/* { dg-options "-mcx16" { target { i?86-*-* x86_64-*-* } } } */
++
++__int128_t i;
++
++int main()
++{
++ __atomic_store_16(&i, -1, 0);
++ if (i != -1)
++ __builtin_abort();
++ return 0;
++}
+Index: gcc/testsuite/gcc.dg/pr59827.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/pr59827.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.dg/pr59827.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,15 @@
++/* PR middle-end/59827 */
++/* { dg-do compile } */
++
++int
++foo (int p[2][]) /* { dg-error "array type has incomplete element type" } */
++{
++ return p[0][0];
++}
++
++void
++bar (void)
++{
++ int p[2][1];
++ foo (p); /* { dg-error "type of formal parameter 1 is incomplete" } */
++}
+Index: gcc/testsuite/gcc.dg/pr59351.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/pr59351.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.dg/pr59351.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,8 @@
++/* { dg-do compile } */
++/* { dg-options "-std=c99 -pedantic" } */
++
++unsigned int
++foo (void)
++{
++ return sizeof ((int[]) {}); /* { dg-warning "ISO C forbids empty initializer braces" } */
++}
Index: gcc/testsuite/gcc.dg/pr48189.c
===================================================================
--- a/src/gcc/testsuite/gcc.dg/pr48189.c (.../tags/gcc_4_7_3_release)
@@ -1074,6 +13638,82 @@ Index: gcc/testsuite/gcc.dg/pr48189.c
+ for (i = 0; y[i].s[i]; i++)
+ *x++ = y[i].s[i];
+}
+Index: gcc/testsuite/gcc.dg/20050922-2.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/20050922-2.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.dg/20050922-2.c (.../branches/gcc-4_7-branch)
+@@ -4,7 +4,8 @@
+ /* { dg-do run } */
+ /* { dg-options "-O1 -std=c99" } */
+
+-#include <stdlib.h>
++extern void abort (void);
++extern void exit (int);
+
+ #if __INT_MAX__ == 2147483647
+ typedef unsigned int uint32_t;
+Index: gcc/testsuite/gcc.dg/pr57980.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/pr57980.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.dg/pr57980.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,19 @@
++/* PR tree-optimization/57980 */
++/* { dg-do compile } */
++/* { dg-options "-O -foptimize-sibling-calls -w" } */
++
++typedef int V __attribute__ ((vector_size (2 * sizeof (int))));
++extern V f (void);
++
++V
++bar (void)
++{
++ return -f ();
++}
++
++V
++foo (void)
++{
++ V v = { };
++ return v - f ();
++}
+Index: gcc/testsuite/gcc.dg/torture/pr57303.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/torture/pr57303.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.dg/torture/pr57303.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,33 @@
++/* { dg-do run } */
++
++void abort (void);
++
++struct S0
++{
++ int f0;
++};
++struct S1
++{
++ struct S0 f0;
++};
++
++struct S1 x = { {0} };
++struct S1 y = { {1} };
++
++static void
++foo (struct S0 p)
++{
++ struct S0 *l = &y.f0;
++ *l = x.f0;
++ if (p.f0)
++ *l = *l;
++}
++
++int
++main ()
++{
++ foo(y.f0);
++ if (y.f0.f0 != 0)
++ abort ();
++ return 0;
++}
Index: gcc/testsuite/gcc.dg/torture/builtin-logb-1.c
===================================================================
--- a/src/gcc/testsuite/gcc.dg/torture/builtin-logb-1.c (.../tags/gcc_4_7_3_release)
@@ -1135,6 +13775,169 @@ Index: gcc/testsuite/gcc.dg/torture/builtin-logb-1.c
}
int main()
+Index: gcc/testsuite/gcc.dg/torture/pr57656.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/torture/pr57656.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.dg/torture/pr57656.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,13 @@
++/* { dg-do run } */
++/* { dg-options "-fstrict-overflow" } */
++
++int main (void)
++{
++ int a = -1;
++ int b = __INT_MAX__;
++ int c = 2;
++ int t = 1 - ((a - b) / c); // t = 1 - ( __INT_MIN__ / 2 )
++ if (t != (1 - (-1 - __INT_MAX__) / 2))
++ __builtin_abort();
++ return 0;
++}
+Index: gcc/testsuite/gcc.dg/torture/pr60183.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/torture/pr60183.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.dg/torture/pr60183.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,39 @@
++/* { dg-do run } */
++/* { dg-require-effective-target size32plus } */
++
++/* Large so an out-of-bound read will crash. */
++unsigned char c[0x30001] = { 1 };
++int j = 2;
++
++static void
++foo (unsigned long *x, unsigned char *y)
++{
++ int i;
++ unsigned long w = x[0];
++ for (i = 0; i < j; i++)
++ {
++ w += *y;
++ y += 0x10000;
++ w += *y;
++ y += 0x10000;
++ }
++ x[1] = w;
++}
++
++__attribute__ ((noinline, noclone)) void
++bar (unsigned long *x)
++{
++ foo (x, c);
++}
++
++int
++main ()
++{
++ unsigned long a[2] = { 0, -1UL };
++ asm volatile (""::"r" (c):"memory");
++ c[0] = 0;
++ bar (a);
++ if (a[1] != 0)
++ __builtin_abort ();
++ return 0;
++}
+Index: gcc/testsuite/gcc.dg/torture/pr57517.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/torture/pr57517.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.dg/torture/pr57517.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,16 @@
++/* { dg-do compile } */
++
++int x[1024], y[1024], z[1024], w[1024];
++void foo (void)
++{
++ int i;
++ for (i = 1; i < 1024; ++i)
++ {
++ int a = x[i];
++ int b = y[i];
++ int c = x[i-1];
++ int d = y[i-1];
++ if (w[i])
++ z[i] = (a + b) + (c + d);
++ }
++}
+Index: gcc/testsuite/gcc.dg/torture/pr58941.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/torture/pr58941.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.dg/torture/pr58941.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,33 @@
++/* { dg-do run } */
++
++extern void abort (void);
++
++typedef struct {
++ int msgLength;
++ unsigned char data[1000];
++} SMsg;
++
++typedef struct {
++ int dummy;
++ int d[0];
++} SData;
++
++int condition = 3;
++
++int main()
++{
++ SMsg msg;
++ SData *pData = (SData*)(msg.data);
++ unsigned int i = 0;
++ for (i = 0; i < 1; i++)
++ {
++ pData->d[i] = 0;
++ if(condition & 1)
++ pData->d[i] |= 0x55;
++ if(condition & 2)
++ pData->d[i] |= 0xaa;
++ }
++ if (pData->d[0] != 0xff)
++ abort ();
++ return 0;
++}
+Index: gcc/testsuite/gcc.dg/torture/pr58779.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/torture/pr58779.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.dg/torture/pr58779.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,12 @@
++/* { dg-do run } */
++
++int a, c;
++
++int main ()
++{
++ int e = -1;
++ short d = (c <= 0) ^ e;
++ if ((unsigned int) a - (a || d) <= (unsigned int) a)
++ __builtin_abort ();
++ return 0;
++}
+Index: gcc/testsuite/gcc.dg/torture/pr59139.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/torture/pr59139.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.dg/torture/pr59139.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,20 @@
++/* { dg-do compile } */
++
++int a, b, c, d, e;
++int fn1(p1, p2) { return p2 == 0 ? p1 : 1 % p2; }
++
++void fn2()
++{
++ c = 0;
++ for (;; c = (unsigned short)c)
++ {
++ b = 2;
++ for (; b; b = a)
++ {
++ e = fn1(2, c && 1);
++ d = c == 0 ? e : c;
++ if (d)
++ return;
++ }
++ }
++}
Index: gcc/testsuite/gcc.dg/torture/pr53922.c
===================================================================
--- a/src/gcc/testsuite/gcc.dg/torture/pr53922.c (.../tags/gcc_4_7_3_release)
@@ -1148,6 +13951,62 @@ Index: gcc/testsuite/gcc.dg/torture/pr53922.c
int x(int a)
{
+Index: gcc/testsuite/gcc.dg/torture/pr57521.c
+===================================================================
+--- a/src/gcc/testsuite/gcc.dg/torture/pr57521.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gcc.dg/torture/pr57521.c (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,51 @@
++/* { dg-do run } */
++/* { dg-options "-ftree-loop-if-convert" } */
++
++void abort (void);
++
++int a, b, c, d, o = 1, p;
++short e;
++
++int
++fn1 (int * p1)
++{
++ int f, g, h, j = 0, k = 0, l = 0;
++ unsigned int i;
++ int *m[1] = { &l };
++ for (; b >= 0; b--)
++ {
++ if (*p1)
++ if (j >= 0)
++ {
++ int n = 1;
++ e = 1;
++ h = a ? a : 1 % n;
++ g = h > 0 ? 0 : h + 1;
++ k = c + g;
++ }
++ else
++ continue;
++ else
++ {
++
++ f = d > 0 ? 0 : d + 1;
++ i = f;
++ j = 1 + i;
++ }
++ l++;
++ }
++ return k;
++}
++
++int
++main ()
++{
++ for (;; p++)
++ {
++ fn1 (&o);
++ break;
++ }
++ if (e != 1)
++ abort ();
++ return 0;
++}
Index: gcc/testsuite/gcc.dg/pr56890-1.c
===================================================================
--- a/src/gcc/testsuite/gcc.dg/pr56890-1.c (.../tags/gcc_4_7_3_release)
@@ -1172,7 +14031,376 @@ Index: gcc/testsuite/ChangeLog
===================================================================
--- a/src/gcc/testsuite/ChangeLog (.../tags/gcc_4_7_3_release)
+++ b/src/gcc/testsuite/ChangeLog (.../branches/gcc-4_7-branch)
-@@ -1,3 +1,110 @@
+@@ -1,3 +1,479 @@
++2014-03-18 Richard Biener <rguenther@suse.de>
++
++ Backport from mainline
++ 2013-11-05 Richard Biener <rguenther@suse.de>
++
++ PR middle-end/58941
++ * gcc.dg/torture/pr58941.c: New testcase.
++
++2014-03-18 Richard Biener <rguenther@suse.de>
++
++ Backport from mainline
++ 2013-08-27 Richard Biener <rguenther@suse.de>
++
++ PR tree-optimization/57521
++ * gcc.dg/torture/pr57521.c: New testcase.
++
++ 2013-09-03 Richard Biener <rguenther@suse.de>
++
++ PR middle-end/57656
++ * gcc.dg/torture/pr57656.c: New testcase.
++
++ 2013-11-19 Richard Biener <rguenther@suse.de>
++
++ PR tree-optimization/57517
++ * gfortran.fortran-torture/compile/pr57517.f90: New testcase.
++ * gcc.dg/torture/pr57517.c: Likewise.
++
++2014-03-17 Richard Biener <rguenther@suse.de>
++
++ Backport from mainline
++ 2013-05-21 Richard Biener <rguenther@suse.de>
++
++ PR tree-optimization/57303
++ * gcc.dg/torture/pr57303.c: New testcase.
++
++ 2013-12-02 Richard Biener <rguenther@suse.de>
++
++ PR tree-optimization/59139
++ * gcc.dg/torture/pr59139.c: New testcase.
++
++ 2014-02-14 Richard Biener <rguenther@suse.de>
++
++ PR tree-optimization/60183
++ * gcc.dg/torture/pr60183.c: New testcase.
++
++2014-03-15 Jerry DeLisle <jvdelisle@gcc.gnu>
++
++ Backport from mainline
++ PR libfortran/58324
++ * gfortran.dg/list_read_12.f90: New test.
++
++2014-03-09 Janus Weil <janus@gcc.gnu.org>
++
++ Backport from 4.8
++ 2014-03-08 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/60450
++ * gfortran.dg/shape_8.f90: New.
++
++2014-03-02 Mikael Morin <mikael@gcc.gnu.org>
++
++ PR fortran/60341
++ * gfortran.dg/str_comp_optimize_1.f90: New test.
++
++2014-02-26 Fabien Chêne <fabien@gcc.gnu.org>
++
++ PR c++/37140
++ * g++.dg/template/using27.C: New.
++ * g++.dg/template/using28.C: New.
++ * g++.dg/template/using29.C: New.
++
++2014-02-22 Mikael Morin <mikael@gcc.gnu.org>
++
++ PR fortran/59599
++ * gfortran.dg/ichar_3.f90: New test.
++
++2014-02-20 Janus Weil <janus@gcc.gnu.org>
++
++ Backport from mainline
++ 2014-02-17 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/55907
++ * gfortran.dg/init_flag_12.f90: New.
++
++2014-02-18 Kai Tietz <ktietz@redhat.com>
++
++ PR target/60193
++ * gcc.target/i386/nest-1.c: New testcase.
++
++2014-02-18 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gnat.dg/opt32.adb: New test.
++
++2014-02-15 Jerry DeLisle <jvdelisle@gcc.gnu>
++ Dominique d'Humieres <dominiq@lps.ens.fr>
++
++ Backport from mainline
++ PR libfortran/59771
++ PR libfortran/59774
++ PR libfortran/59836
++ * gfortran.dg/fmt_g_1.f90: New test.
++ * gfortran.dg/round_3.f08: New cases added.
++
++2014-02-08 Mikael Morin <mikael@gcc.gnu.org>
++
++ PR fortran/57033
++ * gfortran.dg/default_initialization_7.f90: New test.
++
++2014-02-08 Paul Thomas <pault@gcc.gnu.org>
++
++ PR fortran/59906
++ * gfortran.dg/elemental_subroutine_9.f90 : New test
++
++2014-02-04 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2014-02-02 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/60017
++ * gcc.c-torture/execute/pr60017.c: New test.
++
++2014-02-03 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/59941
++ * gfortran.dg/typebound_proc_26.f90: New.
++
++2014-01-29 Markus Trippelsdorf <markus@trippelsdorf.de>
++
++ Backport from mainline
++ 2012-12-13 Jakub Jelinek <jakub@redhat.com>
++
++ PR gcov-profile/55650
++ * g++.dg/other/pr55650.C: New test.
++ * g++.dg/other/pr55650.cc: New file.
++
++2014-01-26 Mikael Morin <mikael@gcc.gnu.org>
++
++ PR fortran/58007
++ * gfortran.dg/unresolved_fixup_1.f90: New test.
++ * gfortran.dg/unresolved_fixup_2.f90: New test.
++
++2014-01-16 Jakub Jelinek <jakub@redhat.com>
++
++ PR target/59839
++ * gcc.target/i386/pr59839.c: New test.
++
++ PR debug/54694
++ * gcc.target/i386/pr9771-1.c (main): Rename to...
++ (real_main): ... this. Add __asm name "main".
++ (ASMNAME, ASMNAME2, STRING): Define.
++
++2014-01-16 Marek Polacek <polacek@redhat.com>
++
++ Backport from mainline
++ 2014-01-16 Marek Polacek <polacek@redhat.com>
++
++ PR middle-end/59827
++ * gcc.dg/pr59827.c: New test.
++
++2014-01-10 Richard Earnshaw <rearnsha@arm.com>
++
++ PR rtl-optimization/54300
++ * gcc.target/arm/pr54300.C: New test.
++
++2014-01-03 Joseph Myers <joseph@codesourcery.com>
++
++ * gcc.target/powerpc/rs6000-ldouble-3.c: New test.
++
++2013-12-12 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-12-12 Ryan Mansfield <rmansfield@qnx.com>
++
++ PR testsuite/59442
++ * gcc.target/i386/sse2-movapd-1.c: Fix alignment attributes.
++ * gcc.target/i386/sse2-movapd-2.c: Likewise.
++ * gcc.target/i386/avx-vmovapd-256-1.c: Likewise.
++ * gcc.target/i386/avx-vmovapd-256-2.c: Likewise.
++
++2013-12-04 Marek Polacek <polacek@redhat.com>
++
++ PR c/59351
++ * gcc.dg/pr59351.c: Use -pedantic instead of -Wpedantic.
++
++2013-12-03 Marek Polacek <polacek@redhat.com>
++
++ Backport from mainline
++ 2013-12-03 Marek Polacek <polacek@redhat.com>
++
++ PR c/59351
++ * gcc.dg/pr59351.c: New test.
++
++2013-11-28 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-11-27 Uros Bizjak <ubizjak@gmail.com>
++ Ganesh Gopalasubramanian <Ganesh.Gopalasubramanian@amd.com>
++
++ PR target/56788
++ * gcc.target/i386/xop-frczX.c: New test.
++
++2013-11-25 Vidya Praveen <vidyapraveen@arm.com>
++
++ Backport from mainline
++ 2013-10-21 Vidya Praveen <vidyapraveen@arm.com>
++
++ * gcc.dg/20050922-1.c: Remove stdlib.h and declare abort().
++ * gcc.dg/20050922-1.c: Remove stdlib.h and declare abort() and exit().
++
++2013-11-17 Paul Thomas <pault@gcc.gnu.org>
++
++ PR fortran/58771
++ * gfortran.dg/derived_external_function_1.f90 : New test
++
++2013-11-02 Janus Weil <janus@gcc.gnu.org>
++
++ Backport from mainline
++ 2013-09-23 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/58355
++ * gfortran.dg/extends_15.f90: New.
++
++2013-10-28 Tom de Vries <tom@codesourcery.com>
++
++ * gcc.target/arm/require-pic-register-loc.c: New test.
++
++2013-10-28 Tom de Vries <tom@codesourcery.com>
++
++ * gcc.target/arm/require-pic-register-loc.c: New test.
++
++2013-10-26 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-10-22 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/58779
++ * gcc.target/i386/pr30315.c: Remove MINUSCC, DECCC, MINUSCCONLY
++ and MINUSCCZEXT defines. Update scan-assembler dg directive.
++ * gcc.dg/torture/pr58779.c: New test.
++
++2013-10-25 Richard Henderson <rth@redhat.com>
++
++ PR rtl/58542
++ * gcc.dg/atomic-store-6.c: New.
++
++2013-10-25 Tom de Vries <tom@codesourcery.com>
++
++ PR c++/58282
++ * g++.dg/tm/noexcept-6.C: New test.
++
++2013-10-25 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc.c-torture/execute/pr58831.c: New test.
++
++2013-10-16 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/58633
++ * g++.dg/cpp0x/decltype57.C: New.
++ * g++.dg/cpp0x/enum18.C: Revert r174385 changes.
++
++2013-09-23 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gnat.dg/opt28.ad[sb]: New test.
++ * gnat.dg/opt28_pkg.ads: New helper.
++
++2013-09-18 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gnat.dg/in_out_parameter4.adb: New test.
++
++2013-08-13 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gnat.dg/loop_optimization16.adb: New test.
++ * gnat.dg/loop_optimization16_pkg.ad[sb]: New helper.
++
++2013-08-13 Marek Polacek <polacek@redhat.com>
++
++ Backport from 4.8:
++ 2013-08-13 Marek Polacek <polacek@redhat.com>
++
++ PR tree-optimization/57980
++ * gcc.dg/pr57980.c: New test.
++
++2013-08-11 Janus Weil <janus@gcc.gnu.org>
++
++ Backport from trunk:
++ 2013-08-09 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/58058
++ * gfortran.dg/transfer_intrinsic_6.f90: New.
++
++2013-07-16 Iain Sandoe <iain@codesourcery.com>
++
++ PR target/55656
++ PR target/55657
++ * obj-c++.dg/cxx-ivars-3.mm: Use NSObject instead of Object.
++ * obj-c++.dg/strings/const-cfstring-5.mm: Likewise.
++ * obj-c++.dg/torture/strings/const-str-10.mm: Likewise.
++ * obj-c++.dg/torture/strings/const-str-9.mm: Likewise.
++ * objc.dg/image-info.m: Likewise.
++ * objc.dg/symtab-1.m: Likewise.
++ * objc.dg/torture/strings/const-str-10.m: Likewise.
++ * objc.dg/torture/strings/const-str-11.m: Likewise.
++ * objc.dg/torture/strings/const-str-9.m: Likewise.
++ * objc.dg/zero-link-1.m: Likewise.
++ * objc.dg/zero-link-2.m: Likewise.
++ * objc.dg/no-extra-load.m: Avoid Foundation.h.
++ * objc.dg/objc-foreach-4.m: Likewise.
++ * objc.dg/objc-foreach-5.m: Likewise.
++ * obj-c++.dg/proto-lossage-7.mm: Use NSObject instead of Object
++ (for Darwin).
++ * obj-c++.dg/strings/const-str-12.mm: Likewise.
++ * obj-c++.dg/syntax-error-1.mm: Likewise.
++ * objc.dg/method-6.m: Likewise.
++ * objc.dg/pr23214.m: Likewise.
++ * objc.dg/proto-lossage-7.m: Likewise.
++ * objc.dg/strings/const-str-12b.m: Likewise.
++ * objc.dg/zero-link-3.m: Likewise.
++ * obj-c++.dg/method-12.mm: Skip on Darwin versions without 'Object'.
++ * objc.dg/encode-7-next-64bit.m: Use NSObject instead of Object,
++ adjust headers, interfaces and encoded types to reflect current system
++ versions. Add FIXME and outputs from current system compiler for
++ reference.
++
++2012-12-03 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/54170
++ * g++.dg/cpp0x/lambda/lambda-nullptr.C: New.
++
++2013-07-08 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/57785
++ * gfortran.dg/dot_product_2.f90: New.
++
++2013-07-08 Jakub Jelinek <jakub@redhat.com>
++
++ PR rtl-optimization/57829
++ * gcc.c-torture/execute/pr57829.c: New test.
++
++2013-07-05 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-06-20 Uros Bizjak <ubizjak@gmail.com>
++
++ PR target/57655
++ * gcc.target/i386/pr57655.c: New test.
++
++2013-06-09 Jakub Jelinek <jakub@redhat.com>
++
++ PR target/57568
++ * gcc.c-torture/execute/pr57568.c: New test.
++
++2013-06-06 Tobias Burnus <burnus@net-b.de>
++
++ Backport from mainline
++ 2012-08-27 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/54370
++ * gfortran.dg/do_5.f90: New.
++
++2013-06-01 Janus Weil <janus@gcc.gnu.org>
++ Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/57217
++ * gfortran.dg/typebound_override_4.f90: New.
++
++2013-05-26 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gnat.dg/specs/last_bit.ads: New test.
++
+2013-05-13 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/57264
@@ -1283,6 +14511,155 @@ Index: gcc/testsuite/ChangeLog
2013-04-11 Release Manager
* GCC 4.7.3 released.
+@@ -54,7 +530,7 @@
+
+ Backport from mainline
+ 2013-02-27 Andrey Belevantsev <abel@ispras.ru>
+-
++
+ PR middle-end/45472
+ * gcc.dg/pr45472.c: New test.
+
+Index: gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90
+===================================================================
+--- a/src/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90 (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90 (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,13 @@
++SUBROUTINE cal_helicity (uh, ph, phb, wavg, ims, ime, its, ite)
++ INTEGER, INTENT( IN ) :: ims, ime, its, ite
++ REAL, DIMENSION( ims:ime), INTENT( IN ) :: ph, phb, wavg
++ REAL, DIMENSION( ims:ime), INTENT( INOUT ) :: uh
++ INTEGER :: i
++ REAL :: zu
++ DO i = its, ite
++ zu = (ph(i ) + phb(i)) + (ph(i-1) + phb(i-1))
++ IF (wavg(i) .GT. 0) THEN
++ uh(i) = uh(i) + zu
++ ENDIF
++ END DO
++END SUBROUTINE cal_helicity
+Index: gcc/testsuite/g++.dg/debug/template2.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/debug/template2.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/debug/template2.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,14 @@
++// PR c++/57545
++
++template<typename T, long unsigned int N>
++struct array {
++ T data[N];
++};
++
++template<typename T>
++struct derived {
++ typedef long unsigned int size_type;
++ static const size_type n = 42;
++
++ array<int, n> a;
++};
+Index: gcc/testsuite/g++.dg/ext/attrib48.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/ext/attrib48.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/ext/attrib48.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,6 @@
++// PR c++/54652
++
++typedef unsigned L __attribute__ ((aligned));
++typedef unsigned L __attribute__ ((aligned));
++
++L l;
+Index: gcc/testsuite/g++.dg/expr/const1.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/expr/const1.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/expr/const1.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,9 @@
++// PR c++/57551
++
++extern unsigned long ADDR;
++
++unsigned long f(){
++ const unsigned long* const var=&ADDR;
++ const unsigned long retval=var[1];
++ return retval;
++}
+Index: gcc/testsuite/g++.dg/other/pr55650.cc
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/other/pr55650.cc (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/other/pr55650.cc (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,4 @@
++int
++main ()
++{
++}
+Index: gcc/testsuite/g++.dg/other/pr55650.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/other/pr55650.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/other/pr55650.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,21 @@
++// PR gcov-profile/55650
++// { dg-do link }
++// { dg-options "-O2 -fprofile-generate" }
++// { dg-additional-sources "pr55650.cc" }
++
++struct A
++{
++ virtual void foo ();
++};
++
++struct B : public A
++{
++ B ();
++ void foo () {}
++};
++
++inline A *
++bar ()
++{
++ return new B;
++}
+Index: gcc/testsuite/g++.dg/tm/pr60004.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/tm/pr60004.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/tm/pr60004.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,10 @@
++// { dg-do compile }
++// { dg-options "-fgnu-tm" }
++
++int a;
++int f() {
++ __transaction_atomic {
++ if (a == 5)
++ return 1;
++ }
++}
+Index: gcc/testsuite/g++.dg/tm/noexcept-6.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/tm/noexcept-6.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/tm/noexcept-6.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,23 @@
++// { dg-do compile }
++// { dg-options "-fno-exceptions -fgnu-tm -O -std=c++0x -fdump-tree-tmlower" }
++
++struct TrueFalse
++{
++ static constexpr bool v() { return true; }
++};
++
++int global;
++
++template<typename T> int foo()
++{
++ return __transaction_atomic noexcept(T::v()) (global + 1);
++}
++
++int f1()
++{
++ return foo<TrueFalse>();
++}
++
++/* { dg-final { scan-tree-dump-times "eh_must_not_throw" 0 "tmlower" } } */
++/* { dg-final { scan-tree-dump-times "__transaction_atomic" 1 "tmlower" } } */
++/* { dg-final { cleanup-tree-dump "tmlower" } } */
Index: gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh3.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh3.C (.../tags/gcc_4_7_3_release)
@@ -1302,6 +14679,142 @@ Index: gcc/testsuite/g++.dg/cpp0x/lambda/lambda-eh3.C
+ }
+ }();
+}
+Index: gcc/testsuite/g++.dg/cpp0x/lambda/lambda-return1.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-return1.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-return1.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,26 @@
++// PR c++/57437
++// { dg-require-effective-target c++11 }
++
++struct A {
++ int i;
++
++ A(): i(42) {}
++ A(const A&) = default;
++ A(A&& a): i(a.i) { a.i = 0; }
++};
++
++int main()
++{
++ A x;
++
++ auto y = [x] () mutable {
++ x.i++;
++ return x;
++ };
++
++ if (y().i != 43)
++ __builtin_abort ();
++
++ if (y().i != 44)
++ __builtin_abort ();
++}
+Index: gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nullptr.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nullptr.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-nullptr.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,47 @@
++// PR c++/54170
++// { dg-do run { target c++11 } }
++
++#include <cassert>
++
++struct A;
++typedef A* ptr;
++typedef int (A::*pmf) (int);
++typedef int (A::*pdm);
++
++int total;
++
++void add(int n)
++{
++ total += n;
++}
++
++template <typename RType, typename Callable>
++RType Call(Callable native_func, int arg)
++{
++ return native_func(arg);
++}
++
++template <typename RType>
++RType do_test(int delta)
++{
++ return Call<RType>([=](int delta) { add(delta); return nullptr; }, delta);
++}
++
++template <typename RType>
++void test()
++{
++ total = 0;
++ assert (!do_test<RType>(5));
++ assert (total == 5);
++ assert (!do_test<RType>(20));
++ assert (total == 25);
++ assert (!do_test<RType>(-256));
++ assert (total == -231);
++}
++
++int main()
++{
++ test<ptr>();
++ test<pdm>();
++ test<pmf>();
++}
+Index: gcc/testsuite/g++.dg/cpp0x/variadic149.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/variadic149.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/variadic149.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,11 @@
++// PR c++/60248
++// { dg-options "-std=c++11 -g -fabi-version=2" }
++
++template<int...> struct A {};
++
++template<> struct A<0>
++{
++ typedef enum { e } B;
++};
++
++A<0> a;
+Index: gcc/testsuite/g++.dg/cpp0x/enum18.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/enum18.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/enum18.C (.../branches/gcc-4_7-branch)
+@@ -4,5 +4,5 @@
+ int main(void) {
+ enum e {};
+ e ev;
+- ev.e::~e_u(); // { dg-error "e_u. has not been declared" }
++ ev.e::~e_u(); // { dg-error "" }
+ }
+Index: gcc/testsuite/g++.dg/cpp0x/noexcept22.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/noexcept22.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/noexcept22.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,21 @@
++// PR c++/60046
++// { dg-require-effective-target c++11 }
++
++constexpr bool foo () { return noexcept (true); }
++template <typename T>
++struct V
++{
++ void bar (V &) noexcept (foo ()) {}
++};
++template <typename T>
++struct W : public V <int>
++{
++ void bar (W &x) { V <int>::bar (x); }
++};
++
++int
++main ()
++{
++ W <int> a, b;
++ a.bar (b);
++}
Index: gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr8.C
===================================================================
--- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr8.C (.../tags/gcc_4_7_3_release)
@@ -1361,11 +14874,1259 @@ Index: gcc/testsuite/g++.dg/cpp0x/constexpr-array-ptr8.C
+ unsigned c;
+};
+B <C, C> p ("a", "b");
+Index: gcc/testsuite/g++.dg/cpp0x/decltype57.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/decltype57.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/decltype57.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,8 @@
++// PR c++/58633
++// { dg-do compile { target c++11 } }
++
++void foo(int i)
++{
++ typedef int I;
++ decltype(i.I::~I())* p;
++}
+Index: gcc/testsuite/g++.dg/cpp0x/initlist78.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/cpp0x/initlist78.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/cpp0x/initlist78.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,12 @@
++// PR c++/58639
++// { dg-require-effective-target c++11 }
++
++struct node {
++ node &parent;
++};
++
++struct vector {
++ node n;
++};
++
++vector v({}); // { dg-error "" }
+Index: gcc/testsuite/g++.dg/template/array26.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/template/array26.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/template/array26.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,40 @@
++// PR c++/57325
++
++class valarray { int _M_data; };
++template < typename > struct SimpleJet { valarray partials; };
++
++template < class C > struct scoped_ptr_impl
++{
++ scoped_ptr_impl (C *):data_ () { }
++ struct Data
++ {
++ C ptr;
++ };
++ Data data_;
++};
++
++template < class, class = int >struct scoped_ptr;
++template < class C, class D > struct scoped_ptr <C[], D >
++{
++ scoped_ptr ():impl_ (0) { }
++ scoped_ptr_impl < C > impl_;
++};
++
++template < typename JetsT > void
++TestJets (JetsT *)
++{
++ typedef typename JetsT::JetType JetT;
++ scoped_ptr < JetT[] > a;
++}
++
++template < typename T > struct SimpleJets
++{
++ typedef SimpleJet < T > JetType;
++ scoped_ptr < SimpleJet < T >[] > vars_;
++};
++
++void fn ()
++{
++ SimpleJets < double >b;
++ TestJets (&b);
++}
+Index: gcc/testsuite/g++.dg/template/using23.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/template/using23.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/template/using23.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,15 @@
++// PR c++/57831
++
++struct A {
++ void f();
++};
++template <class T> struct B : T {
++ typedef T base;
++ using base::f; // If I write "using B<T>::f" it's ok
++ void g( ) {
++ B<T>::f(); // This is OK as expected
++ (this->*&T::f)(); // This is also OK
++ (this->*&B<T>::f)(); // This causes error
++ }
++};
++template struct B< A >;
+Index: gcc/testsuite/g++.dg/template/delete2.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/template/delete2.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/template/delete2.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,26 @@
++// PR c++/58119
++
++template <class T>
++struct A
++{
++ operator T*();
++ template <class U>
++ operator A<U>();
++};
++
++template <class T>
++struct B
++{
++ operator T*();
++ template <class U>
++ operator A<U>*();
++};
++
++int main()
++{
++ A<int> a;
++ delete a;
++
++ B<int> b;
++ delete b; // { dg-error "template|delete" }
++}
+Index: gcc/testsuite/g++.dg/template/inherit9.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/template/inherit9.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/template/inherit9.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,15 @@
++// PR c++/58273
++
++class A {};
++class B
++{
++ int goo(A);
++};
++template<typename E>
++class D : public B
++{
++ void foo(A t)
++ {
++ int const i(B::goo(t));
++ }
++};
+Index: gcc/testsuite/g++.dg/template/using27.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/template/using27.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/template/using27.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,33 @@
++// PR c++/37140
++
++struct X
++{
++ typedef int nested_type;
++};
++
++template <class T>
++struct A
++{
++ typedef X type;
++};
++
++template <class T>
++struct B : A<T>
++{
++ using typename A<T>::type;
++ typename type::nested_type x;
++};
++
++template <class T>
++struct C : B<T>
++{
++ using typename B<T>::type;
++ typename type::nested_type y;
++};
++
++struct D : C<int>
++{
++ using C<int>::type;
++ type::nested_type z;
++};
++
+Index: gcc/testsuite/g++.dg/template/using28.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/template/using28.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/template/using28.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,17 @@
++// PR c++/37140
++
++struct C
++{
++ static const int block_size = 1;
++};
++
++template <typename T> struct A {
++ typedef C type;
++};
++
++template <typename T> struct B : public A<T> {
++ using typename A<T>::type;
++ static const int block_size = type::block_size;
++};
++
++template class B<int>;
+Index: gcc/testsuite/g++.dg/template/using29.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/template/using29.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/template/using29.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,21 @@
++// PR c++/58047
++
++template <int N>
++struct print_arg { };
++
++struct const_holder {
++ static const int CONSTANT = 42;
++};
++
++template <typename T>
++struct identity {
++ typedef T type;
++};
++
++template <class T>
++struct test_case : public identity<T> {
++ using typename identity<T>::type;
++ print_arg<type::CONSTANT> printer;
++};
++
++template struct test_case<const_holder>;
+Index: gcc/testsuite/g++.dg/template/partial15.C
+===================================================================
+--- a/src/gcc/testsuite/g++.dg/template/partial15.C (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/g++.dg/template/partial15.C (.../branches/gcc-4_7-branch)
+@@ -0,0 +1,19 @@
++// PR c++/57043
++// { dg-do link }
++
++template<typename D> struct complex { };
++
++template<typename Tp>
++complex<Tp>
++pow(const complex<Tp>& x, const complex<Tp>& y) { return complex<Tp>(); }
++
++template<typename T, typename U>
++struct promote_2 { typedef T type; };
++
++template<typename Tp, typename Up>
++complex<typename promote_2<Tp, Up>::type>
++pow(const complex<Tp>& x, const complex<Up>& y);
++
++complex<double> (*powcc)(const complex<double>&, const complex<double>&) = pow;
++
++int main() {}
+Index: gcc/testsuite/objc.dg/no-extra-load.m
+===================================================================
+--- a/src/gcc/testsuite/objc.dg/no-extra-load.m (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/objc.dg/no-extra-load.m (.../branches/gcc-4_7-branch)
+@@ -1,7 +1,7 @@
+ /* { dg-do compile { target *-*-darwin* } } */
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+
+-#import <Foundation/Foundation.h>
++#include <Foundation/NSObject.h>
+ main() { [NSObject new]; }
+
+ /* { dg-final { scan-assembler-not "L_objc_msgSend\\\$non_lazy_ptr" } } */
+Index: gcc/testsuite/objc.dg/method-6.m
+===================================================================
+--- a/src/gcc/testsuite/objc.dg/method-6.m (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/objc.dg/method-6.m (.../branches/gcc-4_7-branch)
+@@ -4,7 +4,14 @@
+ /* { dg-do compile } */
+ /* { dg-options "-Wstrict-selector-match" } */
+
++#ifdef __NEXT_RUNTIME__
++#include <Foundation/NSObject.h>
++#define OBJECT NSObject
++#else
++#include <objc/Object.h>
+ #include <objc/Protocol.h>
++#define OBJECT Object
++#endif
+
+ @interface Base
+ - (unsigned)port;
+@@ -11,7 +18,7 @@
+ @end
+
+ @interface Derived: Base
+-- (Object *)port;
++- (OBJECT *)port;
+ + (Protocol *)port;
+ - (id)starboard;
+ @end
+@@ -20,13 +27,13 @@
+ Class receiver;
+
+ [receiver port]; /* { dg-warning "multiple methods named .\\+port. found" } */
+- /* { dg-message "using .\\-\\(unsigned( int)?\\)port." "" { target *-*-* } 10 } */
+- /* { dg-message "also found .\\+\\(Protocol \\*\\)port." "" { target *-*-* } 15 } */
++ /* { dg-message "using .\\-\\(unsigned( int)?\\)port." "" { target *-*-* } 17 } */
++ /* { dg-message "also found .\\+\\(Protocol \\*\\)port." "" { target *-*-* } 22 } */
+
+ [receiver starboard]; /* { dg-warning "no .\\+starboard. method found" } */
+- /* { dg-warning "Messages without a matching method signature" "" { target *-*-* } 26 } */
+- /* { dg-warning "will be assumed to return .id. and accept" "" { target *-*-* } 26 } */
+- /* { dg-warning ".\.\.\.. as arguments" "" { target *-*-* } 26 } */
++ /* { dg-warning "Messages without a matching method signature" "" { target *-*-* } 33 } */
++ /* { dg-warning "will be assumed to return .id. and accept" "" { target *-*-* } 33 } */
++ /* { dg-warning ".\.\.\.. as arguments" "" { target *-*-* } 33 } */
+
+ [Class port]; /* { dg-error ".Class. is not an Objective\\-C class name or alias" } */
+ }
+Index: gcc/testsuite/objc.dg/strings/const-cfstring-5.m
+===================================================================
+--- a/src/gcc/testsuite/objc.dg/strings/const-cfstring-5.m (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/objc.dg/strings/const-cfstring-5.m (.../branches/gcc-4_7-branch)
+@@ -6,9 +6,9 @@
+ /* { dg-skip-if "NeXT only" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-options "-mconstant-cfstrings" } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+
+-@interface Foo: Object {
++@interface Foo: NSObject {
+ char *cString;
+ unsigned int len;
+ }
+@@ -15,7 +15,7 @@
+ + (Foo *)description;
+ @end
+
+-@interface Bar: Object
++@interface Bar: NSObject
+ + (Foo *) getString: (int) which;
+ @end
+
+Index: gcc/testsuite/objc.dg/strings/const-str-12b.m
+===================================================================
+--- a/src/gcc/testsuite/objc.dg/strings/const-str-12b.m (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/objc.dg/strings/const-str-12b.m (.../branches/gcc-4_7-branch)
+@@ -5,10 +5,16 @@
+ /* { dg-options "-fconstant-string-class=Foo" } */
+ /* { dg-options "-mno-constant-cfstrings -fconstant-string-class=Foo" { target *-*-darwin* } } */
+
++#ifdef __NEXT_RUNTIME__
++#include <Foundation/NSObject.h>
++#define OBJECT NSObject
++#else
+ #include <objc/Object.h>
++#define OBJECT Object
++#endif
+ #include "../../objc-obj-c++-shared/objc-test-suite-types.h"
+
+-@interface Foo: Object {
++@interface Foo: OBJECT {
+ char *cString;
+ unsigned int len;
+ }
+@@ -15,7 +21,7 @@
+ + (id)description;
+ @end
+
+-@interface Bar: Object
++@interface Bar: OBJECT
+ + (Foo *) getString: (int) which;
+ @end
+
+Index: gcc/testsuite/objc.dg/encode-7-next-64bit.m
+===================================================================
+--- a/src/gcc/testsuite/objc.dg/encode-7-next-64bit.m (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/objc.dg/encode-7-next-64bit.m (.../branches/gcc-4_7-branch)
+@@ -4,24 +4,25 @@
+ /* { dg-require-effective-target lp64 } */
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
++/* { dg-additional-options "-framework Foundation" } */
+
+ #include <stdbool.h>
+ #include <string.h>
+ #include <stdlib.h>
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+ #include "../objc-obj-c++-shared/runtime.h"
+
+-#define CHECK_IF(E) if (!(E)) abort ()
++extern int printf(char *,...);
++void CHECK_IF(const char *s1, const char *s2)
++{
++ if (strcmp(s1,s2) != 0) {
++ printf ("'%s'\n'%s'\n",s1,s2);
++ abort ();
++ }
++}
+
+ @class NSDictionary, NSFont, NSError, _NSATSTypesetterGuts, NSString, NSMenu, NSArray;
+
+-typedef unsigned char UInt8;
+-typedef const signed long OSStatus;
+-typedef unsigned long CFIndex;
+-typedef unsigned int UInt32;
+-typedef UInt32 FourCharCode;
+-typedef FourCharCode OSType;
+-
+ struct FSRef {
+ UInt8 hidden[80];
+ };
+@@ -99,10 +100,10 @@
+ unsigned int parameterMask;
+ } NSErrorUserInfoFormatter;
+
+-typedef Object MyObj;
+-typedef Object *MyPtr;
++typedef NSObject MyObj;
++typedef NSObject *MyPtr;
+
+-@interface Foo: Object {
++@interface Foo: NSObject {
+ NSATSGlyphStorageRun r;
+ }
+ - (NSError *)_errorWithOSStatus:(OSStatus)inOSStatus ref1:(const FSRef *)inRef1 ref2:(const struct FSRef *)inRef2
+@@ -114,7 +115,7 @@
+ - (id)str1:(const char *)str1 str2:(char *)str2 str3:(char *const)str3 str4:(const char *const)str4;
+ - (oneway void)foo1:(Foo *)foo1 foo2:(const Foo *)foo2 foo3:(Foo *const)foo3 foo4:(const Foo *const)foo4;
+ - (in const char *)sel1:(const SEL)sel1 id1:(const id)id1;
+-- (inout id)obj1:(const MyPtr)obj1 obj2:(Object *const)obj2 obj3:(MyObj *const)obj3;
++- (inout id)obj1:(const MyPtr)obj1 obj2:(NSObject *const)obj2 obj3:(MyObj *const)obj3;
+ + (ComponentInstance)_defaultScriptingComponent;
+ - (NSString *)_formatCocoaErrorString:(NSString *)formatString parameters:(const char *)parameters
+ applicableFormatters:(NSErrorUserInfoFormatter **)formatters count:(int)numFormatters;
+@@ -156,7 +157,7 @@
+ - (in const char *)sel1:(const SEL)sel1 id1:(const id)id1 {
+ return "Hello";
+ }
+-- (inout id)obj1:(const MyPtr)obj1 obj2:(Object *const)obj2 obj3:(MyObj *const)obj3 {
++- (inout id)obj1:(const MyPtr)obj1 obj2:(NSObject *const)obj2 obj3:(MyObj *const)obj3 {
+ return self;
+ }
+ + (ComponentInstance)_defaultScriptingComponent {
+@@ -191,6 +192,8 @@
+ }
+ @end
+
++/* FIXME: we produce different output c.f. the system compiler on OSX10.6+ */
++
+ int main(void) {
+ Class fooClass = objc_getClass ("Foo");
+ Method meth;
+@@ -199,72 +202,76 @@
+ Ivar ivar;
+
+ meth = class_getInstanceMethod (fooClass, @selector(_errorWithOSStatus:ref1:ref2:reading:));
+- CHECK_IF (!strcmp (method_getTypeEncoding(meth), "@44@0:8q16r^{FSRef=[80C]}24r^{FSRef=[80C]}32c40"));
++ CHECK_IF (method_getTypeEncoding(meth), "@40@0:8i16r^{FSRef=[80C]}20r^{FSRef=[80C]}28c36");
+
+ meth = class_getInstanceMethod (fooClass, @selector(_attributeRunForCharacterAtIndex:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "r^{?=@@QQ^Qffff{_NSRect={_NSPoint=ff}{_NSSize=ff}}q^qQ^Q@@@:::****{?=b1b1b1b1b1b27}}24@0:8Q16"));
++ CHECK_IF (method_getTypeEncoding (meth), "r^{?=@@qq^qffff{_NSRect={_NSPoint=ff}{_NSSize=ff}}q^qQ^Q@@@:::****{?=b1b1b1b1b1b27}}24@0:8q16");
++/* clang produces: r^{?=@@qq^qffff{_NSRect={_NSPoint=ff}{_NSSize=ff}}q^qQ^Q@@@::^{objc_selector}****{?=b1b1b1b1b1b27}}24@0:8q16 */
+
+ meth = class_getInstanceMethod (fooClass, @selector(_getATSTypesetterGuts:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "r@24@0:8r:16"));
++ CHECK_IF (method_getTypeEncoding (meth), "r@24@0:8r:16");
++/* "@24@0:8r^{objc_selector=}16" */
+
+ meth = class_getInstanceMethod (fooClass, @selector(resumeWithSuspensionID:and:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "v32@0:8^{__NSAppleEventManagerSuspension=}16r^Q24"));
++ CHECK_IF (method_getTypeEncoding (meth), "v32@0:8^{__NSAppleEventManagerSuspension=}16r^q24");
+
+ meth = class_getInstanceMethod (fooClass, @selector(anotherMeth:and:and:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "r@40@0:8r:16r@24r@32"));
++ CHECK_IF (method_getTypeEncoding (meth), "r@40@0:8r:16r@24r@32");
+
+ meth = class_getInstanceMethod (fooClass, @selector(str1:str2:str3:str4:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "@48@0:8r*16*24*32r*40"));
++ CHECK_IF (method_getTypeEncoding (meth), "@48@0:8r*16*24*32r*40");
+
+ meth = class_getInstanceMethod (fooClass, @selector(foo1:foo2:foo3:foo4:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "Vv48@0:8@16r@24@32r@40"));
++ CHECK_IF (method_getTypeEncoding (meth), "Vv48@0:8@16r@24@32r@40");
+
+ meth = class_getInstanceMethod (fooClass, @selector(sel1:id1:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "rn*32@0:8r:16r@24"));
++ CHECK_IF (method_getTypeEncoding (meth), "rn*32@0:8r:16r@24");
+
+ meth = class_getInstanceMethod (fooClass, @selector(obj1:obj2:obj3:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "N@40@0:8r@16@24^{Object=#}32"));
++ CHECK_IF (method_getTypeEncoding (meth), "N@40@0:8r@16@24^{NSObject=#}32");
+
+ meth = class_getClassMethod (fooClass, @selector(_defaultScriptingComponent));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "^{ComponentInstanceRecord=[1q]}16@0:8"));
++ CHECK_IF (method_getTypeEncoding (meth), "^{ComponentInstanceRecord=[1q]}16@0:8");
+
+ meth = class_getInstanceMethod (fooClass, @selector(_formatCocoaErrorString:parameters:applicableFormatters:count:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "@44@0:8@16r*24^^{?}32i40"));
++ CHECK_IF (method_getTypeEncoding (meth), "@44@0:8@16r*24^^{?}32i40");
+
+ meth = class_getInstanceMethod (fooClass, @selector(formatter_func:run:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "^{?=^?@I}32@0:8@16r^^{?}24"));
++ CHECK_IF (method_getTypeEncoding (meth), "^{?=^?@I}32@0:8@16r^^{?}24");
+
+ meth = class_getInstanceMethod (fooClass, @selector(_forgetWord:inDictionary:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "c32@0:8nO@16nO@24"));
++ CHECK_IF (method_getTypeEncoding (meth), "c32@0:8nO@16nO@24");
+
+ meth = class_getInstanceMethod (fooClass, @selector(_registerServicesMenu:withSendTypes:andReturnTypes:addToList:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "v44@0:8@16r^*24r^*32c40"));
++ CHECK_IF (method_getTypeEncoding (meth), "v44@0:8@16r^*24r^*32c40");
+
+ meth = class_getClassMethod (fooClass, @selector(_proxySharePointer));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "^^{__CFSet}16@0:8"));
++ CHECK_IF (method_getTypeEncoding (meth), "^^{__CFSet}16@0:8");
+
+ meth = class_getInstanceMethod (fooClass, @selector(_checkGrammarInString:language:details:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "{_NSRange=II}40@0:8n@16nO@24oO^@32"));
++ CHECK_IF (method_getTypeEncoding (meth), "{_NSRange=II}40@0:8n@16nO@24oO^@32");
+
+ meth = class_getInstanceMethod (fooClass, @selector(_resolvePositionalStakeGlyphsForLineFragment:lineFragmentRect:minPosition:maxPosition:maxLineFragmentWidth:breakHint:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "B60@0:8^{__CTLine=}16{_NSRect={_NSPoint=ff}{_NSSize=ff}}24f40f44f48^Q52"));
++ CHECK_IF (method_getTypeEncoding (meth), "B60@0:8^{__CTLine=}16{_NSRect={_NSPoint=ff}{_NSSize=ff}}24f40f44f48^q52");
+
+ meth = class_getClassMethod (fooClass, @selector(findVoiceByIdentifier:returningCreator:returningID:));
+- CHECK_IF (!strcmp (method_getTypeEncoding (meth), "c40@0:8@16^I24^I32"));
++ CHECK_IF (method_getTypeEncoding (meth), "c40@0:8@16^I24^I32");
+
+ ivars = class_copyIvarList (fooClass, &ivar_count);
+- CHECK_IF (ivar_count == 1);
++ if (ivar_count != 1) {
++ abort ();
++ }
+
+ ivar = ivars[0];
+- CHECK_IF (!strcmp (ivar_getName(ivar), "r"));
+- CHECK_IF (!strcmp (ivar_getTypeEncoding(ivar),
++ CHECK_IF (ivar_getName(ivar), "r");
++ CHECK_IF (ivar_getTypeEncoding(ivar),
+ "{?=\"_attributes\"@\"NSDictionary\"\"_font\"@\"NSFont\"\"_characterLength\""
+- "Q\"_nominalGlyphLocation\"Q\"p\"^Q\"_defaultLineHeight\"f\"_defaultBaselineOffset\""
++ "q\"_nominalGlyphLocation\"q\"p\"^q\"_defaultLineHeight\"f\"_defaultBaselineOffset\""
+ "f\"_horizExpansion\"f\"_baselineDelta\"f\"_attachmentBBox\"{_NSRect=\"origin\""
+ "{_NSPoint=\"x\"f\"y\"f}\"size\"{_NSSize=\"width\"f\"height\"f}}\"ll\"q\"llp\"^q\"ull\""
+ "Q\"ullp\"^Q\"a\"@\"a1\"@\"a2\"@\"b\":\"b1\":\"b2\":\"str1\"*\"str2\"*\"str3\"*\"str4\""
+ "*\"_rFlags\"{?=\"_isAttachmentRun\"b1\"_hasPositionalStake\"b1\"_isDefaultFace\""
+- "b1\"_hasCombiningMarks\"b1\"_isScreenFont\"b1\"_reserved\"b27}}"));
+-
++ "b1\"_hasCombiningMarks\"b1\"_isScreenFont\"b1\"_reserved\"b27}}");
++/*"{?=\"_attributes\"@\"NSDictionary\"\"_font\"@\"NSFont\"\"_characterLength\"q\"_nominalGlyphLocation\"q\"p\"^q\"_defaultLineHeight\"f\"_defaultBaselineOffset\"f\"_horizExpansion\"f\"_baselineDelta\"f\"_attachmentBBox\"{_NSRect=\"origin\"{_NSPoint=\"x\"f\"y\"f}\"size\"{_NSSize=\"width\"f\"height\"f}}\"ll\"q\"llp\"^q\"ull\"Q\"ullp\"^Q\"a\"@\"a1\"@\"a2\"@\"b\":\"b1\":\"b2\"^{objc_selector}\"str1\"*\"str2\"*\"str3\"*\"str4\"*\"_rFlags\"{?=\"_isAttachmentRun\"b1\"_hasPositionalStake\"b1\"_isDefaultFace\"b1\"_hasCombiningMarks\"b1\"_isScreenFont\"b1\"_reserved\"b27}}"*/
+ return 0;
+ }
+Index: gcc/testsuite/objc.dg/proto-lossage-7.m
+===================================================================
+--- a/src/gcc/testsuite/objc.dg/proto-lossage-7.m (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/objc.dg/proto-lossage-7.m (.../branches/gcc-4_7-branch)
+@@ -1,12 +1,19 @@
+ /* Check that typedefs of ObjC classes preserve
+ any @protocol qualifiers. */
+ /* { dg-do compile } */
++
++#ifdef __NEXT_RUNTIME__
++#include <Foundation/NSObject.h>
++#define OBJECT NSObject
++#else
+ #include <objc/Object.h>
++#define OBJECT Object
++#endif
+
+ @protocol CanDoStuff;
+
+-typedef Object<CanDoStuff> CanDoStuffType;
+-typedef Object<CanDoStuff> *CanDoStuffTypePtr;
++typedef OBJECT<CanDoStuff> CanDoStuffType;
++typedef OBJECT<CanDoStuff> *CanDoStuffTypePtr;
+
+ @protocol CanDoStuff
+ - (int) dostuff;
+Index: gcc/testsuite/objc.dg/symtab-1.m
+===================================================================
+--- a/src/gcc/testsuite/objc.dg/symtab-1.m (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/objc.dg/symtab-1.m (.../branches/gcc-4_7-branch)
+@@ -4,9 +4,9 @@
+ /* { dg-do compile { target { *-*-darwin* } } } */
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+
+-@interface Base: Object
++@interface Base: NSObject
+ - (void)setValues;
+ @end
+
+Index: gcc/testsuite/objc.dg/objc-foreach-4.m
+===================================================================
+--- a/src/gcc/testsuite/objc.dg/objc-foreach-4.m (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/objc.dg/objc-foreach-4.m (.../branches/gcc-4_7-branch)
+@@ -1,18 +1,14 @@
+ /* Test for valid objc objects used in a for-each statement. */
+ /* FIXME: Run this test with the GNU runtime as well. */
+-/* { dg-do compile { target *-*-darwin* } } */
++/* { dg-do run { target *-*-darwin* } } */
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-skip-if "No NeXT fast enum. pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */
++/* { dg-additional-options "-framework Foundation" { target { *-*-darwin* } } } */
+
+-#include <objc/objc-api.h>
+-#include <Foundation/Foundation.h>
++#include <Foundation/NSString.h>
++#include <Foundation/NSAutoreleasePool.h>
++#include <Foundation/NSArray.h>
+
+-#if defined (__NEXT_RUNTIME__) && defined (__LP64__)
+-/* Fudge the class reference until we implement the compiler-side
+- const strings. */
+-extern void *_NSConstantStringClassReference;
+-#endif
+-
+ // gcc -o foo foo.m -framework Foundation
+
+ int main (int argc, char const* argv[]) {
+Index: gcc/testsuite/objc.dg/objc-foreach-5.m
+===================================================================
+--- a/src/gcc/testsuite/objc.dg/objc-foreach-5.m (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/objc.dg/objc-foreach-5.m (.../branches/gcc-4_7-branch)
+@@ -2,8 +2,10 @@
+ /* { dg-do compile { target *-*-darwin* } } */
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-skip-if "No NeXT fast enum. pre-Darwin9" { *-*-darwin[5-8]* } { "-fnext-runtime" } { "" } } */
++/* { dg-additional-options "-framework Foundation" { target { *-*-darwin* } } } */
+
+-#import <Foundation/Foundation.h>
++#include <Foundation/NSArray.h>
++#include <Foundation/NSAutoreleasePool.h>
+
+ NSArray * createTestVictim(unsigned capacity) {
+ NSMutableArray * arr = [[NSMutableArray alloc] initWithCapacity:capacity];
+Index: gcc/testsuite/objc.dg/zero-link-1.m
+===================================================================
+--- a/src/gcc/testsuite/objc.dg/zero-link-1.m (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/objc.dg/zero-link-1.m (.../branches/gcc-4_7-branch)
+@@ -5,13 +5,12 @@
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-options "-fzero-link" } */
+
+-#include <objc/Object.h>
+-#include <objc/objc.h>
++#include <Foundation/NSObject.h>
+
+ extern void abort(void);
+ #define CHECK_IF(expr) if(!(expr)) abort();
+
+-@interface Base: Object
++@interface Base: NSObject
+ + (int) getValue;
+ @end
+
+Index: gcc/testsuite/objc.dg/zero-link-2.m
+===================================================================
+--- a/src/gcc/testsuite/objc.dg/zero-link-2.m (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/objc.dg/zero-link-2.m (.../branches/gcc-4_7-branch)
+@@ -5,12 +5,12 @@
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-options "-fno-zero-link" } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+
+ extern void abort(void);
+ #define CHECK_IF(expr) if(!(expr)) abort();
+
+-@interface Base: Object
++@interface Base: NSObject
+ + (int) getValue;
+ @end
+
+Index: gcc/testsuite/objc.dg/torture/strings/const-str-10.m
+===================================================================
+--- a/src/gcc/testsuite/objc.dg/torture/strings/const-str-10.m (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/objc.dg/torture/strings/const-str-10.m (.../branches/gcc-4_7-branch)
+@@ -6,10 +6,10 @@
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+ #include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
+
+-@interface NSString: Object
++@interface NSString: NSObject
+ @end
+
+ @interface NSSimpleCString : NSString {
+Index: gcc/testsuite/objc.dg/torture/strings/const-str-11.m
+===================================================================
+--- a/src/gcc/testsuite/objc.dg/torture/strings/const-str-11.m (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/objc.dg/torture/strings/const-str-11.m (.../branches/gcc-4_7-branch)
+@@ -7,10 +7,10 @@
+ /* { dg-options "-fconstant-string-class=XStr" } */
+ /* { dg-options "-mno-constant-cfstrings -fconstant-string-class=XStr" { target *-*-darwin* } } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+ #include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
+
+-@interface XString: Object {
++@interface XString: NSObject {
+ @protected
+ char *bytes;
+ }
+Index: gcc/testsuite/objc.dg/torture/strings/const-str-9.m
+===================================================================
+--- a/src/gcc/testsuite/objc.dg/torture/strings/const-str-9.m (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/objc.dg/torture/strings/const-str-9.m (.../branches/gcc-4_7-branch)
+@@ -5,10 +5,10 @@
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+ #include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
+
+-@interface NSConstantString: Object {
++@interface NSConstantString: NSObject {
+ char *cString;
+ unsigned int len;
+ }
+Index: gcc/testsuite/objc.dg/zero-link-3.m
+===================================================================
+--- a/src/gcc/testsuite/objc.dg/zero-link-3.m (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/objc.dg/zero-link-3.m (.../branches/gcc-4_7-branch)
+@@ -2,15 +2,23 @@
+ /* Contributed by Ziemowit Laski <zlaski@apple.com>. */
+
+ /* { dg-do run { target *-*-darwin* } } */
+-/* { dg-options "-fzero-link" } */
++/* { dg-additional-options "-fzero-link" } */
++/* { dg-additional-options "-framework Foundation" { target { *-*-darwin* } } } */
+ /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
+
++#ifdef __NEXT_RUNTIME__
++#include <Foundation/NSObject.h>
++#define OBJECT NSObject
++#else
+ #include <objc/Object.h>
++#include <objc/Protocol.h>
++#define OBJECT Object
++#endif
+
+ extern void abort(void);
+ #define CHECK_IF(expr) if(!(expr)) abort();
+
+-@interface Base: Object
++@interface Base: OBJECT
+ + (int) getValue;
+ @end
+
+Index: gcc/testsuite/objc.dg/image-info.m
+===================================================================
+--- a/src/gcc/testsuite/objc.dg/image-info.m (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/objc.dg/image-info.m (.../branches/gcc-4_7-branch)
+@@ -7,20 +7,19 @@
+ /* { dg-skip-if "NeXT-only" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-options "-freplace-objc-classes" } */
+
+-#include <objc/objc.h>
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+
+ extern void abort(void);
+ #define CHECK_IF(expr) if(!(expr)) abort();
+
+-@interface Object (TEST_SUITE_C1)
++@interface NSObject (TEST_SUITE_C1)
+ - init;
+ @end
+-@implementation Object (TEST_SUITE_C1)
++@implementation NSObject (TEST_SUITE_C1)
+ - init {return self;}
+ @end
+
+-@interface Base: Object {
++@interface Base: NSObject {
+ @public
+ int a;
+ float b;
+Index: gcc/testsuite/objc.dg/pr23214.m
+===================================================================
+--- a/src/gcc/testsuite/objc.dg/pr23214.m (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/objc.dg/pr23214.m (.../branches/gcc-4_7-branch)
+@@ -3,14 +3,24 @@
+
+ /* { dg-do run } */
+ /* { dg-xfail-run-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" } { "" } } */
++/* { dg-additional-options "-framework Foundation" { target { { *-*-darwin* } && objc2 } } } */
+
++#if defined (__NEXT_RUNTIME__) && defined(__OBJC2__) \
++ && defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) \
++ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1070
+ #include <objc/Protocol.h>
+-
+-@interface Object (TS_CAT)
++#define OBJECT NSObject
++#else
++#include <objc/Object.h>
++#define OBJECT Object
++#include <objc/Protocol.h>
++#endif
++
++@interface OBJECT (TS_CAT)
+ - test;
+ @end
+
+-@implementation Object (TS_CAT)
++@implementation OBJECT (TS_CAT)
+ - test { return self; }
+ @end
+
+@@ -20,7 +30,7 @@
+ @protocol B
+ @end
+
+-@interface Dummy : Object <B>
++@interface Dummy : OBJECT <B>
+ @end
+
+ int main ()
+Index: gcc/testsuite/obj-c++.dg/cxx-ivars-3.mm
+===================================================================
+--- a/src/gcc/testsuite/obj-c++.dg/cxx-ivars-3.mm (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/obj-c++.dg/cxx-ivars-3.mm (.../branches/gcc-4_7-branch)
+@@ -2,12 +2,15 @@
+
+ // { dg-do run { target *-*-darwin* } }
+ // { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } }
+-// { dg-options "-fobjc-call-cxx-cdtors -mmacosx-version-min=10.4" }
++// { dg-additional-options "-fobjc-call-cxx-cdtors -mmacosx-version-min=10.4 -framework Foundation" }
+ // This test has no equivalent or meaning for m64/ABI V2
+ // { dg-xfail-run-if "No Test Avail" { *-*-darwin* && lp64 } { "-fnext-runtime" } { "" } }
+
+ #include <objc/objc-runtime.h>
+ #include <stdlib.h>
++#include <Foundation/NSObject.h>
++
++//extern "C" { int printf(const char *,...); }
+ #define CHECK_IF(expr) if(!(expr)) abort()
+
+ #ifndef CLS_HAS_CXX_STRUCTORS
+@@ -19,7 +22,7 @@
+ cxx_struct (void) { a = b = 55; }
+ };
+
+-@interface Foo {
++@interface Foo: NSObject {
+ int c;
+ cxx_struct s;
+ }
+@@ -42,9 +45,11 @@
+ Class cls;
+
+ cls = objc_getClass("Foo");
+- CHECK_IF(cls->info & CLS_HAS_CXX_STRUCTORS);
++// printf((const char *)"Foo info %lx\n",cls->info);
++ CHECK_IF((cls->info & CLS_HAS_CXX_STRUCTORS) != 0);
+ cls = objc_getClass("Bar");
+- CHECK_IF(!(cls->info & CLS_HAS_CXX_STRUCTORS));
++// printf((const char *)"Bar info %lx\n",cls->info);
++ CHECK_IF((cls->info & CLS_HAS_CXX_STRUCTORS) == 0);
+
+ #else
+ /* No test needed or available. */
+Index: gcc/testsuite/obj-c++.dg/method-12.mm
+===================================================================
+--- a/src/gcc/testsuite/obj-c++.dg/method-12.mm (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/obj-c++.dg/method-12.mm (.../branches/gcc-4_7-branch)
+@@ -2,6 +2,7 @@
+ /* Author: Ziemowit Laski <zlaski@apple.com> */
+ /* { dg-options "-Wstrict-selector-match" } */
+ /* { dg-do compile } */
++/* { dg-skip-if "Object interface removed" { *-*-darwin[1-2]* && { lp64 } } { "-fnext-runtime" } { "" } } */
+
+ #include <objc/Protocol.h>
+
+@@ -19,13 +20,13 @@
+ Class receiver;
+
+ [receiver port]; /* { dg-warning "multiple methods named .\\+port. found" } */
+- /* { dg-message "using .\\-\\(unsigned( int)?\\)port." "" { target *-*-* } 9 } */
+- /* { dg-message "also found .\\+\\(Protocol \\*\\)port." "" { target *-*-* } 14 } */
++ /* { dg-message "using .\\-\\(unsigned( int)?\\)port." "" { target *-*-* } 10 } */
++ /* { dg-message "also found .\\+\\(Protocol \\*\\)port." "" { target *-*-* } 15 } */
+
+ [receiver starboard]; /* { dg-warning "no .\\+starboard. method found" } */
+- /* { dg-warning "Messages without a matching method signature" "" { target *-*-* } 25 } */
+- /* { dg-warning "will be assumed to return .id. and accept" "" { target *-*-* } 25 } */
+- /* { dg-warning ".\.\.\.. as arguments" "" { target *-*-* } 25 } */
++ /* { dg-warning "Messages without a matching method signature" "" { target *-*-* } 26 } */
++ /* { dg-warning "will be assumed to return .id. and accept" "" { target *-*-* } 26 } */
++ /* { dg-warning ".\.\.\.. as arguments" "" { target *-*-* } 26 } */
+
+ [Class port]; /* { dg-error ".Class. is not an Objective\\-C class name or alias" } */
+ }
+Index: gcc/testsuite/obj-c++.dg/torture/strings/const-str-10.mm
+===================================================================
+--- a/src/gcc/testsuite/obj-c++.dg/torture/strings/const-str-10.mm (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/obj-c++.dg/torture/strings/const-str-10.mm (.../branches/gcc-4_7-branch)
+@@ -6,10 +6,10 @@
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+ #include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
+
+-@interface NSString: Object
++@interface NSString: NSObject
+ @end
+
+ @interface NSSimpleCString : NSString {
+Index: gcc/testsuite/obj-c++.dg/torture/strings/const-str-11.mm
+===================================================================
+--- a/src/gcc/testsuite/obj-c++.dg/torture/strings/const-str-11.mm (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/obj-c++.dg/torture/strings/const-str-11.mm (.../branches/gcc-4_7-branch)
+@@ -7,10 +7,10 @@
+ /* { dg-options "-fconstant-string-class=XStr" } */
+ /* { dg-options "-mno-constant-cfstrings -fconstant-string-class=XStr" { target *-*-darwin* } } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+ #include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
+
+-@interface XString: Object {
++@interface XString: NSObject {
+ @protected
+ char *bytes;
+ }
+Index: gcc/testsuite/obj-c++.dg/torture/strings/const-str-9.mm
+===================================================================
+--- a/src/gcc/testsuite/obj-c++.dg/torture/strings/const-str-9.mm (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/obj-c++.dg/torture/strings/const-str-9.mm (.../branches/gcc-4_7-branch)
+@@ -5,10 +5,10 @@
+ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-options "-mno-constant-cfstrings" { target *-*-darwin* } } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+ #include "../../../objc-obj-c++-shared/runtime.h" /* For NEXT_OBJC_USE_NEW_INTERFACE. */
+
+-@interface NSConstantString: Object {
++@interface NSConstantString: NSObject {
+ char *cString;
+ unsigned int len;
+ }
+Index: gcc/testsuite/obj-c++.dg/strings/const-str-12.mm
+===================================================================
+--- a/src/gcc/testsuite/obj-c++.dg/strings/const-str-12.mm (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/obj-c++.dg/strings/const-str-12.mm (.../branches/gcc-4_7-branch)
+@@ -5,10 +5,16 @@
+ /* { dg-options "-fconstant-string-class=Foo" } */
+ /* { dg-options "-mno-constant-cfstrings -fconstant-string-class=Foo" { target *-*-darwin* } } */
+
++#ifdef __NEXT_RUNTIME__
++#include <Foundation/NSObject.h>
++#define OBJECT NSObject
++#else
+ #include <objc/Object.h>
++#define OBJECT Object
++#endif
+ #include "../../objc-obj-c++-shared/objc-test-suite-types.h"
+
+-@interface Foo: Object {
++@interface Foo: OBJECT {
+ char *cString;
+ unsigned int len;
+ }
+@@ -15,7 +21,7 @@
+ + (id)description;
+ @end
+
+-@interface Bar: Object
++@interface Bar: OBJECT
+ + (Foo *) getString: (int) which;
+ @end
+
+Index: gcc/testsuite/obj-c++.dg/strings/const-cfstring-5.mm
+===================================================================
+--- a/src/gcc/testsuite/obj-c++.dg/strings/const-cfstring-5.mm (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/obj-c++.dg/strings/const-cfstring-5.mm (.../branches/gcc-4_7-branch)
+@@ -6,9 +6,9 @@
+ /* { dg-skip-if "NeXT only" { *-*-* } { "-fgnu-runtime" } { "" } } */
+ /* { dg-options "-mconstant-cfstrings" } */
+
+-#include <objc/Object.h>
++#include <Foundation/NSObject.h>
+
+-@interface Foo: Object {
++@interface Foo: NSObject {
+ char *cString;
+ unsigned int len;
+ }
+@@ -15,7 +15,7 @@
+ + (Foo *)description;
+ @end
+
+-@interface Bar: Object
++@interface Bar: NSObject
+ + (Foo *) getString: (int) which;
+ @end
+
+Index: gcc/testsuite/obj-c++.dg/proto-lossage-7.mm
+===================================================================
+--- a/src/gcc/testsuite/obj-c++.dg/proto-lossage-7.mm (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/obj-c++.dg/proto-lossage-7.mm (.../branches/gcc-4_7-branch)
+@@ -1,12 +1,19 @@
+ /* Check that typedefs of ObjC classes preserve
+ any @protocol qualifiers. */
+ /* { dg-do compile } */
++
++#ifdef __NEXT_RUNTIME__
++#include <Foundation/NSObject.h>
++#define OBJECT NSObject
++#else
+ #include <objc/Object.h>
++#define OBJECT Object
++#endif
+
+ @protocol CanDoStuff;
+
+-typedef Object<CanDoStuff> CanDoStuffType;
+-typedef Object<CanDoStuff> *CanDoStuffTypePtr;
++typedef OBJECT<CanDoStuff> CanDoStuffType;
++typedef OBJECT<CanDoStuff> *CanDoStuffTypePtr;
+
+ @protocol CanDoStuff
+ - (int) dostuff;
+Index: gcc/testsuite/obj-c++.dg/syntax-error-1.mm
+===================================================================
+--- a/src/gcc/testsuite/obj-c++.dg/syntax-error-1.mm (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/testsuite/obj-c++.dg/syntax-error-1.mm (.../branches/gcc-4_7-branch)
+@@ -1,7 +1,13 @@
+ /* Graceful handling of a syntax error. */
+ /* { dg-do compile } */
+
++#ifdef __NEXT_RUNTIME__
++#include <Foundation/NSObject.h>
++#define OBJECT NSObject
++#else
+ #include <objc/Object.h>
++#define OBJECT Object
++#endif
+
+ class foo {
+ public:
+@@ -12,7 +18,7 @@
+
+ extern void NXLog(const char *, ...);
+
+-@interface Test2 : Object {
++@interface Test2 : OBJECT {
+ }
+ - (void) foo2;
+ @end
+@@ -23,4 +29,4 @@
+ } /* { dg-error "stray .\}. between Objective\\-C\\+\\+ methods" } */
+ @end
+
+-/* { dg-error "expected constructor, destructor, or type conversion before" "" { target *-*-* } 22 } */
++/* { dg-error "expected constructor, destructor, or type conversion before" "" { target *-*-* } 28 } */
+Index: gcc/cp/typeck.c
+===================================================================
+--- a/src/gcc/cp/typeck.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/cp/typeck.c (.../branches/gcc-4_7-branch)
+@@ -7246,7 +7246,7 @@
+ /* Handle null pointer to member function conversions. */
+ if (null_ptr_cst_p (pfn))
+ {
+- pfn = build_c_cast (input_location, type, nullptr_node);
++ pfn = build_c_cast (input_location, type, pfn);
+ return build_ptrmemfunc1 (to_type,
+ integer_zero_node,
+ pfn);
+@@ -7929,7 +7929,8 @@
+ && TREE_CODE (retval) == VAR_DECL
+ && DECL_CONTEXT (retval) == current_function_decl
+ && ! TREE_STATIC (retval)
+- && ! DECL_ANON_UNION_VAR_P (retval)
++ /* And not a lambda or anonymous union proxy. */
++ && !DECL_HAS_VALUE_EXPR_P (retval)
+ && (DECL_ALIGN (retval)
+ >= DECL_ALIGN (DECL_RESULT (current_function_decl)))
+ /* The cv-unqualified type of the returned value must be the
+@@ -7978,7 +7979,8 @@
+ Note that these conditions are similar to, but not as strict as,
+ the conditions for the named return value optimization. */
+ if ((cxx_dialect != cxx98)
+- && (TREE_CODE (retval) == VAR_DECL
++ && ((TREE_CODE (retval) == VAR_DECL
++ && !DECL_HAS_VALUE_EXPR_P (retval))
+ || TREE_CODE (retval) == PARM_DECL)
+ && DECL_CONTEXT (retval) == current_function_decl
+ && !TREE_STATIC (retval)
+Index: gcc/cp/decl.c
+===================================================================
+--- a/src/gcc/cp/decl.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/cp/decl.c (.../branches/gcc-4_7-branch)
+@@ -1815,9 +1815,9 @@
+ /* Merge the data types specified in the two decls. */
+ newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
+
+- /* If merge_types produces a non-typedef type, just use the old type. */
+- if (TREE_CODE (newdecl) == TYPE_DECL
+- && newtype == DECL_ORIGINAL_TYPE (newdecl))
++ /* For typedefs use the old type, as the new type's DECL_NAME points
++ at newdecl, which will be ggc_freed. */
++ if (TREE_CODE (newdecl) == TYPE_DECL)
+ newtype = oldtype;
+
+ if (TREE_CODE (newdecl) == VAR_DECL)
+Index: gcc/cp/except.c
+===================================================================
+--- a/src/gcc/cp/except.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/cp/except.c (.../branches/gcc-4_7-branch)
+@@ -383,6 +383,9 @@
+ {
+ tree type = body ? TREE_TYPE (body) : void_type_node;
+
++ if (!flag_exceptions)
++ return body;
++
+ if (cond && !value_dependent_expression_p (cond))
+ {
+ cond = cxx_constant_value (cond);
+Index: gcc/cp/tree.c
+===================================================================
+--- a/src/gcc/cp/tree.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/cp/tree.c (.../branches/gcc-4_7-branch)
+@@ -816,10 +816,12 @@
+
+ if (TYPE_MAIN_VARIANT (t) != m)
+ {
+- if (COMPLETE_TYPE_P (t) && !COMPLETE_TYPE_P (m))
++ if (COMPLETE_TYPE_P (TREE_TYPE (t)) && !COMPLETE_TYPE_P (m))
+ {
+ /* m was built before the element type was complete, so we
+- also need to copy the layout info from t. */
++ also need to copy the layout info from t. We might
++ end up doing this multiple times if t is an array of
++ unknown bound. */
+ tree size = TYPE_SIZE (t);
+ tree size_unit = TYPE_SIZE_UNIT (t);
+ unsigned int align = TYPE_ALIGN (t);
Index: gcc/cp/ChangeLog
===================================================================
--- a/src/gcc/cp/ChangeLog (.../tags/gcc_4_7_3_release)
+++ b/src/gcc/cp/ChangeLog (.../branches/gcc-4_7-branch)
-@@ -1,3 +1,18 @@
+@@ -1,3 +1,113 @@
++2014-02-26 Fabien Chêne <fabien@gcc.gnu.org>
++ PR c++/37140
++ * parser.c (cp_parser_nonclass_name): Call strip_using_decl and
++ move the code handling dependent USING_DECLs...
++ * name-lookup.c (strip_using_decl): ...Here.
++
++2014-02-21 Jason Merrill <jason@redhat.com>
++
++ PR c++/60248
++ * mangle.c (mangle_decl): Don't make an alias for a TYPE_DECL.
++
++2014-02-20 Kai Tietz <ktietz@redhat.com>
++
++ PR c++/58873
++ * parser.c (cp_parser_functional_cast): Treat NULL_TREE
++ valued type argument as error_mark_node.
++
++ PR c++/58835
++ * semantics.c (finish_fname): Handle error_mark_node.
++
++2014-02-19 Jason Merrill <jason@redhat.com>
++
++ PR c++/60046
++ * pt.c (maybe_instantiate_noexcept): Don't instantiate exception
++ spec from template context.
++
++2014-01-31 Jason Merrill <jason@redhat.com>
++
++ PR c++/57043
++ * pt.c (fn_type_unification): Don't do DEDUCE_EXACT check
++ during partial ordering.
++
++2014-01-27 Jason Merrill <jason@redhat.com>
++
++ PR c++/54652
++ * decl.c (duplicate_decls): Always use oldtype for TYPE_DECL.
++
++ PR c++/58639
++ * call.c (build_aggr_conv): Reject value-initialization of reference.
++
++2013-10-25 Tom de Vries <tom@codesourcery.com>
++
++ PR c++/58282
++ * except.c (build_must_not_throw_expr): Handle
++ flag_exceptions.
++
++2013-10-16 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/58633
++ * parser.c (cp_parser_pseudo_destructor_name): Revert r174385 changes.
++
++2013-09-13 Jason Merrill <jason@redhat.com>
++
++ PR c++/58273
++ * pt.c (any_type_dependent_elements_p): Actually check for
++ type-dependence, not value-dependence.
++
++2013-08-20 Jason Merrill <jason@redhat.com>
++
++ PR c++/58119
++ * cp-tree.h (WILDCARD_TYPE_P): Split out from...
++ (MAYBE_CLASS_TYPE_P): ...here.
++ * cvt.c (build_expr_type_conversion): Don't complain about a
++ template that can't match the desired type category.
++
++2012-12-03 Paolo Carlini <paolo.carlini@oracle.com>
++
++ PR c++/54170
++ * cvt.c (cp_convert_to_pointer): Don't discard side-effects from
++ expressions of nullptr_t.
++ * typeck.c (build_ptrmemfunc): Likewise.
++
++2013-07-09 Jason Merrill <jason@redhat.com>
++
++ PR c++/57437
++ * typeck.c (check_return_expr): Lambda proxies aren't eligible
++ for nrv or return by move.
++
++ PR c++/57545
++ * pt.c (convert_nontype_argument) [INTEGER_CST]: Force the
++ argument to have the exact type of the parameter.
++
++ PR c++/57551
++ * semantics.c (cxx_eval_indirect_ref): Don't try to look through
++ a POINTER_PLUS_EXPR for type punning diagnostic.
++
++ PR c++/57831
++ * pt.c (tsubst_copy): Handle USING_DECL.
++
++2013-05-20 Jason Merrill <jason@redhat.com>
++
++ PR c++/57325
++ * tree.c (build_cplus_array_type): Copy layout info if element
++ type is complete.
++
+2013-05-09 Jason Merrill <jason@redhat.com>
+
+ PR c++/57047
@@ -1384,11 +16145,80 @@ Index: gcc/cp/ChangeLog
2013-04-11 Release Manager
* GCC 4.7.3 released.
+Index: gcc/cp/pt.c
+===================================================================
+--- a/src/gcc/cp/pt.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/cp/pt.c (.../branches/gcc-4_7-branch)
+@@ -5521,6 +5521,10 @@
+ else
+ return NULL_TREE;
+ }
++
++ /* Avoid typedef problems. */
++ if (TREE_TYPE (expr) != type)
++ expr = fold_convert (type, expr);
+ }
+ /* [temp.arg.nontype]/5, bullet 2
+
+@@ -12214,6 +12218,9 @@
+ case TYPE_DECL:
+ return tsubst (t, args, complain, in_decl);
+
++ case USING_DECL:
++ t = DECL_NAME (t);
++ /* Fall through. */
+ case IDENTIFIER_NODE:
+ if (IDENTIFIER_TYPENAME_P (t))
+ {
+@@ -14706,8 +14713,11 @@
+
+ /* If we're looking for an exact match, check that what we got
+ is indeed an exact match. It might not be if some template
+- parameters are used in non-deduced contexts. */
+- if (strict == DEDUCE_EXACT)
++ parameters are used in non-deduced contexts. But don't check
++ for an exact match if we have dependent template arguments;
++ in that case we're doing partial ordering, and we already know
++ that we have two candidates that will provide the actual type. */
++ if (strict == DEDUCE_EXACT && !any_dependent_template_arguments_p (targs))
+ {
+ unsigned int i;
+
+@@ -18083,6 +18093,10 @@
+ {
+ tree fntype, spec, noex, clone;
+
++ /* Don't instantiate a noexcept-specification from template context. */
++ if (processing_template_decl)
++ return;
++
+ if (DECL_CLONED_FUNCTION_P (fn))
+ fn = DECL_CLONED_FUNCTION (fn);
+ fntype = TREE_TYPE (fn);
+@@ -19545,7 +19559,7 @@
+ any_type_dependent_elements_p (const_tree list)
+ {
+ for (; list; list = TREE_CHAIN (list))
+- if (value_dependent_expression_p (TREE_VALUE (list)))
++ if (type_dependent_expression_p (TREE_VALUE (list)))
+ return true;
+
+ return false;
Index: gcc/cp/semantics.c
===================================================================
--- a/src/gcc/cp/semantics.c (.../tags/gcc_4_7_3_release)
+++ b/src/gcc/cp/semantics.c (.../branches/gcc-4_7-branch)
-@@ -7412,15 +7412,17 @@
+@@ -2430,7 +2430,8 @@
+ tree decl;
+
+ decl = fname_decl (input_location, C_RID_CODE (id), id);
+- if (processing_template_decl && current_function_decl)
++ if (processing_template_decl && current_function_decl
++ && decl != error_mark_node)
+ decl = DECL_NAME (decl);
+ return decl;
+ }
+@@ -7412,7 +7413,7 @@
}
}
}
@@ -1397,6 +16227,7 @@ Index: gcc/cp/semantics.c
else if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE
&& (same_type_ignoring_top_level_qualifiers_p
(type, TREE_TYPE (TREE_TYPE (subtype)))))
+@@ -7419,8 +7420,10 @@
{
tree type_domain;
tree min_val = size_zero_node;
@@ -1409,7 +16240,19 @@ Index: gcc/cp/semantics.c
sub = build1_loc (loc, INDIRECT_REF, TREE_TYPE (subtype), sub);
type_domain = TYPE_DOMAIN (TREE_TYPE (sub));
if (type_domain && TYPE_MIN_VALUE (type_domain))
-@@ -8959,13 +8961,12 @@
+@@ -7457,11 +7460,6 @@
+ {
+ tree sub = op0;
+ STRIP_NOPS (sub);
+- if (TREE_CODE (sub) == POINTER_PLUS_EXPR)
+- {
+- sub = TREE_OPERAND (sub, 0);
+- STRIP_NOPS (sub);
+- }
+ if (TREE_CODE (sub) == ADDR_EXPR)
+ {
+ /* We couldn't fold to a constant value. Make sure it's not
+@@ -8959,13 +8957,12 @@
insert_capture_proxy (tree var)
{
cp_binding_level *b;
@@ -1424,7 +16267,7 @@ Index: gcc/cp/semantics.c
{
cp_binding_level *n = b->level_chain;
if (n->kind == sk_function_parms)
-@@ -8976,8 +8977,7 @@
+@@ -8976,8 +8973,7 @@
/* And put a DECL_EXPR in the STATEMENT_LIST for the same block. */
var = build_stmt (DECL_SOURCE_LOCATION (var), DECL_EXPR, var);
@@ -1438,7 +16281,45 @@ Index: gcc/cp/parser.c
===================================================================
--- a/src/gcc/cp/parser.c (.../tags/gcc_4_7_3_release)
+++ b/src/gcc/cp/parser.c (.../branches/gcc-4_7-branch)
-@@ -16691,7 +16691,7 @@
+@@ -6317,10 +6317,6 @@
+ /* Look for the `~'. */
+ cp_parser_require (parser, CPP_COMPL, RT_COMPL);
+
+- /* Once we see the ~, this has to be a pseudo-destructor. */
+- if (!processing_template_decl && !cp_parser_error_occurred (parser))
+- cp_parser_commit_to_tentative_parse (parser);
+-
+ /* Look for the type-name again. We are not responsible for
+ checking that it matches the first type-name. */
+ *type = cp_parser_nonclass_name (parser);
+@@ -13850,25 +13846,7 @@
+ /* Look up the type-name. */
+ type_decl = cp_parser_lookup_name_simple (parser, identifier, token->location);
+
+- if (TREE_CODE (type_decl) == USING_DECL)
+- {
+- if (!DECL_DEPENDENT_P (type_decl))
+- type_decl = strip_using_decl (type_decl);
+- else if (USING_DECL_TYPENAME_P (type_decl))
+- {
+- /* We have found a type introduced by a using
+- declaration at class scope that refers to a dependent
+- type.
+-
+- using typename :: [opt] nested-name-specifier unqualified-id ;
+- */
+- type_decl = make_typename_type (TREE_TYPE (type_decl),
+- DECL_NAME (type_decl),
+- typename_type, tf_error);
+- if (type_decl != error_mark_node)
+- type_decl = TYPE_NAME (type_decl);
+- }
+- }
++ type_decl = strip_using_decl (type_decl);
+
+ if (TREE_CODE (type_decl) != TYPE_DECL
+ && (objc_is_id (identifier) || objc_is_class_name (identifier)))
+@@ -16691,7 +16669,7 @@
cp_parser_late_return_type_opt (cp_parser* parser, cp_cv_quals quals)
{
cp_token *token;
@@ -1447,7 +16328,7 @@ Index: gcc/cp/parser.c
/* Peek at the next token. */
token = cp_lexer_peek_token (parser->lexer);
-@@ -16702,8 +16702,8 @@
+@@ -16702,8 +16680,8 @@
/* Consume the ->. */
cp_lexer_consume_token (parser->lexer);
@@ -1458,6 +16339,252 @@ Index: gcc/cp/parser.c
if (quals >= 0)
{
/* DR 1207: 'this' is in scope in the trailing return type. */
+@@ -21423,6 +21401,9 @@
+ tree cast;
+ bool nonconst_p;
+
++ if (!type)
++ type = error_mark_node;
++
+ if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
+ {
+ maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
+Index: gcc/cp/call.c
+===================================================================
+--- a/src/gcc/cp/call.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/cp/call.c (.../branches/gcc-4_7-branch)
+@@ -894,6 +894,9 @@
+
+ if (i < CONSTRUCTOR_NELTS (ctor))
+ val = CONSTRUCTOR_ELT (ctor, i)->value;
++ else if (TREE_CODE (ftype) == REFERENCE_TYPE)
++ /* Value-initialization of reference is ill-formed. */
++ return NULL;
+ else
+ {
+ if (empty_ctor == NULL_TREE)
+Index: gcc/cp/cvt.c
+===================================================================
+--- a/src/gcc/cp/cvt.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/cp/cvt.c (.../branches/gcc-4_7-branch)
+@@ -198,6 +198,8 @@
+
+ if (null_ptr_cst_p (expr))
+ {
++ tree val;
++
+ if (c_inhibit_evaluation_warnings == 0
+ && !NULLPTR_TYPE_P (TREE_TYPE (expr)))
+ warning (OPT_Wzero_as_null_pointer_constant,
+@@ -207,16 +209,14 @@
+ return build_ptrmemfunc (TYPE_PTRMEMFUNC_FN_TYPE (type), expr, 0,
+ /*c_cast_p=*/false, tf_warning_or_error);
+
+- if (TYPE_PTRMEM_P (type))
+- {
+- /* A NULL pointer-to-member is represented by -1, not by
+- zero. */
+- expr = build_int_cst_type (type, -1);
+- }
+- else
+- expr = build_int_cst (type, 0);
++ /* A NULL pointer-to-data-member is represented by -1, not by
++ zero. */
++ val = (TYPE_PTRMEM_P (type)
++ ? build_int_cst_type (type, -1)
++ : build_int_cst (type, 0));
+
+- return expr;
++ return (TREE_SIDE_EFFECTS (expr)
++ ? build2 (COMPOUND_EXPR, type, expr, val) : val);
+ }
+ else if (TYPE_PTR_TO_MEMBER_P (type) && INTEGRAL_CODE_P (form))
+ {
+@@ -1539,17 +1539,6 @@
+ if (DECL_NONCONVERTING_P (cand))
+ continue;
+
+- if (TREE_CODE (cand) == TEMPLATE_DECL)
+- {
+- if (complain)
+- {
+- error ("ambiguous default type conversion from %qT",
+- basetype);
+- error (" candidate conversions include %qD", cand);
+- }
+- return error_mark_node;
+- }
+-
+ candidate = non_reference (TREE_TYPE (TREE_TYPE (cand)));
+
+ switch (TREE_CODE (candidate))
+@@ -1583,11 +1572,23 @@
+ break;
+
+ default:
++ /* A wildcard could be instantiated to match any desired
++ type, but we can't deduce the template argument. */
++ if (WILDCARD_TYPE_P (candidate))
++ win = true;
+ break;
+ }
+
+ if (win)
+ {
++ if (TREE_CODE (cand) == TEMPLATE_DECL)
++ {
++ if (complain)
++ error ("default type conversion can't deduce template"
++ " argument for %qD", cand);
++ return error_mark_node;
++ }
++
+ if (winner)
+ {
+ if (complain)
+Index: gcc/cp/mangle.c
+===================================================================
+--- a/src/gcc/cp/mangle.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/cp/mangle.c (.../branches/gcc-4_7-branch)
+@@ -3378,6 +3378,7 @@
+
+ if (G.need_abi_warning
+ /* Don't do this for a fake symbol we aren't going to emit anyway. */
++ && TREE_CODE (decl) != TYPE_DECL
+ && !DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl)
+ && !DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (decl))
+ {
+Index: gcc/cp/cp-tree.h
+===================================================================
+--- a/src/gcc/cp/cp-tree.h (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/cp/cp-tree.h (.../branches/gcc-4_7-branch)
+@@ -1191,18 +1191,21 @@
+ /* The _DECL for this _TYPE. */
+ #define TYPE_MAIN_DECL(NODE) (TYPE_STUB_DECL (TYPE_MAIN_VARIANT (NODE)))
+
+-/* Nonzero if T is a class (or struct or union) type. Also nonzero
+- for template type parameters, typename types, and instantiated
+- template template parameters. Keep these checks in ascending code
+- order. */
+-#define MAYBE_CLASS_TYPE_P(T) \
++/* Nonzero if T is a type that could resolve to any kind of concrete type
++ at instantiation time. */
++#define WILDCARD_TYPE_P(T) \
+ (TREE_CODE (T) == TEMPLATE_TYPE_PARM \
+ || TREE_CODE (T) == TYPENAME_TYPE \
+ || TREE_CODE (T) == TYPEOF_TYPE \
+ || TREE_CODE (T) == BOUND_TEMPLATE_TEMPLATE_PARM \
+- || TREE_CODE (T) == DECLTYPE_TYPE \
+- || CLASS_TYPE_P (T))
++ || TREE_CODE (T) == DECLTYPE_TYPE)
+
++/* Nonzero if T is a class (or struct or union) type. Also nonzero
++ for template type parameters, typename types, and instantiated
++ template template parameters. Keep these checks in ascending code
++ order. */
++#define MAYBE_CLASS_TYPE_P(T) (WILDCARD_TYPE_P (T) || CLASS_TYPE_P (T))
++
+ /* Set CLASS_TYPE_P for T to VAL. T must be a class, struct, or
+ union type. */
+ #define SET_CLASS_TYPE_P(T, VAL) \
+Index: gcc/cp/name-lookup.c
+===================================================================
+--- a/src/gcc/cp/name-lookup.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/cp/name-lookup.c (.../branches/gcc-4_7-branch)
+@@ -399,7 +399,8 @@
+ }
+ }
+
+-/* Strip non dependent using declarations. */
++/* Strip non dependent using declarations. If DECL is dependent,
++ surreptitiously create a typename_type and return it. */
+
+ tree
+ strip_using_decl (tree decl)
+@@ -409,6 +410,23 @@
+
+ while (TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
+ decl = USING_DECL_DECLS (decl);
++
++ if (TREE_CODE (decl) == USING_DECL && DECL_DEPENDENT_P (decl)
++ && USING_DECL_TYPENAME_P (decl))
++ {
++ /* We have found a type introduced by a using
++ declaration at class scope that refers to a dependent
++ type.
++
++ using typename :: [opt] nested-name-specifier unqualified-id ;
++ */
++ decl = make_typename_type (TREE_TYPE (decl),
++ DECL_NAME (decl),
++ typename_type, tf_error);
++ if (decl != error_mark_node)
++ decl = TYPE_NAME (decl);
++ }
++
+ return decl;
+ }
+
+Index: gcc/tree-ssa-ccp.c
+===================================================================
+--- a/src/gcc/tree-ssa-ccp.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/tree-ssa-ccp.c (.../branches/gcc-4_7-branch)
+@@ -1744,6 +1744,9 @@
+ insert_clobber_before_stack_restore (gimple_phi_result (stmt), var,
+ visited);
+ }
++ else if (gimple_assign_ssa_name_copy_p (stmt))
++ insert_clobber_before_stack_restore (gimple_assign_lhs (stmt), var,
++ visited);
+ else
+ gcc_assert (is_gimple_debug (stmt));
+ }
+Index: gcc/sel-sched.c
+===================================================================
+--- a/src/gcc/sel-sched.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/sel-sched.c (.../branches/gcc-4_7-branch)
+@@ -1263,7 +1263,7 @@
+
+ if (!HARD_FRAME_POINTER_IS_FRAME_POINTER)
+ add_to_hard_reg_set (&reg_rename_p->unavailable_hard_regs,
+- Pmode, HARD_FRAME_POINTER_IS_FRAME_POINTER);
++ Pmode, HARD_FRAME_POINTER_REGNUM);
+ }
+
+ #ifdef STACK_REGS
+Index: gcc/gimple-low.c
+===================================================================
+--- a/src/gcc/gimple-low.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/gimple-low.c (.../branches/gcc-4_7-branch)
+@@ -249,6 +249,7 @@
+ break;
+ arg = gimple_call_arg (stmt, i);
+ if (p == error_mark_node
++ || DECL_ARG_TYPE (p) == error_mark_node
+ || arg == error_mark_node
+ || (!types_compatible_p (DECL_ARG_TYPE (p), TREE_TYPE (arg))
+ && !fold_convertible_p (DECL_ARG_TYPE (p), arg)))
+Index: gcc/tree-ssa-sink.c
+===================================================================
+--- a/src/gcc/tree-ssa-sink.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/tree-ssa-sink.c (.../branches/gcc-4_7-branch)
+@@ -412,7 +412,15 @@
+ && gimple_vdef (use_stmt)
+ && operand_equal_p (gimple_assign_lhs (stmt),
+ gimple_assign_lhs (use_stmt), 0))
+- continue;
++ {
++ /* If use_stmt is or might be a nop assignment then USE_STMT
++ acts as a use as well as definition. */
++ if (stmt != use_stmt
++ && ref_maybe_used_by_stmt_p (use_stmt,
++ gimple_assign_lhs (stmt)))
++ return false;
++ continue;
++ }
+
+ if (gimple_code (use_stmt) != GIMPLE_PHI)
+ return false;
Index: gcc/dwarf2out.c
===================================================================
--- a/src/gcc/dwarf2out.c (.../tags/gcc_4_7_3_release)
@@ -1497,11 +16624,673 @@ Index: gcc/predict.c
probability = ((REG_BR_PROB_BASE + nitercst / 2) / nitercst);
predict_edge (ex, predictor, probability);
}
+Index: gcc/recog.c
+===================================================================
+--- a/src/gcc/recog.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/recog.c (.../branches/gcc-4_7-branch)
+@@ -3030,6 +3030,9 @@
+ return 1;
+ }
+
++/* Regno offset to be used in the register search. */
++static int search_ofs;
++
+ /* Try to find a hard register of mode MODE, matching the register class in
+ CLASS_STR, which is available at the beginning of insn CURRENT_INSN and
+ remains available until the end of LAST_INSN. LAST_INSN may be NULL_RTX,
+@@ -3045,7 +3048,6 @@
+ peep2_find_free_register (int from, int to, const char *class_str,
+ enum machine_mode mode, HARD_REG_SET *reg_set)
+ {
+- static int search_ofs;
+ enum reg_class cl;
+ HARD_REG_SET live;
+ df_ref *def_rec;
+@@ -3488,6 +3490,7 @@
+ /* Initialize the regsets we're going to use. */
+ for (i = 0; i < MAX_INSNS_PER_PEEP2 + 1; ++i)
+ peep2_insn_data[i].live_before = BITMAP_ALLOC (&reg_obstack);
++ search_ofs = 0;
+ live = BITMAP_ALLOC (&reg_obstack);
+
+ FOR_EACH_BB_REVERSE (bb)
+Index: gcc/ada/ChangeLog
+===================================================================
+--- a/src/gcc/ada/ChangeLog (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/ada/ChangeLog (.../branches/gcc-4_7-branch)
+@@ -1,3 +1,44 @@
++2014-03-13 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR ada/51483
++ * back_end.ads (Register_Type_Proc): Add 'precision' parameter.
++ * cstand.adb (Register_Float_Type): Add 'precision' parameter and use
++ it to set the RM size. Use directly 'size' for the Esize.
++ * gcc-interface/gigi.h (enumerate_modes): Add integer parameter.
++ * gcc-interface/misc.c (enumerate_modes): Likewise. Do not register
++ types for vector modes, pass the size in addition to the precision.
++
++2014-01-12 Eric Botcazou <ebotcazou@adacore.com>
++
++ PR ada/59772
++ * gcc-interface/cuintp.c (build_cst_from_int): Use 32-bit integer type
++ as intermediate type.
++ (UI_To_gnu): Likewise.
++
++2013-12-12 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc-interface/Make-lang.in (ada/doctools/xgnatugn): Use gnatmake.
++
++2013-10-19 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc-interface/utils.c (gnat_set_type_context): New function.
++ (gnat_pushdecl): Use it to set the context of the type.
++
++2013-09-18 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc-interface/trans.c (Subprogram_Body_to_gnu): Pop the stack of
++ return variables for subprograms using the CICO mechanism.
++
++2013-08-13 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc-interface/trans.c (can_equal_min_or_max_val_p): Be prepared for
++ values outside of the range of the type.
++
++2013-05-26 Eric Botcazou <ebotcazou@adacore.com>
++
++ * gcc-interface/trans.c (Attribute_to_gnu) <Attr_Last_Bit>: Add kludge
++ to avoid generating an overflow for -1.
++
+ 2013-04-11 Release Manager
+
+ * GCC 4.7.3 released.
+Index: gcc/ada/cstand.adb
+===================================================================
+--- a/src/gcc/ada/cstand.adb (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/ada/cstand.adb (.../branches/gcc-4_7-branch)
+@@ -151,6 +151,7 @@
+ Complex : Boolean; -- True iff type has real and imaginary parts
+ Count : Natural; -- Number of elements in vector, 0 otherwise
+ Float_Rep : Float_Rep_Kind; -- Representation used for fpt type
++ Precision : Positive; -- Precision of representation in bits
+ Size : Positive; -- Size of representation in bits
+ Alignment : Natural); -- Required alignment in bits
+ pragma Convention (C, Register_Float_Type);
+@@ -2015,6 +2016,7 @@
+ Complex : Boolean;
+ Count : Natural;
+ Float_Rep : Float_Rep_Kind;
++ Precision : Positive;
+ Size : Positive;
+ Alignment : Natural)
+ is
+@@ -2064,14 +2066,25 @@
+
+ else
+ Write_Str ("mod 2**");
+- Write_Int (Int (Size / Positive'Max (1, Count)));
++ Write_Int (Int (Precision / Positive'Max (1, Count)));
+ Write_Line (";");
+ end if;
+
+- Write_Str ("for " & T & "'Size use ");
+- Write_Int (Int (Size));
+- Write_Line (";");
++ if Precision = Size then
++ Write_Str ("for " & T (1 .. Last) & "'Size use ");
++ Write_Int (Int (Size));
++ Write_Line (";");
+
++ else
++ Write_Str ("for " & T (1 .. Last) & "'Value_Size use ");
++ Write_Int (Int (Precision));
++ Write_Line (";");
++
++ Write_Str ("for " & T (1 .. Last) & "'Object_Size use ");
++ Write_Int (Int (Size));
++ Write_Line (";");
++ end if;
++
+ Write_Str ("for " & T & "'Alignment use ");
+ Write_Int (Int (Alignment / 8));
+ Write_Line (";");
+@@ -2093,15 +2106,13 @@
+ if Digs > 0 and then not Complex and then Count = 0 then
+ declare
+ Ent : constant Entity_Id := New_Standard_Entity;
+- Esize : constant Pos := Pos ((Size + Alignment - 1)
+- / Alignment * Alignment);
+ begin
+ Set_Defining_Identifier
+ (New_Node (N_Full_Type_Declaration, Stloc), Ent);
+ Make_Name (Ent, T (1 .. Last));
+ Set_Scope (Ent, Standard_Standard);
+- Build_Float_Type (Ent, Esize, Float_Rep, Pos (Digs));
+- Set_RM_Size (Ent, UI_From_Int (Int (Size)));
++ Build_Float_Type (Ent, Int (Size), Float_Rep, Pos (Digs));
++ Set_RM_Size (Ent, UI_From_Int (Int (Precision)));
+ Set_Alignment (Ent, UI_From_Int (Int (Alignment / 8)));
+
+ if No (Back_End_Float_Types) then
+Index: gcc/ada/back_end.ads
+===================================================================
+--- a/src/gcc/ada/back_end.ads (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/ada/back_end.ads (.../branches/gcc-4_7-branch)
+@@ -55,6 +55,7 @@
+ Complex : Boolean; -- True iff type has real and imaginary parts
+ Count : Natural; -- Number of elements in vector, 0 otherwise
+ Float_Rep : Float_Rep_Kind; -- Representation used for fpt type
++ Precision : Positive; -- Precision of representation in bits
+ Size : Positive; -- Size of representation in bits
+ Alignment : Natural); -- Required alignment in bits
+ pragma Convention (C, Register_Type_Proc);
+Index: gcc/ada/gcc-interface/utils.c
+===================================================================
+--- a/src/gcc/ada/gcc-interface/utils.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/ada/gcc-interface/utils.c (.../branches/gcc-4_7-branch)
+@@ -500,6 +500,22 @@
+ free_binding_level = level;
+ }
+
++/* Set the context of TYPE and its parallel types (if any) to CONTEXT. */
++
++static void
++gnat_set_type_context (tree type, tree context)
++{
++ tree decl = TYPE_STUB_DECL (type);
++
++ TYPE_CONTEXT (type) = context;
++
++ while (decl && DECL_PARALLEL_TYPE (decl))
++ {
++ TYPE_CONTEXT (DECL_PARALLEL_TYPE (decl)) = context;
++ decl = TYPE_STUB_DECL (DECL_PARALLEL_TYPE (decl));
++ }
++}
++
+ /* Record DECL as belonging to the current lexical scope and use GNAT_NODE
+ for location information and flag propagation. */
+
+@@ -581,7 +597,7 @@
+ if (TREE_CODE (t) == POINTER_TYPE)
+ TYPE_NEXT_PTR_TO (t) = tt;
+ TYPE_NAME (tt) = DECL_NAME (decl);
+- TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
++ gnat_set_type_context (tt, DECL_CONTEXT (decl));
+ TYPE_STUB_DECL (tt) = TYPE_STUB_DECL (t);
+ DECL_ORIGINAL_TYPE (decl) = tt;
+ }
+@@ -591,7 +607,7 @@
+ /* We need a variant for the placeholder machinery to work. */
+ tree tt = build_variant_type_copy (t);
+ TYPE_NAME (tt) = decl;
+- TYPE_CONTEXT (tt) = DECL_CONTEXT (decl);
++ gnat_set_type_context (tt, DECL_CONTEXT (decl));
+ TREE_USED (tt) = TREE_USED (t);
+ TREE_TYPE (decl) = tt;
+ if (DECL_ORIGINAL_TYPE (TYPE_NAME (t)))
+@@ -613,7 +629,7 @@
+ if (!(TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL))
+ {
+ TYPE_NAME (t) = decl;
+- TYPE_CONTEXT (t) = DECL_CONTEXT (decl);
++ gnat_set_type_context (t, DECL_CONTEXT (decl));
+ }
+ }
+ }
+Index: gcc/ada/gcc-interface/cuintp.c
+===================================================================
+--- a/src/gcc/ada/gcc-interface/cuintp.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/ada/gcc-interface/cuintp.c (.../branches/gcc-4_7-branch)
+@@ -6,7 +6,7 @@
+ * *
+ * C Implementation File *
+ * *
+- * Copyright (C) 1992-2010, Free Software Foundation, Inc. *
++ * Copyright (C) 1992-2014, Free Software Foundation, Inc. *
+ * *
+ * GNAT is free software; you can redistribute it and/or modify it under *
+ * terms of the GNU General Public License as published by the Free Soft- *
+@@ -59,8 +59,8 @@
+ static tree
+ build_cst_from_int (tree type, HOST_WIDE_INT low)
+ {
+- if (TREE_CODE (type) == REAL_TYPE)
+- return convert (type, build_int_cst (NULL_TREE, low));
++ if (SCALAR_FLOAT_TYPE_P (type))
++ return convert (type, build_int_cst (gnat_type_for_size (32, 0), low));
+ else
+ return build_int_cst_type (type, low);
+ }
+@@ -99,20 +99,13 @@
+ gcc_assert (Length > 0);
+
+ /* The computations we perform below always require a type at least as
+- large as an integer not to overflow. REAL types are always fine, but
++ large as an integer not to overflow. FP types are always fine, but
+ INTEGER or ENUMERAL types we are handed may be too short. We use a
+ base integer type node for the computations in this case and will
+- convert the final result back to the incoming type later on.
+- The base integer precision must be superior than 16. */
++ convert the final result back to the incoming type later on. */
++ if (!SCALAR_FLOAT_TYPE_P (comp_type) && TYPE_PRECISION (comp_type) < 32)
++ comp_type = gnat_type_for_size (32, 0);
+
+- if (TREE_CODE (comp_type) != REAL_TYPE
+- && TYPE_PRECISION (comp_type)
+- < TYPE_PRECISION (long_integer_type_node))
+- {
+- comp_type = long_integer_type_node;
+- gcc_assert (TYPE_PRECISION (comp_type) > 16);
+- }
+-
+ gnu_base = build_cst_from_int (comp_type, Base);
+
+ gnu_ret = build_cst_from_int (comp_type, First);
+Index: gcc/ada/gcc-interface/Make-lang.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/Make-lang.in (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/ada/gcc-interface/Make-lang.in (.../branches/gcc-4_7-branch)
+@@ -660,7 +660,7 @@
+ ada/doctools/xgnatugn$(build_exeext): ada/xgnatugn.adb
+ -$(MKDIR) ada/doctools
+ $(CP) $^ ada/doctools
+- cd ada/doctools && $(GNATMAKE) -q xgnatugn
++ cd ada/doctools && gnatmake -q xgnatugn
+
+ # Note that doc/gnat_ugn.texi and doc/projects.texi do not depend on
+ # xgnatugn being built so we can distribute a pregenerated doc/gnat_ugn.info
+Index: gcc/ada/gcc-interface/gigi.h
+===================================================================
+--- a/src/gcc/ada/gcc-interface/gigi.h (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/ada/gcc-interface/gigi.h (.../branches/gcc-4_7-branch)
+@@ -992,7 +992,7 @@
+ /* This function is called by the front-end to enumerate all the supported
+ modes for the machine, as well as some predefined C types. */
+ extern void enumerate_modes (void (*f) (const char *, int, int, int, int, int,
+- int));
++ int, int));
+
+ #ifdef __cplusplus
+ }
+Index: gcc/ada/gcc-interface/trans.c
+===================================================================
+--- a/src/gcc/ada/gcc-interface/trans.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/ada/gcc-interface/trans.c (.../branches/gcc-4_7-branch)
+@@ -1901,14 +1901,19 @@
+ gnu_result = bitsize_int (bitpos % BITS_PER_UNIT);
+ gnu_result = size_binop (PLUS_EXPR, gnu_result,
+ TYPE_SIZE (TREE_TYPE (gnu_prefix)));
+- gnu_result = size_binop (MINUS_EXPR, gnu_result,
+- bitsize_one_node);
++ /* ??? Avoid a large unsigned result that will overflow when
++ converted to the signed universal_integer. */
++ if (integer_zerop (gnu_result))
++ gnu_result = integer_minus_one_node;
++ else
++ gnu_result
++ = size_binop (MINUS_EXPR, gnu_result, bitsize_one_node);
+ break;
+
+ case Attr_Bit_Position:
+ gnu_result = gnu_field_bitpos;
+ break;
+- }
++ }
+
+ /* If this has a PLACEHOLDER_EXPR, qualify it by the object we are
+ handling. */
+@@ -2227,7 +2232,10 @@
+ if (TREE_CODE (val) != INTEGER_CST)
+ return true;
+
+- return tree_int_cst_equal (val, min_or_max_val) == 1;
++ if (max)
++ return tree_int_cst_lt (val, min_or_max_val) == 0;
++ else
++ return tree_int_cst_lt (min_or_max_val, val) == 0;
+ }
+
+ /* Return true if VAL (of type TYPE) can equal the minimum value of TYPE.
+@@ -3430,6 +3438,8 @@
+ {
+ tree gnu_retval;
+
++ VEC_pop (tree, gnu_return_var_stack);
++
+ add_stmt (gnu_result);
+ add_stmt (build1 (LABEL_EXPR, void_type_node,
+ VEC_last (tree, gnu_return_label_stack)));
+Index: gcc/ada/gcc-interface/misc.c
+===================================================================
+--- a/src/gcc/ada/gcc-interface/misc.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/ada/gcc-interface/misc.c (.../branches/gcc-4_7-branch)
+@@ -632,7 +632,7 @@
+ /* This function is called by the front-end to enumerate all the supported
+ modes for the machine, as well as some predefined C types. F is a function
+ which is called back with the parameters as listed below, first a string,
+- then six ints. The name is any arbitrary null-terminated string and has
++ then seven ints. The name is any arbitrary null-terminated string and has
+ no particular significance, except for the case of predefined C types, where
+ it should be the name of the C type. For integer types, only signed types
+ should be listed, unsigned versions are assumed. The order of types should
+@@ -648,11 +648,12 @@
+ COMPLEX_P nonzero is this represents a complex mode
+ COUNT count of number of items, nonzero for vector mode
+ FLOAT_REP Float_Rep_Kind for FP, otherwise undefined
+- SIZE number of bits used to store data
++ PRECISION number of bits used to store data
++ SIZE number of bits occupied by the mode
+ ALIGN number of bits to which mode is aligned. */
+
+ void
+-enumerate_modes (void (*f) (const char *, int, int, int, int, int, int))
++enumerate_modes (void (*f) (const char *, int, int, int, int, int, int, int))
+ {
+ const tree c_types[]
+ = { float_type_node, double_type_node, long_double_type_node };
+@@ -726,28 +727,26 @@
+
+ /* First register any C types for this mode that the front end
+ may need to know about, unless the mode should be skipped. */
+-
+- if (!skip_p)
++ if (!skip_p && !vector_p)
+ for (nameloop = 0; nameloop < ARRAY_SIZE (c_types); nameloop++)
+ {
+- tree typ = c_types[nameloop];
+- const char *nam = c_names[nameloop];
++ tree type = c_types[nameloop];
++ const char *name = c_names[nameloop];
+
+- if (TYPE_MODE (typ) == i)
++ if (TYPE_MODE (type) == i)
+ {
+- f (nam, digs, complex_p,
+- vector_p ? GET_MODE_NUNITS (i) : 0, float_rep,
+- TYPE_PRECISION (typ), TYPE_ALIGN (typ));
++ f (name, digs, complex_p, 0, float_rep, TYPE_PRECISION (type),
++ TREE_INT_CST_LOW (TYPE_SIZE (type)), TYPE_ALIGN (type));
+ skip_p = true;
+ }
+ }
+
+ /* If no predefined C types were found, register the mode itself. */
+-
+ if (!skip_p)
+ f (GET_MODE_NAME (i), digs, complex_p,
+ vector_p ? GET_MODE_NUNITS (i) : 0, float_rep,
+- GET_MODE_PRECISION (i), GET_MODE_ALIGNMENT (i));
++ GET_MODE_PRECISION (i), GET_MODE_BITSIZE (i),
++ GET_MODE_ALIGNMENT (i));
+ }
+ }
+
+Index: gcc/c-decl.c
+===================================================================
+--- a/src/gcc/c-decl.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/c-decl.c (.../branches/gcc-4_7-branch)
+@@ -4618,7 +4618,9 @@
+ {
+ int failure = complete_array_type (&TREE_TYPE (decl),
+ DECL_INITIAL (decl), true);
+- gcc_assert (!failure);
++ /* If complete_array_type returns 3, it means that the
++ initial value of the compound literal is empty. Allow it. */
++ gcc_assert (failure == 0 || failure == 3);
+
+ type = TREE_TYPE (decl);
+ TREE_TYPE (DECL_INITIAL (decl)) = type;
+Index: gcc/tree-eh.c
+===================================================================
+--- a/src/gcc/tree-eh.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/tree-eh.c (.../branches/gcc-4_7-branch)
+@@ -1328,9 +1328,6 @@
+ x = gimple_seq_last_stmt (finally);
+ finally_loc = x ? gimple_location (x) : tf_loc;
+
+- /* Lower the finally block itself. */
+- lower_eh_constructs_1 (state, finally);
+-
+ /* Prepare for switch statement generation. */
+ nlabels = VEC_length (tree, tf->dest_array);
+ return_index = nlabels;
+@@ -1414,6 +1411,7 @@
+ x = gimple_build_label (finally_label);
+ gimple_seq_add_stmt (&tf->top_p_seq, x);
+
++ lower_eh_constructs_1 (state, finally);
+ gimple_seq_add_seq (&tf->top_p_seq, finally);
+
+ /* Redirect each incoming goto edge. */
+Index: gcc/fortran/interface.c
+===================================================================
+--- a/src/gcc/fortran/interface.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/fortran/interface.c (.../branches/gcc-4_7-branch)
+@@ -987,7 +987,8 @@
+ bool type_must_agree, char *errmsg, int err_len)
+ {
+ /* Check type and rank. */
+- if (type_must_agree && !compare_type_rank (s2, s1))
++ if (type_must_agree &&
++ (!compare_type_rank (s1, s2) || !compare_type_rank (s2, s1)))
+ {
+ if (errmsg != NULL)
+ snprintf (errmsg, err_len, "Type/rank mismatch in argument '%s'",
+Index: gcc/fortran/trans-expr.c
+===================================================================
+--- a/src/gcc/fortran/trans-expr.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/fortran/trans-expr.c (.../branches/gcc-4_7-branch)
+@@ -5595,7 +5595,13 @@
+ /* Returns a reference to the scalar evaluated outside the loop
+ for this case. */
+ gfc_conv_expr (se, expr);
+- se->expr = gfc_build_addr_expr (NULL_TREE, se->expr);
++
++ if (expr->ts.type == BT_CHARACTER
++ && expr->expr_type != EXPR_FUNCTION)
++ gfc_conv_string_parameter (se);
++ else
++ se->expr = gfc_build_addr_expr (NULL_TREE, se->expr);
++
+ return;
+ }
+
+Index: gcc/fortran/trans-array.c
+===================================================================
+--- a/src/gcc/fortran/trans-array.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/fortran/trans-array.c (.../branches/gcc-4_7-branch)
+@@ -2465,6 +2465,11 @@
+ a reference to the value. */
+ gfc_conv_expr (&se, expr);
+ }
++
++ /* Ensure that a pointer to the string is stored. */
++ if (expr->ts.type == BT_CHARACTER)
++ gfc_conv_string_parameter (&se);
++
+ gfc_add_block_to_block (&outer_loop->pre, &se.pre);
+ gfc_add_block_to_block (&outer_loop->post, &se.post);
+ if (gfc_is_class_scalar_expr (expr))
+Index: gcc/fortran/decl.c
+===================================================================
+--- a/src/gcc/fortran/decl.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/fortran/decl.c (.../branches/gcc-4_7-branch)
+@@ -7301,6 +7301,7 @@
+
+
+ /* Check a derived type that is being extended. */
++
+ static gfc_symbol*
+ check_extended_derived_type (char *name)
+ {
+@@ -7312,14 +7313,15 @@
+ return NULL;
+ }
+
++ extended = gfc_find_dt_in_generic (extended);
++
++ /* F08:C428. */
+ if (!extended)
+ {
+- gfc_error ("No such symbol in TYPE definition at %C");
++ gfc_error ("Symbol '%s' at %C has not been previously defined", name);
+ return NULL;
+ }
+
+- extended = gfc_find_dt_in_generic (extended);
+-
+ if (extended->attr.flavor != FL_DERIVED)
+ {
+ gfc_error ("'%s' in EXTENDS expression at %C is not a "
+Index: gcc/fortran/dump-parse-tree.c
+===================================================================
+--- a/src/gcc/fortran/dump-parse-tree.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/fortran/dump-parse-tree.c (.../branches/gcc-4_7-branch)
+@@ -104,7 +104,8 @@
+ break;
+
+ case BT_CHARACTER:
+- show_expr (ts->u.cl->length);
++ if (ts->u.cl)
++ show_expr (ts->u.cl->length);
+ fprintf(dumpfile, " %d", ts->kind);
+ break;
+
Index: gcc/fortran/ChangeLog
===================================================================
--- a/src/gcc/fortran/ChangeLog (.../tags/gcc_4_7_3_release)
+++ b/src/gcc/fortran/ChangeLog (.../branches/gcc-4_7-branch)
-@@ -1,3 +1,39 @@
+@@ -1,3 +1,169 @@
++2014-03-09 Janus Weil <janus@gcc.gnu.org>
++
++ Backport from 4.8
++ 2014-03-08 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/60450
++ * simplify.c (gfc_simplify_shape): Only clear shape if it was really
++ created successfully.
++
++2014-03-02 Mikael Morin <mikael@gcc.gnu.org>
++
++ PR fortran/60341
++ * frontend-passes.c (optimize_comparison): Guard two union accesses
++ with the corresponding tag checks.
++
++2014-02-22 Mikael Morin <mikael@gcc.gnu.org>
++
++ PR fortran/59599
++ * trans-intrinsic.c (gfc_conv_intrinsic_ichar): Calculate the
++ number of arguments.
++
++2014-02-20 Janus Weil <janus@gcc.gnu.org>
++
++ Backport from mainline
++ 2014-02-17 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/55907
++ * resolve.c (build_default_init_expr): Don't initialize character
++ variable if -fno-automatic is given.
++
++2014-02-08 Mikael Morin <mikael@gcc.gnu.org>
++
++ PR fortran/57033
++ * primary.c (gfc_convert_to_structure_constructor): Avoid null pointer
++ dereference.
++
++2014-02-08 Paul Thomas <pault@gcc.gnu.org>
++
++ PR fortran/59906
++ * trans-array.c (gfc_add_loop_ss_code): In the case of character
++ SS_REFERENCE, use gfc_conv_string_parameter to ensure that a
++ pointer to the string is stored.
++ * trans-expr.c (gfc_conv_expr_reference): Likewise, use
++ gfc_conv_string_parameter to ensure that a pointer to is passed
++ to the elemental function.
++
++2014-02-03 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/59941
++ * expr.c (replace_comp): Check for isym to avoid ICE.
++
++2014-01-27 Mikael Morin <mikael@gcc.gnu.org>
++
++ PR fortran/58007
++ * module.c (skip_list): Don't use default argument value.
++ (load_derived_extensions, read_module): Update callers.
++
++2014-01-26 Mikael Morin <mikael@gcc.gnu.org>
++
++ PR fortran/58007
++ * module.c (fp2, find_pointer2): Remove.
++ (mio_component_ref): Don't forcedfully set the containing derived type
++ symbol for loading. Remove unused argument.
++ (mio_ref): Update caller
++ (skip_list): New argument nest_level. Initialize level with the new
++ argument.
++ (read_module): Add forced pointer components association for derived
++ type symbols.
++
++2014-01-11 Janus Weil <janus@gcc.gnu.org>
++
++ Backport from mainline
++ 2013-12-29 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/59612
++ PR fortran/57042
++ * dump-parse-tree.c (show_typespec): Check for charlen.
++ * invoke.texi: Fix documentation of -fdump-fortran-optimized and
++ -fdump-parse-tree.
++
++2013-11-17 Paul Thomas <pault@gcc.gnu.org>
++
++ PR fortran/58771
++ * trans-io.c (transfer_expr): If the backend_decl for a derived
++ type is missing, build it with gfc_typenode_for_spec.
++
++2013-11-02 Janus Weil <janus@gcc.gnu.org>
++
++ Backport from mainline
++ 2013-09-23 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/58355
++ * decl.c (check_extended_derived_type): Prevent segfault, modify error
++ message.
++
++2013-08-11 Janus Weil <janus@gcc.gnu.org>
++
++ Backport from trunk:
++ 2013-08-09 Janus Weil <janus@gcc.gnu.org>
++
++ PR fortran/58058
++ * trans-intrinsic.c (gfc_conv_intrinsic_transfer): Free the temporary
++ string, if necessary.
++
++2013-07-08 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/57785
++ * simplify.c (compute_dot_product): Complex conjugate for
++ dot_product.
++ (gfc_simplify_dot_product, gfc_simplify_matmul): Update call.
++
++2013-06-06 Tobias Burnus <burnus@net-b.de>
++
++ Backport from mainline
++ 2012-08-27 Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/54370
++ * trans-stmt.c (gfc_trans_do_while): Don't change the logical
++ kind for negation of the condition.
++
++2013-06-01 Janus Weil <janus@gcc.gnu.org>
++ Tobias Burnus <burnus@net-b.de>
++
++ PR fortran/57217
++ * interface.c (check_dummy_characteristics): Symmetrize type check.
++
++2013-05-22 Janne Blomqvist <jb@gcc.gnu.org>
++
++ * intrinsic.texi (RANDOM_SEED): Improve example.
++
+2013-05-07 Tobias Burnus <burnus@net-b.de>
+
+ Backport from mainline
@@ -1541,6 +17330,19 @@ Index: gcc/fortran/ChangeLog
2013-04-11 Release Manager
* GCC 4.7.3 released.
+Index: gcc/fortran/trans-stmt.c
+===================================================================
+--- a/src/gcc/fortran/trans-stmt.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/fortran/trans-stmt.c (.../branches/gcc-4_7-branch)
+@@ -1743,7 +1743,7 @@
+ gfc_conv_expr_val (&cond, code->expr1);
+ gfc_add_block_to_block (&block, &cond.pre);
+ cond.expr = fold_build1_loc (code->expr1->where.lb->location,
+- TRUTH_NOT_EXPR, boolean_type_node, cond.expr);
++ TRUTH_NOT_EXPR, TREE_TYPE (cond.expr), cond.expr);
+
+ /* Build "IF (! cond) GOTO exit_label". */
+ tmp = build1_v (GOTO_EXPR, exit_label);
Index: gcc/fortran/expr.c
===================================================================
--- a/src/gcc/fortran/expr.c (.../tags/gcc_4_7_3_release)
@@ -1560,6 +17362,269 @@ Index: gcc/fortran/expr.c
}
else
{
+@@ -4191,7 +4195,7 @@
+ gfc_component *comp;
+ comp = (gfc_component *)sym;
+ if ((expr->expr_type == EXPR_VARIABLE
+- || (expr->expr_type == EXPR_FUNCTION
++ || (expr->expr_type == EXPR_FUNCTION && !expr->value.function.isym
+ && !gfc_is_intrinsic (expr->symtree->n.sym, 0, expr->where)))
+ && expr->symtree->n.sym->ns == comp->ts.interface->formal_ns)
+ {
+Index: gcc/fortran/module.c
+===================================================================
+--- a/src/gcc/fortran/module.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/fortran/module.c (.../branches/gcc-4_7-branch)
+@@ -387,37 +387,6 @@
+ }
+
+
+-/* Recursive function to find a pointer within a tree by brute force. */
+-
+-static pointer_info *
+-fp2 (pointer_info *p, const void *target)
+-{
+- pointer_info *q;
+-
+- if (p == NULL)
+- return NULL;
+-
+- if (p->u.pointer == target)
+- return p;
+-
+- q = fp2 (p->left, target);
+- if (q != NULL)
+- return q;
+-
+- return fp2 (p->right, target);
+-}
+-
+-
+-/* During reading, find a pointer_info node from the pointer value.
+- This amounts to a brute-force search. */
+-
+-static pointer_info *
+-find_pointer2 (void *p)
+-{
+- return fp2 (pi_root, p);
+-}
+-
+-
+ /* Resolve any fixups using a known pointer. */
+
+ static void
+@@ -2500,45 +2469,13 @@
+ the namespace and is not loaded again. */
+
+ static void
+-mio_component_ref (gfc_component **cp, gfc_symbol *sym)
++mio_component_ref (gfc_component **cp)
+ {
+- char name[GFC_MAX_SYMBOL_LEN + 1];
+- gfc_component *q;
+ pointer_info *p;
+
+ p = mio_pointer_ref (cp);
+ if (p->type == P_UNKNOWN)
+ p->type = P_COMPONENT;
+-
+- if (iomode == IO_OUTPUT)
+- mio_pool_string (&(*cp)->name);
+- else
+- {
+- mio_internal_string (name);
+-
+- if (sym && sym->attr.is_class)
+- sym = sym->components->ts.u.derived;
+-
+- /* It can happen that a component reference can be read before the
+- associated derived type symbol has been loaded. Return now and
+- wait for a later iteration of load_needed. */
+- if (sym == NULL)
+- return;
+-
+- if (sym->components != NULL && p->u.pointer == NULL)
+- {
+- /* Symbol already loaded, so search by name. */
+- q = gfc_find_component (sym, name, true, true);
+-
+- if (q)
+- associate_integer_pointer (p, q);
+- }
+-
+- /* Make sure this symbol will eventually be loaded. */
+- p = find_pointer2 (sym);
+- if (p->u.rsym.state == UNUSED)
+- p->u.rsym.state = NEEDED;
+- }
+ }
+
+
+@@ -2920,7 +2857,7 @@
+
+ case REF_COMPONENT:
+ mio_symbol_ref (&r->u.c.sym);
+- mio_component_ref (&r->u.c.component, r->u.c.sym);
++ mio_component_ref (&r->u.c.component);
+ break;
+
+ case REF_SUBSTRING:
+@@ -3775,7 +3712,9 @@
+
+
+ /* Unlike most other routines, the address of the symbol node is already
+- fixed on input and the name/module has already been filled in. */
++ fixed on input and the name/module has already been filled in.
++ If you update the symbol format here, don't forget to update read_module
++ as well (look for "seek to the symbol's component list"). */
+
+ static void
+ mio_symbol (gfc_symbol *sym)
+@@ -3920,14 +3859,17 @@
+ }
+
+
+-/* Skip a list between balanced left and right parens. */
++/* Skip a list between balanced left and right parens.
++ By setting NEST_LEVEL to a non-zero value one assumes that a number of
++ NEST_LEVEL opening parens have been already parsed by hand, and the remaining
++ of the content is to be skipped here. */
+
+ static void
+-skip_list (void)
++skip_list (int nest_level)
+ {
+ int level;
+
+- level = 0;
++ level = nest_level;
+ do
+ {
+ switch (parse_atom ())
+@@ -4286,7 +4228,7 @@
+ if (!info || !derived)
+ {
+ while (peek_atom () != ATOM_RPAREN)
+- skip_list ();
++ skip_list (0);
+ continue;
+ }
+
+@@ -4523,18 +4465,18 @@
+ gfc_symbol *sym;
+
+ get_module_locus (&operator_interfaces); /* Skip these for now. */
+- skip_list ();
++ skip_list (0);
+
+ get_module_locus (&user_operators);
+- skip_list ();
+- skip_list ();
++ skip_list (0);
++ skip_list (0);
+
+ /* Skip commons, equivalences and derived type extensions for now. */
+- skip_list ();
+- skip_list ();
++ skip_list (0);
++ skip_list (0);
+
+ get_module_locus (&extensions);
+- skip_list ();
++ skip_list (0);
+
+ mio_lparen ();
+
+@@ -4561,7 +4503,6 @@
+ info->u.rsym.ns = atom_int;
+
+ get_module_locus (&info->u.rsym.where);
+- skip_list ();
+
+ /* See if the symbol has already been loaded by a previous module.
+ If so, we reference the existing symbol and prevent it from
+@@ -4572,11 +4513,57 @@
+
+ if (sym == NULL
+ || (sym->attr.flavor == FL_VARIABLE && info->u.rsym.ns !=1))
+- continue;
++ {
++ skip_list (0);
++ continue;
++ }
+
+ info->u.rsym.state = USED;
+ info->u.rsym.sym = sym;
++ /* The current symbol has already been loaded, so we can avoid loading
++ it again. However, if it is a derived type, some of its components
++ can be used in expressions in the module. To avoid the module loading
++ failing, we need to associate the module's component pointer indexes
++ with the existing symbol's component pointers. */
++ if (sym->attr.flavor == FL_DERIVED)
++ {
++ gfc_component *c;
+
++ /* First seek to the symbol's component list. */
++ mio_lparen (); /* symbol opening. */
++ skip_list (0); /* skip symbol attribute. */
++ skip_list (0); /* typespec. */
++ require_atom (ATOM_INTEGER); /* namespace ref. */
++ require_atom (ATOM_INTEGER); /* common ref. */
++ skip_list (0); /* formal args. */
++ /* no value. */
++ skip_list (0); /* array_spec. */
++ require_atom (ATOM_INTEGER); /* result. */
++ /* not a cray pointer. */
++
++ mio_lparen (); /* component list opening. */
++ for (c = sym->components; c; c = c->next)
++ {
++ pointer_info *p;
++ const char *comp_name;
++ int n;
++
++ mio_lparen (); /* component opening. */
++ mio_integer (&n);
++ p = get_integer (n);
++ if (p->u.pointer == NULL)
++ associate_integer_pointer (p, c);
++ mio_pool_string (&comp_name);
++ gcc_assert (comp_name == c->name);
++ skip_list (1); /* component end. */
++ }
++ mio_rparen (); /* component list closing. */
++
++ skip_list (1); /* symbol end. */
++ }
++ else
++ skip_list (0);
++
+ /* Some symbols do not have a namespace (eg. formal arguments),
+ so the automatic "unique symtree" mechanism must be suppressed
+ by marking them as referenced. */
+@@ -4738,7 +4725,7 @@
+
+ if (u == NULL)
+ {
+- skip_list ();
++ skip_list (0);
+ continue;
+ }
+
+Index: gcc/fortran/frontend-passes.c
+===================================================================
+--- a/src/gcc/fortran/frontend-passes.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/fortran/frontend-passes.c (.../branches/gcc-4_7-branch)
+@@ -883,7 +883,9 @@
+ /* Replace A // B < A // C with B < C, and A // B < C // B
+ with A < C. */
+ if (op1->ts.type == BT_CHARACTER && op2->ts.type == BT_CHARACTER
++ && op1->expr_type == EXPR_OP
+ && op1->value.op.op == INTRINSIC_CONCAT
++ && op2->expr_type == EXPR_OP
+ && op2->value.op.op == INTRINSIC_CONCAT)
+ {
+ gfc_expr *op1_left = op1->value.op.op1;
Index: gcc/fortran/resolve.c
===================================================================
--- a/src/gcc/fortran/resolve.c (.../tags/gcc_4_7_3_release)
@@ -1572,6 +17637,134 @@ Index: gcc/fortran/resolve.c
&& arg->next != NULL && arg->next->expr)
{
if (arg->next->expr->expr_type != EXPR_CONSTANT)
+@@ -10166,7 +10167,7 @@
+ init_expr = NULL;
+ }
+ if (!init_expr && gfc_option.flag_init_character == GFC_INIT_CHARACTER_ON
+- && sym->ts.u.cl->length)
++ && sym->ts.u.cl->length && gfc_option.flag_max_stack_var_size != 0)
+ {
+ gfc_actual_arglist *arg;
+ init_expr = gfc_get_expr ();
+Index: gcc/fortran/trans-io.c
+===================================================================
+--- a/src/gcc/fortran/trans-io.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/fortran/trans-io.c (.../branches/gcc-4_7-branch)
+@@ -244,16 +244,16 @@
+
+ /* The code to generate the error. */
+ gfc_start_block (&block);
+-
++
+ arg1 = gfc_build_addr_expr (NULL_TREE, var);
+-
++
+ arg2 = build_int_cst (integer_type_node, error_code),
+-
++
+ asprintf (&message, "%s", _(msgid));
+ arg3 = gfc_build_addr_expr (pchar_type_node,
+ gfc_build_localized_cstring_const (message));
+ free (message);
+-
++
+ tmp = build_call_expr_loc (input_location,
+ gfor_fndecl_generate_error, 3, arg1, arg2, arg3);
+
+@@ -522,7 +522,7 @@
+ gfc_trans_io_runtime_check (cond, var, LIBERROR_BAD_UNIT,
+ "Unit number in I/O statement too small",
+ &se.pre);
+-
++
+ /* UNIT numbers should be less than the max. */
+ val = gfc_conv_mpz_to_tree (gfc_integer_kinds[i].huge, 4);
+ cond = fold_build2_loc (input_location, GT_EXPR, boolean_type_node,
+@@ -1002,7 +1002,7 @@
+ if (p->convert)
+ mask |= set_string (&block, &post_block, var, IOPARM_open_convert,
+ p->convert);
+-
++
+ if (p->newunit)
+ mask |= set_parameter_ref (&block, &post_block, var, IOPARM_open_newunit,
+ p->newunit);
+@@ -1236,7 +1236,7 @@
+ {
+ mask |= set_parameter_ref (&block, &post_block, var, IOPARM_inquire_exist,
+ p->exist);
+-
++
+ if (p->unit && !p->iostat)
+ {
+ p->iostat = create_dummy_iostat ();
+@@ -1324,7 +1324,7 @@
+ if (p->pad)
+ mask |= set_string (&block, &post_block, var, IOPARM_inquire_pad,
+ p->pad);
+-
++
+ if (p->convert)
+ mask |= set_string (&block, &post_block, var, IOPARM_inquire_convert,
+ p->convert);
+@@ -1546,7 +1546,7 @@
+ tree dtype;
+ tree dt_parm_addr;
+ tree decl = NULL_TREE;
+- int n_dim;
++ int n_dim;
+ int itype;
+ int rank = 0;
+
+@@ -2029,7 +2029,7 @@
+ if (gfc_notification_std (GFC_STD_GNU) != SILENT)
+ {
+ gfc_error_now ("Derived type '%s' at %L has PRIVATE components",
+- ts->u.derived->name, code != NULL ? &(code->loc) :
++ ts->u.derived->name, code != NULL ? &(code->loc) :
+ &gfc_current_locus);
+ return;
+ }
+@@ -2038,7 +2038,7 @@
+ ts->kind = ts->u.derived->ts.kind;
+ ts->f90_type = ts->u.derived->ts.f90_type;
+ }
+-
++
+ kind = ts->kind;
+ function = NULL;
+ arg2 = NULL;
+@@ -2120,7 +2120,7 @@
+ function = iocall[IOCALL_X_CHARACTER_WIDE];
+ else
+ function = iocall[IOCALL_X_CHARACTER_WIDE_WRITE];
+-
++
+ tmp = gfc_build_addr_expr (NULL_TREE, dt_parm);
+ tmp = build_call_expr_loc (input_location,
+ function, 4, tmp, addr_expr, arg2, arg3);
+@@ -2152,6 +2152,12 @@
+ expr = build_fold_indirect_ref_loc (input_location,
+ expr);
+
++ /* Make sure that the derived type has been built. An external
++ function, if only referenced in an io statement requires this
++ check (see PR58771). */
++ if (ts->u.derived->backend_decl == NULL_TREE)
++ tmp = gfc_typenode_for_spec (ts);
++
+ for (c = ts->u.derived->components; c; c = c->next)
+ {
+ field = c->backend_decl;
+@@ -2287,7 +2293,7 @@
+ transfer_array_desc (&se, &expr->ts, tmp);
+ goto finish_block_label;
+ }
+-
++
+ /* Initialize the scalarizer. */
+ gfc_init_loopinfo (&loop);
+ gfc_add_ss_to_loop (&loop, ss);
Index: gcc/fortran/target-memory.c
===================================================================
--- a/src/gcc/fortran/target-memory.c (.../tags/gcc_4_7_3_release)
@@ -1701,6 +17894,60 @@ Index: gcc/fortran/check.c
if (result_elt_size == 0)
return FAILURE;
+Index: gcc/fortran/primary.c
+===================================================================
+--- a/src/gcc/fortran/primary.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/fortran/primary.c (.../branches/gcc-4_7-branch)
+@@ -2525,7 +2525,8 @@
+ if (parent && !comp)
+ break;
+
+- actual = actual->next;
++ if (actual)
++ actual = actual->next;
+ }
+
+ if (build_actual_constructor (&comp_head, &ctor_head, sym) == FAILURE)
+Index: gcc/fortran/trans-intrinsic.c
+===================================================================
+--- a/src/gcc/fortran/trans-intrinsic.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/fortran/trans-intrinsic.c (.../branches/gcc-4_7-branch)
+@@ -4665,8 +4665,10 @@
+ gfc_conv_intrinsic_ichar (gfc_se * se, gfc_expr * expr)
+ {
+ tree args[2], type, pchartype;
++ int nargs;
+
+- gfc_conv_intrinsic_function_args (se, expr, args, 2);
++ nargs = gfc_intrinsic_argument_list_length (expr);
++ gfc_conv_intrinsic_function_args (se, expr, args, nargs);
+ gcc_assert (POINTER_TYPE_P (TREE_TYPE (args[1])));
+ pchartype = gfc_get_pchar_type (expr->value.function.actual->expr->ts.kind);
+ args[1] = fold_build1_loc (input_location, NOP_EXPR, pchartype, args[1]);
+@@ -5623,8 +5625,7 @@
+
+ if (expr->ts.type == BT_CHARACTER)
+ {
+- tree direct;
+- tree indirect;
++ tree direct, indirect, free;
+
+ ptr = convert (gfc_get_pchar_type (expr->ts.kind), source);
+ tmpdecl = gfc_create_var (gfc_get_pchar_type (expr->ts.kind),
+@@ -5657,6 +5658,13 @@
+ tmp = build3_v (COND_EXPR, tmp, direct, indirect);
+ gfc_add_expr_to_block (&se->pre, tmp);
+
++ /* Free the temporary string, if necessary. */
++ free = gfc_call_free (tmpdecl);
++ tmp = fold_build2_loc (input_location, GT_EXPR, boolean_type_node,
++ dest_word_len, source_bytes);
++ tmp = build3_v (COND_EXPR, tmp, free, build_empty_stmt (input_location));
++ gfc_add_expr_to_block (&se->post, tmp);
++
+ se->expr = tmpdecl;
+ se->string_length = fold_convert (gfc_charlen_type_node, dest_word_len);
+ }
Index: gcc/fortran/simplify.c
===================================================================
--- a/src/gcc/fortran/simplify.c (.../tags/gcc_4_7_3_release)
@@ -1715,7 +17962,50 @@ Index: gcc/fortran/simplify.c
/* Note that 'simplification' is not just transforming expressions.
For functions that are not simplified at compile time, range
checking is done if possible.
-@@ -3240,7 +3242,7 @@
+@@ -330,13 +332,15 @@
+ }
+
+
+-/* Helper function for gfc_simplify_dot_product() and gfc_simplify_matmul. */
++/* Helper function for gfc_simplify_dot_product() and gfc_simplify_matmul;
++ if conj_a is true, the matrix_a is complex conjugated. */
+
+ static gfc_expr *
+ compute_dot_product (gfc_expr *matrix_a, int stride_a, int offset_a,
+- gfc_expr *matrix_b, int stride_b, int offset_b)
++ gfc_expr *matrix_b, int stride_b, int offset_b,
++ bool conj_a)
+ {
+- gfc_expr *result, *a, *b;
++ gfc_expr *result, *a, *b, *c;
+
+ result = gfc_get_constant_expr (matrix_a->ts.type, matrix_a->ts.kind,
+ &matrix_a->where);
+@@ -359,9 +363,11 @@
+ case BT_INTEGER:
+ case BT_REAL:
+ case BT_COMPLEX:
+- result = gfc_add (result,
+- gfc_multiply (gfc_copy_expr (a),
+- gfc_copy_expr (b)));
++ if (conj_a && a->ts.type == BT_COMPLEX)
++ c = gfc_simplify_conjg (a);
++ else
++ c = gfc_copy_expr (a);
++ result = gfc_add (result, gfc_multiply (c, gfc_copy_expr (b)));
+ break;
+
+ default:
+@@ -1875,7 +1881,7 @@
+ gcc_assert (vector_b->rank == 1);
+ gcc_assert (gfc_compare_types (&vector_a->ts, &vector_b->ts));
+
+- return compute_dot_product (vector_a, 1, 0, vector_b, 1, 0);
++ return compute_dot_product (vector_a, 1, 0, vector_b, 1, 0, true);
+ }
+
+
+@@ -3240,7 +3246,7 @@
gfc_expr* dim = result;
mpz_set_si (dim->value.integer, d);
@@ -1724,7 +18014,16 @@ Index: gcc/fortran/simplify.c
gfc_free_expr (dim);
if (!result)
goto returnNull;
-@@ -5493,15 +5495,12 @@
+@@ -3881,7 +3887,7 @@
+ for (row = 0; row < result_rows; ++row)
+ {
+ gfc_expr *e = compute_dot_product (matrix_a, stride_a, offset_a,
+- matrix_b, 1, offset_b);
++ matrix_b, 1, offset_b, false);
+ gfc_constructor_append_expr (&result->value.constructor,
+ e, NULL);
+
+@@ -5493,15 +5499,12 @@
e = gfc_get_constant_expr (BT_INTEGER, k, &source->where);
if (t == SUCCESS)
@@ -1742,14 +18041,14 @@ Index: gcc/fortran/simplify.c
gfc_free_expr (e);
if (f == NULL)
{
-@@ -5512,24 +5511,31 @@
+@@ -5512,24 +5515,31 @@
e = f;
}
+ if (e == &gfc_bad_expr || range_check (e, "SHAPE") == &gfc_bad_expr)
+ {
+ gfc_free_expr (result);
-+ if (t)
++ if (t == SUCCESS)
+ gfc_clear_shape (shape, source->rank);
+ return &gfc_bad_expr;
+ }
@@ -1757,7 +18056,7 @@ Index: gcc/fortran/simplify.c
gfc_constructor_append_expr (&result->value.constructor, e, NULL);
}
-+ if (t)
++ if (t == SUCCESS)
+ gfc_clear_shape (shape, source->rank);
+
return result;
@@ -1780,7 +18079,7 @@ Index: gcc/fortran/simplify.c
/* For unary operations, the size of the result is given by the size
of the operand. For binary ones, it's the size of the first operand
unless it is scalar, then it is the size of the second. */
-@@ -5558,7 +5564,7 @@
+@@ -5558,7 +5568,7 @@
replacement = array->value.op.op1;
else
{
@@ -1789,7 +18088,7 @@ Index: gcc/fortran/simplify.c
if (simplified)
return simplified;
-@@ -5568,18 +5574,20 @@
+@@ -5568,18 +5578,20 @@
}
/* Try to reduce it directly if possible. */
@@ -1818,7 +18117,7 @@ Index: gcc/fortran/simplify.c
return simplified;
}
-@@ -5598,13 +5606,32 @@
+@@ -5598,13 +5610,32 @@
return NULL;
}
@@ -1852,11 +18151,582 @@ Index: gcc/fortran/simplify.c
gfc_simplify_sign (gfc_expr *x, gfc_expr *y)
{
gfc_expr *result;
+Index: gcc/configure.ac
+===================================================================
+--- a/src/gcc/configure.ac (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/configure.ac (.../branches/gcc-4_7-branch)
+@@ -3740,8 +3740,13 @@
+
+ # These two are used unconditionally by i386.[ch]; it is to be defined
+ # to 1 if the feature is present, 0 otherwise.
++ as_ix86_gotoff_in_data_opt=
++ if test x$gas = xyes; then
++ as_ix86_gotoff_in_data_opt="--32"
++ fi
+ gcc_GAS_CHECK_FEATURE([GOTOFF in data],
+- gcc_cv_as_ix86_gotoff_in_data, [2,11,0],,
++ gcc_cv_as_ix86_gotoff_in_data, [2,11,0],
++ [$as_ix86_gotoff_in_data_opt],
+ [ .text
+ .L0:
+ nop
+@@ -5153,15 +5158,15 @@
+ AC_MSG_CHECKING([for exported symbols])
+ if test "x$export_sym_check" != x; then
+ echo "int main() {return 0;} int foobar() {return 0;}" > conftest.c
+- ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest > /dev/null 2>&1
+- if $export_sym_check conftest | grep foobar > /dev/null; then
++ ${CC} ${CFLAGS} ${LDFLAGS} conftest.c -o conftest$ac_exeext > /dev/null 2>&1
++ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
+ : # No need to use a flag
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([yes])
+ AC_MSG_CHECKING([for -rdynamic])
+- ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest > /dev/null 2>&1
+- if $export_sym_check conftest | grep foobar > /dev/null; then
++ ${CC} ${CFLAGS} ${LDFLAGS} -rdynamic conftest.c -o conftest$ac_exeext > /dev/null 2>&1
++ if $export_sym_check conftest$ac_exeext | grep -q foobar > /dev/null; then
+ plugin_rdynamic=yes
+ pluginlibs="-rdynamic"
+ else
+Index: gcc/sdbout.c
+===================================================================
+--- a/src/gcc/sdbout.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/sdbout.c (.../branches/gcc-4_7-branch)
+@@ -1264,7 +1264,10 @@
+ sdbout_parms (tree parms)
+ {
+ for (; parms; parms = TREE_CHAIN (parms))
+- if (DECL_NAME (parms))
++ if (DECL_NAME (parms)
++ && TREE_TYPE (parms) != error_mark_node
++ && DECL_RTL_SET_P (parms)
++ && DECL_INCOMING_RTL (parms))
+ {
+ int current_sym_value = 0;
+ const char *name = IDENTIFIER_POINTER (DECL_NAME (parms));
+@@ -1396,7 +1399,10 @@
+ sdbout_reg_parms (tree parms)
+ {
+ for (; parms; parms = TREE_CHAIN (parms))
+- if (DECL_NAME (parms))
++ if (DECL_NAME (parms)
++ && TREE_TYPE (parms) != error_mark_node
++ && DECL_RTL_SET_P (parms)
++ && DECL_INCOMING_RTL (parms))
+ {
+ const char *name = IDENTIFIER_POINTER (DECL_NAME (parms));
+
+Index: gcc/alias.c
+===================================================================
+--- a/src/gcc/alias.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/alias.c (.../branches/gcc-4_7-branch)
+@@ -2810,17 +2810,14 @@
+ /* Wipe the reg_seen array clean. */
+ memset (reg_seen, 0, maxreg);
+
+- /* Mark all hard registers which may contain an address.
+- The stack, frame and argument pointers may contain an address.
+- An argument register which can hold a Pmode value may contain
+- an address even if it is not in BASE_REGS.
++ /* Initialize the alias information for this pass. */
++ for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
++ if (static_reg_base_value[i])
++ {
++ new_reg_base_value[i] = static_reg_base_value[i];
++ reg_seen[i] = 1;
++ }
+
+- The address expression is VOIDmode for an argument and
+- Pmode for other registers. */
+-
+- memcpy (new_reg_base_value, static_reg_base_value,
+- FIRST_PSEUDO_REGISTER * sizeof (rtx));
+-
+ /* Walk the insns adding values to the new_reg_base_value array. */
+ for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
+ {
+Index: gcc/tree-if-conv.c
+===================================================================
+--- a/src/gcc/tree-if-conv.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/tree-if-conv.c (.../branches/gcc-4_7-branch)
+@@ -758,20 +758,6 @@
+ return true;
+ }
+
+-/* Return true when BB post-dominates all its predecessors. */
+-
+-static bool
+-bb_postdominates_preds (basic_block bb)
+-{
+- unsigned i;
+-
+- for (i = 0; i < EDGE_COUNT (bb->preds); i++)
+- if (!dominated_by_p (CDI_POST_DOMINATORS, EDGE_PRED (bb, i)->src, bb))
+- return false;
+-
+- return true;
+-}
+-
+ /* Return true when BB is if-convertible. This routine does not check
+ basic block's statements and phis.
+
+@@ -830,10 +816,23 @@
+ return false;
+ }
+
+- if (EDGE_COUNT (bb->preds) == 2
+- && bb != loop->header
+- && !bb_postdominates_preds (bb))
+- return false;
++ /* At least one incoming edge has to be non-critical as otherwise edge
++ predicates are not equal to basic-block predicates of the edge
++ source. */
++ if (EDGE_COUNT (bb->preds) > 1
++ && bb != loop->header)
++ {
++ bool found = false;
++ FOR_EACH_EDGE (e, ei, bb->preds)
++ if (EDGE_COUNT (e->src->succs) == 1)
++ found = true;
++ if (!found)
++ {
++ if (dump_file && (dump_flags & TDF_DETAILS))
++ fprintf (dump_file, "only critical predecessors\n");
++ return false;
++ }
++ }
+
+ return true;
+ }
+@@ -1048,7 +1047,6 @@
+ return false;
+
+ calculate_dominance_info (CDI_DOMINATORS);
+- calculate_dominance_info (CDI_POST_DOMINATORS);
+
+ /* Allow statements that can be handled during if-conversion. */
+ ifc_bbs = get_loop_body_in_if_conv_order (loop);
+@@ -1184,8 +1182,7 @@
+ if-conversion. */
+
+ static basic_block
+-find_phi_replacement_condition (struct loop *loop,
+- basic_block bb, tree *cond,
++find_phi_replacement_condition (basic_block bb, tree *cond,
+ gimple_stmt_iterator *gsi)
+ {
+ edge first_edge, second_edge;
+@@ -1195,34 +1192,10 @@
+ first_edge = EDGE_PRED (bb, 0);
+ second_edge = EDGE_PRED (bb, 1);
+
+- /* Use condition based on following criteria:
+- 1)
+- S1: x = !c ? a : b;
+-
+- S2: x = c ? b : a;
+-
+- S2 is preferred over S1. Make 'b' first_bb and use its condition.
+-
+- 2) Do not make loop header first_bb.
+-
+- 3)
+- S1: x = !(c == d)? a : b;
+-
+- S21: t1 = c == d;
+- S22: x = t1 ? b : a;
+-
+- S3: x = (c == d) ? b : a;
+-
+- S3 is preferred over S1 and S2*, Make 'b' first_bb and use
+- its condition.
+-
+- 4) If pred B is dominated by pred A then use pred B's condition.
+- See PR23115. */
+-
+- /* Select condition that is not TRUTH_NOT_EXPR. */
++ /* Prefer an edge with a not negated predicate.
++ ??? That's a very weak cost model. */
+ tmp_cond = bb_predicate (first_edge->src);
+ gcc_assert (tmp_cond);
+-
+ if (TREE_CODE (tmp_cond) == TRUTH_NOT_EXPR)
+ {
+ edge tmp_edge;
+@@ -1232,11 +1205,9 @@
+ second_edge = tmp_edge;
+ }
+
+- /* Check if FIRST_BB is loop header or not and make sure that
+- FIRST_BB does not dominate SECOND_BB. */
+- if (first_edge->src == loop->header
+- || dominated_by_p (CDI_DOMINATORS,
+- second_edge->src, first_edge->src))
++ /* Check if the edge we take the condition from is not critical.
++ We know that at least one non-critical edge exists. */
++ if (EDGE_COUNT (first_edge->src->succs) > 1)
+ {
+ *cond = bb_predicate (second_edge->src);
+
+@@ -1311,9 +1282,6 @@
+ arg_1 = gimple_phi_arg_def (phi, 1);
+ }
+
+- gcc_checking_assert (bb == bb->loop_father->header
+- || bb_postdominates_preds (bb));
+-
+ /* Build new RHS using selected condition and arguments. */
+ rhs = build3 (COND_EXPR, TREE_TYPE (res),
+ unshare_expr (cond), arg_0, arg_1);
+@@ -1359,7 +1327,7 @@
+ /* BB has two predecessors. Using predecessor's aux field, set
+ appropriate condition for the PHI node replacement. */
+ gsi = gsi_after_labels (bb);
+- true_bb = find_phi_replacement_condition (loop, bb, &cond, &gsi);
++ true_bb = find_phi_replacement_condition (bb, &cond, &gsi);
+
+ while (!gsi_end_p (phi_gsi))
+ {
+@@ -1791,8 +1759,6 @@
+ if (changed && flag_tree_loop_if_convert_stores)
+ todo |= TODO_update_ssa_only_virtuals;
+
+- free_dominance_info (CDI_POST_DOMINATORS);
+-
+ return todo;
+ }
+
+Index: gcc/tree-dfa.c
+===================================================================
+--- a/src/gcc/tree-dfa.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/tree-dfa.c (.../branches/gcc-4_7-branch)
+@@ -713,9 +713,9 @@
+ HOST_WIDE_INT bitsize = -1;
+ HOST_WIDE_INT maxsize = -1;
+ tree size_tree = NULL_TREE;
+- HOST_WIDE_INT bit_offset = 0;
++ double_int bit_offset = double_int_zero;
++ HOST_WIDE_INT hbit_offset;
+ bool seen_variable_array_ref = false;
+- tree base_type;
+
+ /* First get the final access size from just the outermost expression. */
+ if (TREE_CODE (exp) == COMPONENT_REF)
+@@ -746,12 +746,12 @@
+ and find the ultimate containing object. */
+ while (1)
+ {
+- base_type = TREE_TYPE (exp);
+-
+ switch (TREE_CODE (exp))
+ {
+ case BIT_FIELD_REF:
+- bit_offset += TREE_INT_CST_LOW (TREE_OPERAND (exp, 2));
++ bit_offset
++ = double_int_add (bit_offset,
++ tree_to_double_int (TREE_OPERAND (exp, 2)));
+ break;
+
+ case COMPONENT_REF:
+@@ -759,22 +759,23 @@
+ tree field = TREE_OPERAND (exp, 1);
+ tree this_offset = component_ref_field_offset (exp);
+
+- if (this_offset
+- && TREE_CODE (this_offset) == INTEGER_CST
+- && host_integerp (this_offset, 0))
++ if (this_offset && TREE_CODE (this_offset) == INTEGER_CST)
+ {
+- HOST_WIDE_INT hthis_offset = TREE_INT_CST_LOW (this_offset);
+- hthis_offset *= BITS_PER_UNIT;
+- hthis_offset
+- += TREE_INT_CST_LOW (DECL_FIELD_BIT_OFFSET (field));
+- bit_offset += hthis_offset;
++ double_int doffset = tree_to_double_int (this_offset);
++ doffset = double_int_lshift (doffset,
++ BITS_PER_UNIT == 8
++ ? 3 : exact_log2 (BITS_PER_UNIT),
++ HOST_BITS_PER_DOUBLE_INT, true);
++ doffset = double_int_add (doffset,
++ tree_to_double_int
++ (DECL_FIELD_BIT_OFFSET (field)));
++ bit_offset = double_int_add (bit_offset, doffset);
+
+ /* If we had seen a variable array ref already and we just
+ referenced the last field of a struct or a union member
+ then we have to adjust maxsize by the padding at the end
+ of our field. */
+- if (seen_variable_array_ref
+- && maxsize != -1)
++ if (seen_variable_array_ref && maxsize != -1)
+ {
+ tree stype = TREE_TYPE (TREE_OPERAND (exp, 0));
+ tree next = DECL_CHAIN (field);
+@@ -786,10 +787,12 @@
+ tree fsize = DECL_SIZE_UNIT (field);
+ tree ssize = TYPE_SIZE_UNIT (stype);
+ if (host_integerp (fsize, 0)
+- && host_integerp (ssize, 0))
++ && host_integerp (ssize, 0)
++ && double_int_fits_in_shwi_p (doffset))
+ maxsize += ((TREE_INT_CST_LOW (ssize)
+ - TREE_INT_CST_LOW (fsize))
+- * BITS_PER_UNIT - hthis_offset);
++ * BITS_PER_UNIT
++ - double_int_to_shwi (doffset));
+ else
+ maxsize = -1;
+ }
+@@ -801,8 +804,12 @@
+ /* We need to adjust maxsize to the whole structure bitsize.
+ But we can subtract any constant offset seen so far,
+ because that would get us out of the structure otherwise. */
+- if (maxsize != -1 && csize && host_integerp (csize, 1))
+- maxsize = TREE_INT_CST_LOW (csize) - bit_offset;
++ if (maxsize != -1
++ && csize
++ && host_integerp (csize, 1)
++ && double_int_fits_in_shwi_p (bit_offset))
++ maxsize = TREE_INT_CST_LOW (csize)
++ - double_int_to_shwi (bit_offset);
+ else
+ maxsize = -1;
+ }
+@@ -817,19 +824,24 @@
+
+ /* If the resulting bit-offset is constant, track it. */
+ if (TREE_CODE (index) == INTEGER_CST
+- && host_integerp (index, 0)
+ && (low_bound = array_ref_low_bound (exp),
+- host_integerp (low_bound, 0))
++ TREE_CODE (low_bound) == INTEGER_CST)
+ && (unit_size = array_ref_element_size (exp),
+- host_integerp (unit_size, 1)))
++ TREE_CODE (unit_size) == INTEGER_CST))
+ {
+- HOST_WIDE_INT hindex = TREE_INT_CST_LOW (index);
++ double_int doffset
++ = double_int_sext
++ (double_int_sub (TREE_INT_CST (index),
++ TREE_INT_CST (low_bound)),
++ TYPE_PRECISION (TREE_TYPE (index)));
++ doffset = double_int_mul (doffset,
++ tree_to_double_int (unit_size));
++ doffset = double_int_lshift (doffset,
++ BITS_PER_UNIT == 8
++ ? 3 : exact_log2 (BITS_PER_UNIT),
++ HOST_BITS_PER_DOUBLE_INT, true);
++ bit_offset = double_int_add (bit_offset, doffset);
+
+- hindex -= TREE_INT_CST_LOW (low_bound);
+- hindex *= TREE_INT_CST_LOW (unit_size);
+- hindex *= BITS_PER_UNIT;
+- bit_offset += hindex;
+-
+ /* An array ref with a constant index up in the structure
+ hierarchy will constrain the size of any variable array ref
+ lower in the access hierarchy. */
+@@ -841,8 +853,12 @@
+ /* We need to adjust maxsize to the whole array bitsize.
+ But we can subtract any constant offset seen so far,
+ because that would get us outside of the array otherwise. */
+- if (maxsize != -1 && asize && host_integerp (asize, 1))
+- maxsize = TREE_INT_CST_LOW (asize) - bit_offset;
++ if (maxsize != -1
++ && asize
++ && host_integerp (asize, 1)
++ && double_int_fits_in_shwi_p (bit_offset))
++ maxsize = TREE_INT_CST_LOW (asize)
++ - double_int_to_shwi (bit_offset);
+ else
+ maxsize = -1;
+
+@@ -857,13 +873,45 @@
+ break;
+
+ case IMAGPART_EXPR:
+- bit_offset += bitsize;
++ bit_offset
++ = double_int_add (bit_offset, uhwi_to_double_int (bitsize));
+ break;
+
+ case VIEW_CONVERT_EXPR:
+ break;
+
++ case TARGET_MEM_REF:
++ /* Via the variable index or index2 we can reach the
++ whole object. Still hand back the decl here. */
++ if (TREE_CODE (TMR_BASE (exp)) == ADDR_EXPR
++ && (TMR_INDEX (exp) || TMR_INDEX2 (exp)))
++ {
++ exp = TREE_OPERAND (TMR_BASE (exp), 0);
++ bit_offset = double_int_zero;
++ maxsize = -1;
++ goto done;
++ }
++ /* Fallthru. */
+ case MEM_REF:
++ /* We need to deal with variable arrays ending structures such as
++ struct { int length; int a[1]; } x; x.a[d]
++ struct { struct { int a; int b; } a[1]; } x; x.a[d].a
++ struct { struct { int a[1]; } a[1]; } x; x.a[0][d], x.a[d][0]
++ struct { int len; union { int a[1]; struct X x; } u; } x; x.u.a[d]
++ where we do not know maxsize for variable index accesses to
++ the array. The simplest way to conservatively deal with this
++ is to punt in the case that offset + maxsize reaches the
++ base type boundary. This needs to include possible trailing
++ padding that is there for alignment purposes. */
++ if (seen_variable_array_ref
++ && maxsize != -1
++ && (!double_int_fits_in_shwi_p (bit_offset)
++ || !host_integerp (TYPE_SIZE (TREE_TYPE (exp)), 1)
++ || (double_int_to_shwi (bit_offset) + maxsize
++ == (HOST_WIDE_INT) TREE_INT_CST_LOW
++ (TYPE_SIZE (TREE_TYPE (exp))))))
++ maxsize = -1;
++
+ /* Hand back the decl for MEM[&decl, off]. */
+ if (TREE_CODE (TREE_OPERAND (exp, 0)) == ADDR_EXPR)
+ {
+@@ -876,10 +924,10 @@
+ BITS_PER_UNIT == 8
+ ? 3 : exact_log2 (BITS_PER_UNIT),
+ HOST_BITS_PER_DOUBLE_INT, true);
+- off = double_int_add (off, shwi_to_double_int (bit_offset));
++ off = double_int_add (off, bit_offset);
+ if (double_int_fits_in_shwi_p (off))
+ {
+- bit_offset = double_int_to_shwi (off);
++ bit_offset = off;
+ exp = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
+ }
+ }
+@@ -886,38 +934,6 @@
+ }
+ goto done;
+
+- case TARGET_MEM_REF:
+- /* Hand back the decl for MEM[&decl, off]. */
+- if (TREE_CODE (TMR_BASE (exp)) == ADDR_EXPR)
+- {
+- /* Via the variable index or index2 we can reach the
+- whole object. */
+- if (TMR_INDEX (exp) || TMR_INDEX2 (exp))
+- {
+- exp = TREE_OPERAND (TMR_BASE (exp), 0);
+- bit_offset = 0;
+- maxsize = -1;
+- goto done;
+- }
+- if (integer_zerop (TMR_OFFSET (exp)))
+- exp = TREE_OPERAND (TMR_BASE (exp), 0);
+- else
+- {
+- double_int off = mem_ref_offset (exp);
+- off = double_int_lshift (off,
+- BITS_PER_UNIT == 8
+- ? 3 : exact_log2 (BITS_PER_UNIT),
+- HOST_BITS_PER_DOUBLE_INT, true);
+- off = double_int_add (off, shwi_to_double_int (bit_offset));
+- if (double_int_fits_in_shwi_p (off))
+- {
+- bit_offset = double_int_to_shwi (off);
+- exp = TREE_OPERAND (TMR_BASE (exp), 0);
+- }
+- }
+- }
+- goto done;
+-
+ default:
+ goto done;
+ }
+@@ -924,26 +940,29 @@
+
+ exp = TREE_OPERAND (exp, 0);
+ }
+- done:
+
+- /* We need to deal with variable arrays ending structures such as
+- struct { int length; int a[1]; } x; x.a[d]
+- struct { struct { int a; int b; } a[1]; } x; x.a[d].a
+- struct { struct { int a[1]; } a[1]; } x; x.a[0][d], x.a[d][0]
+- struct { int len; union { int a[1]; struct X x; } u; } x; x.u.a[d]
+- where we do not know maxsize for variable index accesses to
+- the array. The simplest way to conservatively deal with this
+- is to punt in the case that offset + maxsize reaches the
+- base type boundary. This needs to include possible trailing padding
+- that is there for alignment purposes. */
+-
++ /* We need to deal with variable arrays ending structures. */
+ if (seen_variable_array_ref
+ && maxsize != -1
+- && (!host_integerp (TYPE_SIZE (base_type), 1)
+- || (bit_offset + maxsize
+- == (signed) TREE_INT_CST_LOW (TYPE_SIZE (base_type)))))
++ && (!double_int_fits_in_shwi_p (bit_offset)
++ || !host_integerp (TYPE_SIZE (TREE_TYPE (exp)), 1)
++ || (double_int_to_shwi (bit_offset) + maxsize
++ == (HOST_WIDE_INT)
++ TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (exp))))))
+ maxsize = -1;
+
++ done:
++ if (!double_int_fits_in_shwi_p (bit_offset))
++ {
++ *poffset = 0;
++ *psize = bitsize;
++ *pmax_size = -1;
++
++ return exp;
++ }
++
++ hbit_offset = double_int_to_shwi (bit_offset);
++
+ /* In case of a decl or constant base object we can do better. */
+
+ if (DECL_P (exp))
+@@ -952,7 +971,7 @@
+ base decl. */
+ if (maxsize == -1
+ && host_integerp (DECL_SIZE (exp), 1))
+- maxsize = TREE_INT_CST_LOW (DECL_SIZE (exp)) - bit_offset;
++ maxsize = TREE_INT_CST_LOW (DECL_SIZE (exp)) - hbit_offset;
+ }
+ else if (CONSTANT_CLASS_P (exp))
+ {
+@@ -960,13 +979,13 @@
+ base type constant. */
+ if (maxsize == -1
+ && host_integerp (TYPE_SIZE (TREE_TYPE (exp)), 1))
+- maxsize = TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (exp))) - bit_offset;
++ maxsize = TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (exp))) - hbit_offset;
+ }
+
+ /* ??? Due to negative offsets in ARRAY_REF we can end up with
+ negative bit_offset here. We might want to store a zero offset
+ in this case. */
+- *poffset = bit_offset;
++ *poffset = hbit_offset;
+ *psize = bitsize;
+ *pmax_size = maxsize;
+
Index: gcc/coverage.c
===================================================================
--- a/src/gcc/coverage.c (.../tags/gcc_4_7_3_release)
+++ b/src/gcc/coverage.c (.../branches/gcc-4_7-branch)
-@@ -1099,6 +1099,9 @@
+@@ -988,6 +988,9 @@
+ /* The function is not being emitted, remove from list. */
+ *fn_prev = fn->next;
+
++ if (functions_head == NULL)
++ return false;
++
+ for (ix = 0; ix != GCOV_COUNTERS; ix++)
+ if ((1u << ix) & prg_ctr_mask)
+ n_counters++;
+@@ -1099,6 +1102,9 @@
memcpy (da_file_name + prefix_len, filename, len);
strcpy (da_file_name + prefix_len + len, GCOV_DATA_SUFFIX);
@@ -1866,7 +18736,7 @@ Index: gcc/coverage.c
/* Name of bbg file. */
if (flag_test_coverage && !flag_compare_debug)
{
-@@ -1118,9 +1121,6 @@
+@@ -1118,9 +1124,6 @@
gcov_write_unsigned (local_tick);
}
}
@@ -1899,6 +18769,72 @@ Index: gcc/cfgexpand.c
for (i = 0; i < GET_RTX_LENGTH (GET_CODE (exp)); i++)
switch (*format_ptr++)
{
+Index: gcc/simplify-rtx.c
+===================================================================
+--- a/src/gcc/simplify-rtx.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/simplify-rtx.c (.../branches/gcc-4_7-branch)
+@@ -2558,6 +2558,7 @@
+ HOST_WIDE_INT mask = INTVAL (trueop1) << count;
+
+ if (mask >> count == INTVAL (trueop1)
++ && trunc_int_for_mode (mask, mode) == mask
+ && (mask & nonzero_bits (XEXP (op0, 0), mode)) == 0)
+ return simplify_gen_binary (ASHIFTRT, mode,
+ plus_constant (XEXP (op0, 0), mask),
+Index: gcc/tree-predcom.c
+===================================================================
+--- a/src/gcc/tree-predcom.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/tree-predcom.c (.../branches/gcc-4_7-branch)
+@@ -2117,7 +2117,11 @@
+
+ stmt = find_common_use_stmt (&name1, &name2);
+
+- if (!stmt)
++ if (!stmt
++ /* A simple post-dominance check - make sure the combination
++ is executed under the same condition as the references. */
++ || (gimple_bb (stmt) != gimple_bb (r1->stmt)
++ && gimple_bb (stmt) != gimple_bb (r2->stmt)))
+ return false;
+
+ acode = gimple_assign_rhs_code (stmt);
+Index: gcc/ipa-prop.c
+===================================================================
+--- a/src/gcc/ipa-prop.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/ipa-prop.c (.../branches/gcc-4_7-branch)
+@@ -812,7 +812,8 @@
+ return;
+ parm = TREE_OPERAND (expr, 0);
+ index = ipa_get_param_decl_index (info, SSA_NAME_VAR (parm));
+- gcc_assert (index >= 0);
++ if (index < 0)
++ return;
+
+ cond_bb = single_pred (assign_bb);
+ cond = last_stmt (cond_bb);
+Index: gcc/ira.c
+===================================================================
+--- a/src/gcc/ira.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/ira.c (.../branches/gcc-4_7-branch)
+@@ -3788,6 +3788,18 @@
+ if (need_dce && optimize)
+ run_fast_dce ();
+
++ /* Diagnose uses of the hard frame pointer when it is used as a global
++ register. Often we can get away with letting the user appropriate
++ the frame pointer, but we should let them know when code generation
++ makes that impossible. */
++ if (global_regs[HARD_FRAME_POINTER_REGNUM] && frame_pointer_needed)
++ {
++ tree decl = global_regs_decl[HARD_FRAME_POINTER_REGNUM];
++ error_at (DECL_SOURCE_LOCATION (current_function_decl),
++ "frame pointer required, but reserved");
++ inform (DECL_SOURCE_LOCATION (decl), "for %qD", decl);
++ }
++
+ timevar_pop (TV_IRA);
+ }
+
Index: gcc/sched-deps.c
===================================================================
--- a/src/gcc/sched-deps.c (.../tags/gcc_4_7_3_release)
@@ -1960,6 +18896,287 @@ Index: gcc/sched-deps.c
flush_pending_lists (deps, insn, true, true);
reg_pending_barrier = NOT_A_BARRIER;
+Index: gcc/rtl.h
+===================================================================
+--- a/src/gcc/rtl.h (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/rtl.h (.../branches/gcc-4_7-branch)
+@@ -2681,6 +2681,8 @@
+ #define fatal_insn_not_found(insn) \
+ _fatal_insn_not_found (insn, __FILE__, __LINE__, __FUNCTION__)
+
++/* reginfo.c */
++extern tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
+
+
+ #endif /* ! GCC_RTL_H */
+Index: gcc/tree-streamer-in.c
+===================================================================
+--- a/src/gcc/tree-streamer-in.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/tree-streamer-in.c (.../branches/gcc-4_7-branch)
+@@ -172,12 +172,11 @@
+ static void
+ unpack_ts_fixed_cst_value_fields (struct bitpack_d *bp, tree expr)
+ {
+- struct fixed_value fv;
+-
+- fv.mode = bp_unpack_enum (bp, machine_mode, MAX_MACHINE_MODE);
+- fv.data.low = bp_unpack_var_len_int (bp);
+- fv.data.high = bp_unpack_var_len_int (bp);
+- TREE_FIXED_CST (expr) = fv;
++ FIXED_VALUE_TYPE *fp = ggc_alloc_fixed_value ();
++ fp->mode = bp_unpack_enum (bp, machine_mode, MAX_MACHINE_MODE);
++ fp->data.low = bp_unpack_var_len_int (bp);
++ fp->data.high = bp_unpack_var_len_int (bp);
++ TREE_FIXED_CST_PTR (expr) = fp;
+ }
+
+
+Index: gcc/tree-ssa-phiprop.c
+===================================================================
+--- a/src/gcc/tree-ssa-phiprop.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/tree-ssa-phiprop.c (.../branches/gcc-4_7-branch)
+@@ -314,6 +314,12 @@
+ gimple def_stmt;
+ tree vuse;
+
++ /* Only replace loads in blocks that post-dominate the PHI node. That
++ makes sure we don't end up speculating loads. */
++ if (!dominated_by_p (CDI_POST_DOMINATORS,
++ bb, gimple_bb (use_stmt)))
++ continue;
++
+ /* Check whether this is a load of *ptr. */
+ if (!(is_gimple_assign (use_stmt)
+ && TREE_CODE (gimple_assign_lhs (use_stmt)) == SSA_NAME
+@@ -385,6 +391,7 @@
+ size_t n;
+
+ calculate_dominance_info (CDI_DOMINATORS);
++ calculate_dominance_info (CDI_POST_DOMINATORS);
+
+ n = num_ssa_names;
+ phivn = XCNEWVEC (struct phiprop_d, n);
+@@ -402,6 +409,8 @@
+ VEC_free (basic_block, heap, bbs);
+ free (phivn);
+
++ free_dominance_info (CDI_POST_DOMINATORS);
++
+ return 0;
+ }
+
+Index: gcc/collect2-aix.h
+===================================================================
+--- a/src/gcc/collect2-aix.h (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/collect2-aix.h (.../branches/gcc-4_7-branch)
+@@ -1,5 +1,5 @@
+ /* AIX cross support for collect2.
+- Copyright (C) 2009 Free Software Foundation, Inc.
++ Copyright (C) 2009-2013 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+@@ -29,7 +29,7 @@
+ Definitions adapted from bfd. (Fairly heavily adapted in some cases.)
+ ------------------------------------------------------------------------- */
+
+-/* Compatiblity types for bfd. */
++/* Compatibility types for bfd. */
+ typedef unsigned HOST_WIDE_INT bfd_vma;
+
+ /* The size of an archive's fl_magic field. */
+@@ -135,7 +135,7 @@
+ /* The number of entries in the symbol table. */
+ char f_nsyms[4];
+
+- /* The size of the auxillary header. */
++ /* The size of the auxiliary header. */
+ char f_opthdr[2];
+
+ /* Flags. */
+@@ -157,7 +157,7 @@
+ /* The offset of the symbol table from the start of the file. */
+ char f_symptr[8];
+
+- /* The size of the auxillary header. */
++ /* The size of the auxiliary header. */
+ char f_opthdr[2];
+
+ /* Flags. */
+@@ -222,7 +222,7 @@
+ /* The class of symbol (a C_* value). */
+ char n_sclass[1];
+
+- /* The number of auxillary symbols attached to this entry. */
++ /* The number of auxiliary symbols attached to this entry. */
+ char n_numaux[1];
+ };
+
+@@ -229,7 +229,8 @@
+ /* Definitions required by collect2. */
+ #define C_EXT 2
+
+-#define F_SHROBJ 0x2000
++#define F_SHROBJ 0x2000
++#define F_LOADONLY 0x4000
+
+ #define N_UNDEF ((short) 0)
+ #define N_TMASK 060
+Index: gcc/config.gcc
+===================================================================
+--- a/src/gcc/config.gcc (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config.gcc (.../branches/gcc-4_7-branch)
+@@ -1064,7 +1064,6 @@
+ tm_file="pa/pa64-start.h ${tm_file} dbxelf.h elfos.h gnu-user.h linux.h \
+ glibc-stdint.h pa/pa-linux.h pa/pa64-regs.h pa/pa-64.h \
+ pa/pa64-linux.h"
+- tmake_file="${tmake_file} pa/t-linux"
+ gas=yes gnu_ld=yes
+ need_64bit_hwint=yes
+ ;;
+Index: gcc/tlink.c
+===================================================================
+--- a/src/gcc/tlink.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/tlink.c (.../branches/gcc-4_7-branch)
+@@ -2,7 +2,7 @@
+ them.
+
+ Copyright (C) 1995, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2007, 2008,
+- 2009, 2010, 2011 Free Software Foundation, Inc.
++ 2009, 2010, 2011, 2013 Free Software Foundation, Inc.
+ Contributed by Jason Merrill (jason@cygnus.com).
+
+ This file is part of GCC.
+@@ -820,11 +820,11 @@
+ void
+ do_tlink (char **ld_argv, char **object_lst ATTRIBUTE_UNUSED)
+ {
+- int exit = tlink_execute ("ld", ld_argv, ldout, lderrout);
++ int ret = tlink_execute ("ld", ld_argv, ldout, lderrout);
+
+ tlink_init ();
+
+- if (exit)
++ if (ret)
+ {
+ int i = 0;
+
+@@ -831,7 +831,7 @@
+ /* Until collect does a better job of figuring out which are object
+ files, assume that everything on the command line could be. */
+ if (read_repo_files (ld_argv))
+- while (exit && i++ < MAX_ITERATIONS)
++ while (ret && i++ < MAX_ITERATIONS)
+ {
+ if (tlink_verbose >= 3)
+ {
+@@ -846,7 +846,7 @@
+ break;
+ if (tlink_verbose)
+ fprintf (stderr, _("collect: relinking\n"));
+- exit = tlink_execute ("ld", ld_argv, ldout, lderrout);
++ ret = tlink_execute ("ld", ld_argv, ldout, lderrout);
+ }
+ }
+
+@@ -854,9 +854,9 @@
+ unlink (ldout);
+ dump_file (lderrout, stderr);
+ unlink (lderrout);
+- if (exit)
++ if (ret)
+ {
+- error ("ld returned %d exit status", exit);
+- collect_exit (exit);
++ error ("ld returned %d exit status", ret);
++ exit (ret);
+ }
+ }
+Index: gcc/reginfo.c
+===================================================================
+--- a/src/gcc/reginfo.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/reginfo.c (.../branches/gcc-4_7-branch)
+@@ -88,7 +88,7 @@
+ char global_regs[FIRST_PSEUDO_REGISTER];
+
+ /* Declaration for the global register. */
+-static tree GTY(()) global_regs_decl[FIRST_PSEUDO_REGISTER];
++tree global_regs_decl[FIRST_PSEUDO_REGISTER];
+
+ /* Same information as REGS_INVALIDATED_BY_CALL but in regset form to be used
+ in dataflow more conveniently. */
+Index: gcc/Makefile.in
+===================================================================
+--- a/src/gcc/Makefile.in (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/Makefile.in (.../branches/gcc-4_7-branch)
+@@ -2570,7 +2570,7 @@
+ $(TM_H) coretypes.h $(TREE_DUMP_H) $(TREE_PASS_H) $(FLAGS_H) \
+ tree-iterator.h $(BASIC_BLOCK_H) $(GIMPLE_H) $(TREE_INLINE_H) \
+ $(VEC_H) langhooks.h alloc-pool.h pointer-set.h $(CFGLOOP_H) \
+- tree-pretty-print.h gimple-pretty-print.h $(DIAGNOSTIC_CORE_H)
++ tree-pretty-print.h gimple-pretty-print.h $(DIAGNOSTIC_CORE_H) $(PARAMS_H)
+ tree-optimize.o : tree-optimize.c $(TREE_FLOW_H) $(CONFIG_H) $(SYSTEM_H) \
+ $(TREE_H) $(TM_P_H) $(GGC_H) output.h \
+ $(DIAGNOSTIC_H) $(BASIC_BLOCK_H) $(FLAGS_H) $(TIMEVAR_H) $(TM_H) \
+Index: gcc/config/alpha/alpha.md
+===================================================================
+--- a/src/gcc/config/alpha/alpha.md (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/alpha/alpha.md (.../branches/gcc-4_7-branch)
+@@ -25,6 +25,7 @@
+ ;; Uses of UNSPEC in this file:
+
+ (define_c_enum "unspec" [
++ UNSPEC_XFLT_COMPARE
+ UNSPEC_ARG_HOME
+ UNSPEC_LDGP1
+ UNSPEC_INSXH
+Index: gcc/config/alpha/alpha.c
+===================================================================
+--- a/src/gcc/config/alpha/alpha.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/alpha/alpha.c (.../branches/gcc-4_7-branch)
+@@ -2617,6 +2617,7 @@
+ cmp_mode = cmp_mode == DImode ? DFmode : DImode;
+ op0 = gen_lowpart (cmp_mode, tem);
+ op1 = CONST0_RTX (cmp_mode);
++ cmp = gen_rtx_fmt_ee (code, VOIDmode, op0, op1);
+ local_fast_math = 1;
+ }
+
+@@ -2658,12 +2659,12 @@
+ break;
+
+ case GE: case GT: case GEU: case GTU:
+- /* These must be swapped. */
+- if (op1 != CONST0_RTX (cmp_mode))
+- {
+- code = swap_condition (code);
+- tem = op0, op0 = op1, op1 = tem;
+- }
++ /* These normally need swapping, but for integer zero we have
++ special patterns that recognize swapped operands. */
++ if (cmp_mode == DImode && op1 == const0_rtx)
++ break;
++ code = swap_condition (code);
++ tem = op0, op0 = op1, op1 = tem;
+ break;
+
+ default:
+@@ -3025,12 +3026,9 @@
+ operands[1] = op1;
+ out = gen_reg_rtx (DImode);
+
+- /* What's actually returned is -1,0,1, not a proper boolean value,
+- so use an EXPR_LIST as with a generic libcall instead of a
+- comparison type expression. */
+- note = gen_rtx_EXPR_LIST (VOIDmode, op1, NULL_RTX);
+- note = gen_rtx_EXPR_LIST (VOIDmode, op0, note);
+- note = gen_rtx_EXPR_LIST (VOIDmode, func, note);
++ /* What's actually returned is -1,0,1, not a proper boolean value. */
++ note = gen_rtx_fmt_ee (cmp_code, VOIDmode, op0, op1);
++ note = gen_rtx_UNSPEC (DImode, gen_rtvec (1, note), UNSPEC_XFLT_COMPARE);
+ alpha_emit_xfloating_libcall (func, out, operands, 2, note);
+
+ return out;
Index: gcc/config/sparc/sparc.c
===================================================================
--- a/src/gcc/config/sparc/sparc.c (.../tags/gcc_4_7_3_release)
@@ -2030,6 +19247,102 @@ Index: gcc/config/sparc/sparc.c
sparc_mode_class[i] = 1 << (int) SF_MODE;
else if (GET_MODE_SIZE (i) == 8)
sparc_mode_class[i] = 1 << (int) DF_MODE;
+@@ -10926,6 +10929,11 @@
+ /* Total Store Ordering: all memory transactions with store semantics
+ are followed by an implied StoreStore. */
+ implied |= StoreStore;
++
++ /* If we're not looking for a raw barrer (before+after), then atomic
++ operations get the benefit of being both load and store. */
++ if (load_store == 3 && before_after == 1)
++ implied |= StoreLoad;
+ /* FALLTHRU */
+
+ case SMM_PSO:
+Index: gcc/config/darwin-c.c
+===================================================================
+--- a/src/gcc/config/darwin-c.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/darwin-c.c (.../branches/gcc-4_7-branch)
+@@ -25,6 +25,7 @@
+ #include "tm.h"
+ #include "cpplib.h"
+ #include "tree.h"
++#include "target.h"
+ #include "incpath.h"
+ #include "c-family/c-common.h"
+ #include "c-family/c-pragma.h"
+@@ -36,6 +37,7 @@
+ #include "prefix.h"
+ #include "c-family/c-target.h"
+ #include "c-family/c-target-def.h"
++#include "cgraph.h"
+
+ /* Pragmas. */
+
+@@ -711,13 +713,60 @@
+ }
+ };
+
+-#undef TARGET_HANDLE_C_OPTION
++
++/* Support routines to dump the class references for NeXT ABI v1, aka
++ 32-bits ObjC-2.0, as top-level asms.
++ The following two functions should only be called from
++ objc/objc-next-runtime-abi-01.c. */
++
++static void
++darwin_objc_declare_unresolved_class_reference (const char *name)
++{
++ const char *lazy_reference = ".lazy_reference\t";
++ const char *hard_reference = ".reference\t";
++ const char *reference = MACHOPIC_INDIRECT ? lazy_reference : hard_reference;
++ size_t len = strlen (reference) + strlen(name) + 2;
++ char *buf = (char *) alloca (len);
++
++ gcc_checking_assert (!strncmp (name, ".objc_class_name_", 17));
++
++ snprintf (buf, len, "%s%s", reference, name);
++ cgraph_add_asm_node (build_string (strlen (buf), buf));
++}
++
++static void
++darwin_objc_declare_class_definition (const char *name)
++{
++ const char *xname = targetm.strip_name_encoding (name);
++ size_t len = strlen (xname) + 7 + 5;
++ char *buf = (char *) alloca (len);
++
++ gcc_checking_assert (!strncmp (name, ".objc_class_name_", 17)
++ || !strncmp (name, "*.objc_category_name_", 21));
++
++ /* Mimic default_globalize_label. */
++ snprintf (buf, len, ".globl\t%s", xname);
++ cgraph_add_asm_node (build_string (strlen (buf), buf));
++
++ snprintf (buf, len, "%s = 0", xname);
++ cgraph_add_asm_node (build_string (strlen (buf), buf));
++}
++
++#undef TARGET_HANDLE_C_OPTION
+ #define TARGET_HANDLE_C_OPTION handle_c_option
+
+-#undef TARGET_OBJC_CONSTRUCT_STRING_OBJECT
++#undef TARGET_OBJC_CONSTRUCT_STRING_OBJECT
+ #define TARGET_OBJC_CONSTRUCT_STRING_OBJECT darwin_objc_construct_string
+
+-#undef TARGET_STRING_OBJECT_REF_TYPE_P
++#undef TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE
++#define TARGET_OBJC_DECLARE_UNRESOLVED_CLASS_REFERENCE \
++ darwin_objc_declare_unresolved_class_reference
++
++#undef TARGET_OBJC_DECLARE_CLASS_DEFINITION
++#define TARGET_OBJC_DECLARE_CLASS_DEFINITION \
++ darwin_objc_declare_class_definition
++
++#undef TARGET_STRING_OBJECT_REF_TYPE_P
+ #define TARGET_STRING_OBJECT_REF_TYPE_P darwin_cfstring_ref_p
+
+ #undef TARGET_CHECK_STRING_OBJECT_FORMAT_ARG
Index: gcc/config/i386/i386.md
===================================================================
--- a/src/gcc/config/i386/i386.md (.../tags/gcc_4_7_3_release)
@@ -2042,7 +19355,85 @@ Index: gcc/config/i386/i386.md
;; For SSE/MMX support:
UNSPEC_FIX_NOTRUNC
-@@ -3444,9 +3445,9 @@
+@@ -201,8 +202,11 @@
+
+ ;; For RDRAND support
+ UNSPECV_RDRAND
+-])
+
++ ;; Non-local goto.
++ UNSPECV_NLGR
++ ])
++
+ ;; Constants to represent rounding modes in the ROUND instruction
+ (define_constants
+ [(ROUND_FLOOR 0x1)
+@@ -1644,7 +1648,7 @@
+ split_double_mode (DImode, &operands[1], 1, &operands[2], &operands[3]);
+
+ operands[1] = gen_lowpart (DImode, operands[2]);
+- operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx,
++ operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
+ GEN_INT (4)));
+ })
+
+@@ -1661,7 +1665,7 @@
+ split_double_mode (DImode, &operands[1], 1, &operands[2], &operands[3]);
+
+ operands[1] = gen_lowpart (DImode, operands[2]);
+- operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (DImode, stack_pointer_rtx,
++ operands[2] = gen_rtx_MEM (SImode, gen_rtx_PLUS (Pmode, stack_pointer_rtx,
+ GEN_INT (4)));
+ })
+
+@@ -1855,18 +1859,16 @@
+ [(set_attr "type" "*,*,sselog1,ssemov,ssemov")
+ (set_attr "prefix" "*,*,maybe_vex,maybe_vex,maybe_vex")
+ (set (attr "mode")
+- (cond [(eq_attr "alternative" "2,3")
+- (if_then_else
+- (match_test "optimize_function_for_size_p (cfun)")
+- (const_string "V4SF")
+- (const_string "TI"))
+- (eq_attr "alternative" "4")
+- (if_then_else
+- (ior (match_test "TARGET_SSE_TYPELESS_STORES")
+- (match_test "optimize_function_for_size_p (cfun)"))
+- (const_string "V4SF")
+- (const_string "TI"))]
+- (const_string "DI")))])
++ (cond [(eq_attr "alternative" "0,1")
++ (const_string "DI")
++ (ior (not (match_test "TARGET_SSE2"))
++ (match_test "optimize_function_for_size_p (cfun)"))
++ (const_string "V4SF")
++ (and (eq_attr "alternative" "4")
++ (match_test "TARGET_SSE_TYPELESS_STORES"))
++ (const_string "V4SF")
++ ]
++ (const_string "TI")))])
+
+ (define_split
+ [(set (match_operand:TI 0 "nonimmediate_operand" "")
+@@ -2328,7 +2330,7 @@
+ "TARGET_LP64 && ix86_check_movabs (insn, 0)"
+ "@
+ movabs{<imodesuffix>}\t{%1, %P0|[%P0], %1}
+- mov{<imodesuffix>}\t{%1, %a0|%a0, %1}"
++ mov{<imodesuffix>}\t{%1, %a0|<iptrsize> PTR %a0, %1}"
+ [(set_attr "type" "imov")
+ (set_attr "modrm" "0,*")
+ (set_attr "length_address" "8,0")
+@@ -2342,7 +2344,7 @@
+ "TARGET_LP64 && ix86_check_movabs (insn, 1)"
+ "@
+ movabs{<imodesuffix>}\t{%P1, %0|%0, [%P1]}
+- mov{<imodesuffix>}\t{%a1, %0|%0, %a1}"
++ mov{<imodesuffix>}\t{%a1, %0|%0, <iptrsize> PTR %a1}"
+ [(set_attr "type" "imov")
+ (set_attr "modrm" "0,*")
+ (set_attr "length_address" "8,0")
+@@ -3444,9 +3446,9 @@
})
(define_insn "*zero_extendsidi2_rex64"
@@ -2054,7 +19445,7 @@ Index: gcc/config/i386/i386.md
"TARGET_64BIT"
"@
mov{l}\t{%1, %k0|%k0, %1}
-@@ -3469,9 +3470,9 @@
+@@ -3469,9 +3471,9 @@
;; %%% Kill me once multi-word ops are sane.
(define_insn "zero_extendsidi2_1"
@@ -2066,7 +19457,72 @@ Index: gcc/config/i386/i386.md
(clobber (reg:CC FLAGS_REG))]
"!TARGET_64BIT"
"@
-@@ -15912,7 +15913,8 @@
+@@ -6553,7 +6555,7 @@
+ (set_attr "pent_pair" "pu")
+ (set_attr "mode" "SI")])
+
+-;; Overflow setting add and subtract instructions
++;; Overflow setting add instructions
+
+ (define_insn "*add<mode>3_cconly_overflow"
+ [(set (reg:CCC FLAGS_REG)
+@@ -6568,43 +6570,31 @@
+ [(set_attr "type" "alu")
+ (set_attr "mode" "<MODE>")])
+
+-(define_insn "*sub<mode>3_cconly_overflow"
++(define_insn "*add<mode>3_cc_overflow"
+ [(set (reg:CCC FLAGS_REG)
+ (compare:CCC
+- (minus:SWI
+- (match_operand:SWI 0 "nonimmediate_operand" "<r>m,<r>")
+- (match_operand:SWI 1 "<general_operand>" "<r><i>,<r>m"))
+- (match_dup 0)))]
+- ""
+- "cmp{<imodesuffix>}\t{%1, %0|%0, %1}"
+- [(set_attr "type" "icmp")
+- (set_attr "mode" "<MODE>")])
+-
+-(define_insn "*<plusminus_insn><mode>3_cc_overflow"
+- [(set (reg:CCC FLAGS_REG)
+- (compare:CCC
+- (plusminus:SWI
+- (match_operand:SWI 1 "nonimmediate_operand" "<comm>0,0")
++ (plus:SWI
++ (match_operand:SWI 1 "nonimmediate_operand" "%0,0")
+ (match_operand:SWI 2 "<general_operand>" "<r><i>,<r>m"))
+ (match_dup 1)))
+ (set (match_operand:SWI 0 "nonimmediate_operand" "=<r>m,<r>")
+- (plusminus:SWI (match_dup 1) (match_dup 2)))]
+- "ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
+- "<plusminus_mnemonic>{<imodesuffix>}\t{%2, %0|%0, %2}"
++ (plus:SWI (match_dup 1) (match_dup 2)))]
++ "ix86_binary_operator_ok (PLUS, <MODE>mode, operands)"
++ "add{<imodesuffix>}\t{%2, %0|%0, %2}"
+ [(set_attr "type" "alu")
+ (set_attr "mode" "<MODE>")])
+
+-(define_insn "*<plusminus_insn>si3_zext_cc_overflow"
++(define_insn "*addsi3_zext_cc_overflow"
+ [(set (reg:CCC FLAGS_REG)
+ (compare:CCC
+- (plusminus:SI
+- (match_operand:SI 1 "nonimmediate_operand" "<comm>0")
++ (plus:SI
++ (match_operand:SI 1 "nonimmediate_operand" "%0")
+ (match_operand:SI 2 "x86_64_general_operand" "rme"))
+ (match_dup 1)))
+ (set (match_operand:DI 0 "register_operand" "=r")
+- (zero_extend:DI (plusminus:SI (match_dup 1) (match_dup 2))))]
+- "TARGET_64BIT && ix86_binary_operator_ok (<CODE>, SImode, operands)"
+- "<plusminus_mnemonic>{l}\t{%2, %k0|%k0, %2}"
++ (zero_extend:DI (plus:SI (match_dup 1) (match_dup 2))))]
++ "TARGET_64BIT && ix86_binary_operator_ok (PLUS, SImode, operands)"
++ "add{l}\t{%2, %k0|%k0, %2}"
+ [(set_attr "type" "alu")
+ (set_attr "mode" "SI")])
+
+@@ -15912,7 +15902,8 @@
[(parallel [(set (match_operand 1 "memory_operand" "")
(match_operand 2 "register_operand" ""))
(set (match_operand 0 "register_operand" "")
@@ -2076,7 +19532,7 @@ Index: gcc/config/i386/i386.md
""
"ix86_current_function_needs_cld = 1;")
-@@ -15921,7 +15923,8 @@
+@@ -15921,7 +15912,8 @@
(match_operand:DI 2 "register_operand" "a"))
(set (match_operand:DI 0 "register_operand" "=D")
(plus:DI (match_dup 1)
@@ -2086,7 +19542,7 @@ Index: gcc/config/i386/i386.md
"TARGET_64BIT
&& !(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
"stosq"
-@@ -15934,7 +15937,8 @@
+@@ -15934,7 +15926,8 @@
(match_operand:SI 2 "register_operand" "a"))
(set (match_operand:P 0 "register_operand" "=D")
(plus:P (match_dup 1)
@@ -2096,7 +19552,7 @@ Index: gcc/config/i386/i386.md
"!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
"stos{l|d}"
[(set_attr "type" "str")
-@@ -15946,7 +15950,8 @@
+@@ -15946,7 +15939,8 @@
(match_operand:HI 2 "register_operand" "a"))
(set (match_operand:P 0 "register_operand" "=D")
(plus:P (match_dup 1)
@@ -2106,7 +19562,7 @@ Index: gcc/config/i386/i386.md
"!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
"stosw"
[(set_attr "type" "str")
-@@ -15958,7 +15963,8 @@
+@@ -15958,7 +15952,8 @@
(match_operand:QI 2 "register_operand" "a"))
(set (match_operand:P 0 "register_operand" "=D")
(plus:P (match_dup 1)
@@ -2116,10 +19572,122 @@ Index: gcc/config/i386/i386.md
"!(fixed_regs[AX_REG] || fixed_regs[DI_REG])"
"stosb"
[(set_attr "type" "str")
+@@ -16797,7 +16792,37 @@
+ emit_insn (gen_set_got (pic_offset_table_rtx));
+ DONE;
+ })
+-
++
++(define_insn_and_split "nonlocal_goto_receiver"
++ [(unspec_volatile [(const_int 0)] UNSPECV_NLGR)]
++ "TARGET_MACHO && !TARGET_64BIT && flag_pic"
++ "#"
++ "&& reload_completed"
++ [(const_int 0)]
++{
++ if (crtl->uses_pic_offset_table)
++ {
++ rtx xops[3];
++ rtx label_rtx = gen_label_rtx ();
++ rtx tmp;
++
++ /* Get a new pic base. */
++ emit_insn (gen_set_got_labelled (pic_offset_table_rtx, label_rtx));
++ /* Correct this with the offset from the new to the old. */
++ xops[0] = xops[1] = pic_offset_table_rtx;
++ label_rtx = gen_rtx_LABEL_REF (SImode, label_rtx);
++ tmp = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, label_rtx),
++ UNSPEC_MACHOPIC_OFFSET);
++ xops[2] = gen_rtx_CONST (Pmode, tmp);
++ ix86_expand_binary_operator (MINUS, SImode, xops);
++ }
++ else
++ /* No pic reg restore needed. */
++ emit_note (NOTE_INSN_DELETED);
++
++ DONE;
++})
++
+ ;; Avoid redundant prefixes by splitting HImode arithmetic to SImode.
+
+ (define_split
+@@ -17190,6 +17215,7 @@
+ "(TARGET_READ_MODIFY_WRITE || optimize_insn_for_size_p ())
+ && peep2_reg_dead_p (4, operands[0])
+ && !reg_overlap_mentioned_p (operands[0], operands[1])
++ && !reg_overlap_mentioned_p (operands[0], operands[2])
+ && (<MODE>mode != QImode
+ || immediate_operand (operands[2], QImode)
+ || q_regs_operand (operands[2], QImode))
+@@ -17254,6 +17280,7 @@
+ || immediate_operand (operands[2], SImode)
+ || q_regs_operand (operands[2], SImode))
+ && !reg_overlap_mentioned_p (operands[0], operands[1])
++ && !reg_overlap_mentioned_p (operands[0], operands[2])
+ && ix86_match_ccmode (peep2_next_insn (3),
+ (GET_CODE (operands[3]) == PLUS
+ || GET_CODE (operands[3]) == MINUS)
+Index: gcc/config/i386/f16cintrin.h
+===================================================================
+--- a/src/gcc/config/i386/f16cintrin.h (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/i386/f16cintrin.h (.../branches/gcc-4_7-branch)
+@@ -35,7 +35,7 @@
+ extern __inline float __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ _cvtsh_ss (unsigned short __S)
+ {
+- __v8hi __H = __extension__ (__v8hi){ __S, 0, 0, 0, 0, 0, 0, 0 };
++ __v8hi __H = __extension__ (__v8hi){ (short) __S, 0, 0, 0, 0, 0, 0, 0 };
+ __v4sf __A = __builtin_ia32_vcvtph2ps (__H);
+ return __builtin_ia32_vec_ext_v4sf (__A, 0);
+ }
+Index: gcc/config/i386/t-rtems
+===================================================================
+--- a/src/gcc/config/i386/t-rtems (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/i386/t-rtems (.../branches/gcc-4_7-branch)
+@@ -18,11 +18,10 @@
+ # <http://www.gnu.org/licenses/>.
+ #
+
+-MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro \
+-msoft-float
++MULTILIB_OPTIONS = mtune=i486/mtune=pentium/mtune=pentiumpro msoft-float
+ MULTILIB_DIRNAMES= m486 mpentium mpentiumpro soft-float
+-MULTILIB_MATCHES = msoft-float=mno-m80387
+-MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?mathlon
++MULTILIB_MATCHES = msoft-float=mno-80387
++MULTILIB_MATCHES += mtune?pentium=mtune?k6 mtune?pentiumpro=mtune?athlon
+ MULTILIB_EXCEPTIONS = \
+ mtune=pentium/*msoft-float* \
+ mtune=pentiumpro/*msoft-float*
+Index: gcc/config/i386/winnt.c
+===================================================================
+--- a/src/gcc/config/i386/winnt.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/i386/winnt.c (.../branches/gcc-4_7-branch)
+@@ -531,8 +531,9 @@
+ sets 'discard' characteristic, rather than telling linker
+ to warn of size or content mismatch, so do the same. */
+ bool discard = (flags & SECTION_CODE)
+- || lookup_attribute ("selectany",
+- DECL_ATTRIBUTES (decl));
++ || (TREE_CODE (decl) != IDENTIFIER_NODE
++ && lookup_attribute ("selectany",
++ DECL_ATTRIBUTES (decl)));
+ fprintf (asm_out_file, "\t.linkonce %s\n",
+ (discard ? "discard" : "same_size"));
+ }
Index: gcc/config/i386/sse.md
===================================================================
--- a/src/gcc/config/i386/sse.md (.../tags/gcc_4_7_3_release)
+++ b/src/gcc/config/i386/sse.md (.../branches/gcc-4_7-branch)
+@@ -3276,7 +3276,7 @@
+ (vec_select:V4SF
+ (vec_concat:V8SF
+ (match_operand:V4SF 1 "nonimmediate_operand" " 0,x,0,x,0")
+- (match_operand:V4SF 2 "nonimmediate_operand" " x,x,m,x,x"))
++ (match_operand:V4SF 2 "nonimmediate_operand" " x,x,m,m,x"))
+ (parallel [(const_int 0)
+ (const_int 1)
+ (const_int 4)
@@ -11167,7 +11167,8 @@
(match_operand:SI 2 "const_0_to_<sserotatemax>_operand" "n")))]
"TARGET_XOP"
@@ -2130,11 +19698,701 @@ Index: gcc/config/i386/sse.md
return \"vprot<ssemodesuffix>\t{%3, %1, %0|%0, %1, %3}\";
}
[(set_attr "type" "sseishft")
+@@ -11455,7 +11456,6 @@
+ [(set_attr "type" "ssecvt1")
+ (set_attr "mode" "<MODE>")])
+
+-;; scalar insns
+ (define_expand "xop_vmfrcz<mode>2"
+ [(set (match_operand:VF_128 0 "register_operand")
+ (vec_merge:VF_128
+@@ -11462,14 +11462,12 @@
+ (unspec:VF_128
+ [(match_operand:VF_128 1 "nonimmediate_operand")]
+ UNSPEC_FRCZ)
+- (match_dup 3)
++ (match_dup 2)
+ (const_int 1)))]
+ "TARGET_XOP"
+-{
+- operands[3] = CONST0_RTX (<MODE>mode);
+-})
++ "operands[2] = CONST0_RTX (<MODE>mode);")
+
+-(define_insn "*xop_vmfrcz_<mode>"
++(define_insn "*xop_vmfrcz<mode>2"
+ [(set (match_operand:VF_128 0 "register_operand" "=x")
+ (vec_merge:VF_128
+ (unspec:VF_128
+Index: gcc/config/i386/xopintrin.h
+===================================================================
+--- a/src/gcc/config/i386/xopintrin.h (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/i386/xopintrin.h (.../branches/gcc-4_7-branch)
+@@ -745,13 +745,17 @@
+ extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ _mm_frcz_ss (__m128 __A, __m128 __B)
+ {
+- return (__m128) __builtin_ia32_vfrczss ((__v4sf)__A, (__v4sf)__B);
++ return (__m128) __builtin_ia32_movss ((__v4sf)__A,
++ (__v4sf)
++ __builtin_ia32_vfrczss ((__v4sf)__B));
+ }
+
+ extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+ _mm_frcz_sd (__m128d __A, __m128d __B)
+ {
+- return (__m128d) __builtin_ia32_vfrczsd ((__v2df)__A, (__v2df)__B);
++ return (__m128d) __builtin_ia32_movsd ((__v2df)__A,
++ (__v2df)
++ __builtin_ia32_vfrczsd ((__v2df)__B));
+ }
+
+ extern __inline __m256 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
+Index: gcc/config/i386/driver-i386.c
+===================================================================
+--- a/src/gcc/config/i386/driver-i386.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/i386/driver-i386.c (.../branches/gcc-4_7-branch)
+@@ -350,7 +350,10 @@
+ enum vendor_signatures
+ {
+ SIG_INTEL = 0x756e6547 /* Genu */,
+- SIG_AMD = 0x68747541 /* Auth */
++ SIG_AMD = 0x68747541 /* Auth */,
++ SIG_CENTAUR = 0x746e6543 /* Cent */,
++ SIG_CYRIX = 0x69727943 /* Cyri */,
++ SIG_NSC = 0x646f6547 /* Geod */
+ };
+
+ enum processor_signatures
+@@ -466,6 +469,27 @@
+ has_fsgsbase = ebx & bit_FSGSBASE;
+ }
+
++ /* Check cpuid level of extended features. */
++ __cpuid (0x80000000, ext_level, ebx, ecx, edx);
++
++ if (ext_level > 0x80000000)
++ {
++ __cpuid (0x80000001, eax, ebx, ecx, edx);
++
++ has_lahf_lm = ecx & bit_LAHF_LM;
++ has_sse4a = ecx & bit_SSE4a;
++ has_abm = ecx & bit_ABM;
++ has_lwp = ecx & bit_LWP;
++ has_fma4 = ecx & bit_FMA4;
++ has_xop = ecx & bit_XOP;
++ has_tbm = ecx & bit_TBM;
++ has_lzcnt = ecx & bit_LZCNT;
++
++ has_longmode = edx & bit_LM;
++ has_3dnowp = edx & bit_3DNOWP;
++ has_3dnow = edx & bit_3DNOW;
++ }
++
+ /* Get XCR_XFEATURE_ENABLED_MASK register with xgetbv. */
+ #define XCR_XFEATURE_ENABLED_MASK 0x0
+ #define XSTATE_FP 0x1
+@@ -484,33 +508,16 @@
+ has_avx2 = 0;
+ has_fma = 0;
+ has_fma4 = 0;
++ has_f16c = 0;
+ has_xop = 0;
+ }
+
+- /* Check cpuid level of extended features. */
+- __cpuid (0x80000000, ext_level, ebx, ecx, edx);
+-
+- if (ext_level > 0x80000000)
+- {
+- __cpuid (0x80000001, eax, ebx, ecx, edx);
+-
+- has_lahf_lm = ecx & bit_LAHF_LM;
+- has_sse4a = ecx & bit_SSE4a;
+- has_abm = ecx & bit_ABM;
+- has_lwp = ecx & bit_LWP;
+- has_fma4 = ecx & bit_FMA4;
+- has_xop = ecx & bit_XOP;
+- has_tbm = ecx & bit_TBM;
+- has_lzcnt = ecx & bit_LZCNT;
+-
+- has_longmode = edx & bit_LM;
+- has_3dnowp = edx & bit_3DNOWP;
+- has_3dnow = edx & bit_3DNOW;
+- }
+-
+ if (!arch)
+ {
+- if (vendor == SIG_AMD)
++ if (vendor == SIG_AMD
++ || vendor == SIG_CENTAUR
++ || vendor == SIG_CYRIX
++ || vendor == SIG_NSC)
+ cache = detect_caches_amd (ext_level);
+ else if (vendor == SIG_INTEL)
+ {
+@@ -549,6 +556,37 @@
+ else
+ processor = PROCESSOR_PENTIUM;
+ }
++ else if (vendor == SIG_CENTAUR)
++ {
++ if (arch)
++ {
++ switch (family)
++ {
++ case 6:
++ if (model > 9)
++ /* Use the default detection procedure. */
++ processor = PROCESSOR_GENERIC32;
++ else if (model == 9)
++ cpu = "c3-2";
++ else if (model >= 6)
++ cpu = "c3";
++ else
++ processor = PROCESSOR_GENERIC32;
++ break;
++ case 5:
++ if (has_3dnow)
++ cpu = "winchip2";
++ else if (has_mmx)
++ cpu = "winchip2-c6";
++ else
++ processor = PROCESSOR_GENERIC32;
++ break;
++ default:
++ /* We have no idea. */
++ processor = PROCESSOR_GENERIC32;
++ }
++ }
++ }
+ else
+ {
+ switch (family)
+@@ -593,13 +631,18 @@
+ /* Atom. */
+ cpu = "atom";
+ break;
++ case 0x0f:
++ /* Merom. */
++ case 0x17:
++ case 0x1d:
++ /* Penryn. */
++ cpu = "core2";
++ break;
+ case 0x1a:
+ case 0x1e:
+ case 0x1f:
+ case 0x2e:
+ /* Nehalem. */
+- cpu = "corei7";
+- break;
+ case 0x25:
+ case 0x2c:
+ case 0x2f:
+@@ -611,15 +654,11 @@
+ /* Sandy Bridge. */
+ cpu = "corei7-avx";
+ break;
+- case 0x17:
+- case 0x1d:
+- /* Penryn. */
+- cpu = "core2";
++ case 0x3a:
++ case 0x3e:
++ /* Ivy Bridge. */
++ cpu = "core-avx-i";
+ break;
+- case 0x0f:
+- /* Merom. */
+- cpu = "core2";
+- break;
+ default:
+ if (arch)
+ {
Index: gcc/config/i386/i386.c
===================================================================
--- a/src/gcc/config/i386/i386.c (.../tags/gcc_4_7_3_release)
+++ b/src/gcc/config/i386/i386.c (.../branches/gcc-4_7-branch)
-@@ -20026,7 +20026,7 @@
+@@ -1623,7 +1623,7 @@
+ 8, /* MMX or SSE register to integer */
+ 8, /* size of l1 cache. */
+ 1024, /* size of l2 cache. */
+- 128, /* size of prefetch block */
++ 64, /* size of prefetch block */
+ 8, /* number of parallel prefetches */
+ 1, /* Branch cost */
+ COSTS_N_INSNS (6), /* cost of FADD and FSUB insns. */
+@@ -2979,7 +2979,7 @@
+ | PTA_SSSE3 | PTA_CX16},
+ {"corei7", PROCESSOR_COREI7_64, CPU_COREI7,
+ PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
+- | PTA_SSSE3 | PTA_SSE4_1 | PTA_SSE4_2 | PTA_CX16},
++ | PTA_SSSE3 | PTA_SSE4_1 | PTA_SSE4_2 | PTA_CX16 | PTA_POPCNT},
+ {"corei7-avx", PROCESSOR_COREI7_64, CPU_COREI7,
+ PTA_64BIT | PTA_MMX | PTA_SSE | PTA_SSE2 | PTA_SSE3
+ | PTA_SSSE3 | PTA_SSE4_1 | PTA_SSE4_2 | PTA_AVX
+@@ -6078,25 +6078,28 @@
+ case CHImode:
+ case CQImode:
+ {
+- int size = (bit_offset % 64)+ (int) GET_MODE_BITSIZE (mode);
++ int size = bit_offset + (int) GET_MODE_BITSIZE (mode);
+
+- if (size <= 32)
++ /* Analyze last 128 bits only. */
++ size = (size - 1) & 0x7f;
++
++ if (size < 32)
+ {
+ classes[0] = X86_64_INTEGERSI_CLASS;
+ return 1;
+ }
+- else if (size <= 64)
++ else if (size < 64)
+ {
+ classes[0] = X86_64_INTEGER_CLASS;
+ return 1;
+ }
+- else if (size <= 64+32)
++ else if (size < 64+32)
+ {
+ classes[0] = X86_64_INTEGER_CLASS;
+ classes[1] = X86_64_INTEGERSI_CLASS;
+ return 2;
+ }
+- else if (size <= 64+64)
++ else if (size < 64+64)
+ {
+ classes[0] = classes[1] = X86_64_INTEGER_CLASS;
+ return 2;
+@@ -6303,7 +6306,7 @@
+
+ /* Likewise, error if the ABI requires us to return values in the
+ x87 registers and the user specified -mno-80387. */
+- if (!TARGET_80387 && in_return)
++ if (!TARGET_FLOAT_RETURNS_IN_80387 && in_return)
+ for (i = 0; i < n; i++)
+ if (regclass[i] == X86_64_X87_CLASS
+ || regclass[i] == X86_64_X87UP_CLASS
+@@ -6357,7 +6360,7 @@
+ return gen_rtx_REG (XFmode, FIRST_STACK_REG);
+ if (n == 2 && regclass[0] == X86_64_INTEGER_CLASS
+ && regclass[1] == X86_64_INTEGER_CLASS
+- && (mode == CDImode || mode == TImode || mode == TFmode)
++ && (mode == CDImode || mode == TImode)
+ && intreg[0] + 1 == intreg[1])
+ return gen_rtx_REG (mode, intreg[0]);
+
+@@ -7129,9 +7132,15 @@
+ switch (regno)
+ {
+ case AX_REG:
++ case DX_REG:
+ return true;
++ case DI_REG:
++ case SI_REG:
++ return TARGET_64BIT && ix86_abi != MS_ABI;
+
+- case FIRST_FLOAT_REG:
++ /* Complex values are returned in %st(0)/%st(1) pair. */
++ case ST0_REG:
++ case ST1_REG:
+ /* TODO: The function should depend on current function ABI but
+ builtins.c would need updating then. Therefore we use the
+ default ABI. */
+@@ -7139,10 +7148,12 @@
+ return false;
+ return TARGET_FLOAT_RETURNS_IN_80387;
+
+- case FIRST_SSE_REG:
++ /* Complex values are returned in %xmm0/%xmm1 pair. */
++ case XMM0_REG:
++ case XMM1_REG:
+ return TARGET_SSE;
+
+- case FIRST_MMX_REG:
++ case MM0_REG:
+ if (TARGET_MACHO || TARGET_64BIT)
+ return false;
+ return TARGET_MMX;
+@@ -8613,17 +8624,12 @@
+
+ if (!flag_pic)
+ {
++ if (TARGET_MACHO)
++ /* We don't need a pic base, we're not producing pic. */
++ gcc_unreachable ();
++
+ xops[2] = gen_rtx_LABEL_REF (Pmode, label ? label : gen_label_rtx ());
+-
+ output_asm_insn ("mov%z0\t{%2, %0|%0, %2}", xops);
+-
+-#if TARGET_MACHO
+- /* Output the Mach-O "canonical" label name ("Lxx$pb") here too. This
+- is what will be referenced by the Mach-O PIC subsystem. */
+- if (!label)
+- ASM_OUTPUT_LABEL (asm_out_file, MACHOPIC_FUNCTION_BASE_NAME);
+-#endif
+-
+ targetm.asm_out.internal_label (asm_out_file, "L",
+ CODE_LABEL_NUMBER (XEXP (xops[2], 0)));
+ }
+@@ -8636,12 +8642,18 @@
+ xops[2] = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (name));
+ xops[2] = gen_rtx_MEM (QImode, xops[2]);
+ output_asm_insn ("call\t%X2", xops);
+- /* Output the Mach-O "canonical" label name ("Lxx$pb") here too. This
+- is what will be referenced by the Mach-O PIC subsystem. */
++
+ #if TARGET_MACHO
+- if (!label)
++ /* Output the Mach-O "canonical" pic base label name ("Lxx$pb") here.
++ This is what will be referenced by the Mach-O PIC subsystem. */
++ if (machopic_should_output_picbase_label () || !label)
+ ASM_OUTPUT_LABEL (asm_out_file, MACHOPIC_FUNCTION_BASE_NAME);
+- else
++
++ /* When we are restoring the pic base at the site of a nonlocal label,
++ and we decided to emit the pic base above, we will still output a
++ local label used for calculating the correction offset (even though
++ the offset will be 0 in that case). */
++ if (label)
+ targetm.asm_out.internal_label (asm_out_file, "L",
+ CODE_LABEL_NUMBER (label));
+ #endif
+@@ -8717,7 +8729,8 @@
+ && (df_regs_ever_live_p (REAL_PIC_OFFSET_TABLE_REGNUM)
+ || crtl->profile
+ || crtl->calls_eh_return
+- || crtl->uses_const_pool))
++ || crtl->uses_const_pool
++ || cfun->has_nonlocal_label))
+ return ix86_select_alt_pic_regnum () == INVALID_REGNUM;
+
+ if (crtl->calls_eh_return && maybe_eh_return)
+@@ -10421,14 +10434,14 @@
+
+ if (r10_live && eax_live)
+ {
+- t = choose_baseaddr (m->fs.sp_offset - allocate);
++ t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax);
+ emit_move_insn (r10, gen_frame_mem (Pmode, t));
+- t = choose_baseaddr (m->fs.sp_offset - allocate - UNITS_PER_WORD);
++ t = plus_constant (t, UNITS_PER_WORD);
+ emit_move_insn (eax, gen_frame_mem (Pmode, t));
+ }
+ else if (eax_live || r10_live)
+ {
+- t = choose_baseaddr (m->fs.sp_offset - allocate);
++ t = gen_rtx_PLUS (Pmode, stack_pointer_rtx, eax);
+ emit_move_insn ((eax_live ? eax : r10), gen_frame_mem (Pmode, t));
+ }
+ }
+@@ -11424,30 +11437,6 @@
+ }
+ }
+
+-/* Determine if op is suitable SUBREG RTX for address. */
+-
+-static bool
+-ix86_address_subreg_operand (rtx op)
+-{
+- enum machine_mode mode;
+-
+- if (!REG_P (op))
+- return false;
+-
+- mode = GET_MODE (op);
+-
+- if (GET_MODE_CLASS (mode) != MODE_INT)
+- return false;
+-
+- /* Don't allow SUBREGs that span more than a word. It can lead to spill
+- failures when the register is one word out of a two word structure. */
+- if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
+- return false;
+-
+- /* Allow only SUBREGs of non-eliminable hard registers. */
+- return register_no_elim_operand (op, mode);
+-}
+-
+ /* Extract the parts of an RTL expression that is a valid memory address
+ for an instruction. Return 0 if the structure of the address is
+ grossly off. Return -1 if the address contains ASHIFT, so it is not
+@@ -11512,7 +11501,7 @@
+ base = addr;
+ else if (GET_CODE (addr) == SUBREG)
+ {
+- if (ix86_address_subreg_operand (SUBREG_REG (addr)))
++ if (REG_P (SUBREG_REG (addr)))
+ base = addr;
+ else
+ return 0;
+@@ -11570,7 +11559,7 @@
+ break;
+
+ case SUBREG:
+- if (!ix86_address_subreg_operand (SUBREG_REG (op)))
++ if (!REG_P (SUBREG_REG (op)))
+ return 0;
+ /* FALLTHRU */
+
+@@ -11615,19 +11604,6 @@
+ scale = 1 << scale;
+ retval = -1;
+ }
+- else if (CONST_INT_P (addr))
+- {
+- if (!x86_64_immediate_operand (addr, VOIDmode))
+- return 0;
+-
+- /* Constant addresses are sign extended to 64bit, we have to
+- prevent addresses from 0x80000000 to 0xffffffff in x32 mode. */
+- if (TARGET_X32
+- && val_signbit_known_set_p (SImode, INTVAL (addr)))
+- return 0;
+-
+- disp = addr;
+- }
+ else
+ disp = addr; /* displacement */
+
+@@ -11636,7 +11612,7 @@
+ if (REG_P (index))
+ ;
+ else if (GET_CODE (index) == SUBREG
+- && ix86_address_subreg_operand (SUBREG_REG (index)))
++ && REG_P (SUBREG_REG (index)))
+ ;
+ else
+ return 0;
+@@ -12115,6 +12091,45 @@
+ return false;
+ }
+
++/* Determine if op is suitable RTX for an address register.
++ Return naked register if a register or a register subreg is
++ found, otherwise return NULL_RTX. */
++
++static rtx
++ix86_validate_address_register (rtx op)
++{
++ enum machine_mode mode = GET_MODE (op);
++
++ /* Only SImode or DImode registers can form the address. */
++ if (mode != SImode && mode != DImode)
++ return NULL_RTX;
++
++ if (REG_P (op))
++ return op;
++ else if (GET_CODE (op) == SUBREG)
++ {
++ rtx reg = SUBREG_REG (op);
++
++ if (!REG_P (reg))
++ return NULL_RTX;
++
++ mode = GET_MODE (reg);
++
++ /* Don't allow SUBREGs that span more than a word. It can
++ lead to spill failures when the register is one word out
++ of a two word structure. */
++ if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
++ return NULL_RTX;
++
++ /* Allow only SUBREGs of non-eliminable hard registers. */
++ if (register_no_elim_operand (reg, mode))
++ return reg;
++ }
++
++ /* Op is not a register. */
++ return NULL_RTX;
++}
++
+ /* Recognizes RTL expressions that are valid memory addresses for an
+ instruction. The MODE argument is the machine mode for the MEM
+ expression that wants to use this address.
+@@ -12130,6 +12145,7 @@
+ struct ix86_address parts;
+ rtx base, index, disp;
+ HOST_WIDE_INT scale;
++ enum ix86_address_seg seg;
+
+ if (ix86_decompose_address (addr, &parts) <= 0)
+ /* Decomposition failed. */
+@@ -12139,23 +12155,16 @@
+ index = parts.index;
+ disp = parts.disp;
+ scale = parts.scale;
++ seg = parts.seg;
+
+ /* Validate base register. */
+ if (base)
+ {
+- rtx reg;
++ rtx reg = ix86_validate_address_register (base);
+
+- if (REG_P (base))
+- reg = base;
+- else if (GET_CODE (base) == SUBREG && REG_P (SUBREG_REG (base)))
+- reg = SUBREG_REG (base);
+- else
+- /* Base is not a register. */
++ if (reg == NULL_RTX)
+ return false;
+
+- if (GET_MODE (base) != SImode && GET_MODE (base) != DImode)
+- return false;
+-
+ if ((strict && ! REG_OK_FOR_BASE_STRICT_P (reg))
+ || (! strict && ! REG_OK_FOR_BASE_NONSTRICT_P (reg)))
+ /* Base is not valid. */
+@@ -12165,19 +12174,11 @@
+ /* Validate index register. */
+ if (index)
+ {
+- rtx reg;
++ rtx reg = ix86_validate_address_register (index);
+
+- if (REG_P (index))
+- reg = index;
+- else if (GET_CODE (index) == SUBREG && REG_P (SUBREG_REG (index)))
+- reg = SUBREG_REG (index);
+- else
+- /* Index is not a register. */
++ if (reg == NULL_RTX)
+ return false;
+
+- if (GET_MODE (index) != SImode && GET_MODE (index) != DImode)
+- return false;
+-
+ if ((strict && ! REG_OK_FOR_INDEX_STRICT_P (reg))
+ || (! strict && ! REG_OK_FOR_INDEX_NONSTRICT_P (reg)))
+ /* Index is not valid. */
+@@ -12189,6 +12190,12 @@
+ && GET_MODE (base) != GET_MODE (index))
+ return false;
+
++ /* Address override works only on the (%reg) part of %fs:(%reg). */
++ if (seg != SEG_DEFAULT
++ && ((base && GET_MODE (base) != word_mode)
++ || (index && GET_MODE (index) != word_mode)))
++ return false;
++
+ /* Validate scale factor. */
+ if (scale != 1)
+ {
+@@ -12310,6 +12317,12 @@
+ && !x86_64_immediate_operand (disp, VOIDmode))
+ /* Displacement is out of range. */
+ return false;
++ /* In x32 mode, constant addresses are sign extended to 64bit, so
++ we have to prevent addresses from 0x80000000 to 0xffffffff. */
++ else if (TARGET_X32 && !(index || base)
++ && CONST_INT_P (disp)
++ && val_signbit_known_set_p (SImode, INTVAL (disp)))
++ return false;
+ }
+
+ /* Everything looks valid. */
+@@ -13652,8 +13665,6 @@
+ Those same assemblers have the same but opposite lossage on cmov. */
+ if (mode == CCmode)
+ suffix = fp ? "nbe" : "a";
+- else if (mode == CCCmode)
+- suffix = "b";
+ else
+ gcc_unreachable ();
+ break;
+@@ -13675,8 +13686,12 @@
+ }
+ break;
+ case LTU:
+- gcc_assert (mode == CCmode || mode == CCCmode);
+- suffix = "b";
++ if (mode == CCmode)
++ suffix = "b";
++ else if (mode == CCCmode)
++ suffix = "c";
++ else
++ gcc_unreachable ();
+ break;
+ case GE:
+ switch (mode)
+@@ -13696,9 +13711,12 @@
+ }
+ break;
+ case GEU:
+- /* ??? As above. */
+- gcc_assert (mode == CCmode || mode == CCCmode);
+- suffix = fp ? "nb" : "ae";
++ if (mode == CCmode)
++ suffix = fp ? "nb" : "ae";
++ else if (mode == CCCmode)
++ suffix = "nc";
++ else
++ gcc_unreachable ();
+ break;
+ case LE:
+ gcc_assert (mode == CCmode || mode == CCGCmode || mode == CCNOmode);
+@@ -13705,11 +13723,8 @@
+ suffix = "le";
+ break;
+ case LEU:
+- /* ??? As above. */
+ if (mode == CCmode)
+ suffix = "be";
+- else if (mode == CCCmode)
+- suffix = fp ? "nb" : "ae";
+ else
+ gcc_unreachable ();
+ break;
+@@ -16973,8 +16988,7 @@
+ int ok;
+
+ /* FIXME: Handle zero-extended addresses. */
+- if (GET_CODE (operands[1]) == ZERO_EXTEND
+- || GET_CODE (operands[1]) == AND)
++ if (SImode_address_operand (operands[1], VOIDmode))
+ return false;
+
+ /* Check we need to optimize. */
+@@ -16981,9 +16995,17 @@
+ if (!TARGET_OPT_AGU || optimize_function_for_size_p (cfun))
+ return false;
+
+- /* Check it is correct to split here. */
+- if (!ix86_ok_to_clobber_flags(insn))
++ /* The "at least two components" test below might not catch simple
++ move insns if parts.base is non-NULL and parts.disp is const0_rtx
++ as the only components in the address, e.g. if the register is
++ %rbp or %r13. As this test is much cheaper and moves are the
++ common case, do this check first. */
++ if (REG_P (operands[1]))
+ return false;
++
++ /* Check if it is OK to split here. */
++ if (!ix86_ok_to_clobber_flags (insn))
++ return false;
+
+ ok = ix86_decompose_address (operands[1], &parts);
+ gcc_assert (ok);
+@@ -18057,12 +18079,7 @@
+ return CCmode;
+ case GTU: /* CF=0 & ZF=0 */
+ case LEU: /* CF=1 | ZF=1 */
+- /* Detect overflow checks. They need just the carry flag. */
+- if (GET_CODE (op0) == MINUS
+- && rtx_equal_p (op1, XEXP (op0, 0)))
+- return CCCmode;
+- else
+- return CCmode;
++ return CCmode;
+ /* Codes possibly doable only with sign flag when
+ comparing against zero. */
+ case GE: /* SF=OF or SF=0 */
+@@ -20026,7 +20043,7 @@
vec[i * 2 + 1] = const1_rtx;
}
vt = gen_rtx_CONST_VECTOR (maskmode, gen_rtvec_v (w, vec));
@@ -2143,7 +20401,16 @@ Index: gcc/config/i386/i386.c
t1 = expand_simple_binop (maskmode, PLUS, t1, vt, t1, 1,
OPTAB_DIRECT);
-@@ -20223,7 +20223,7 @@
+@@ -20056,7 +20073,7 @@
+ return;
+
+ case V8SFmode:
+- mask = gen_lowpart (V8SFmode, mask);
++ mask = gen_lowpart (V8SImode, mask);
+ if (one_operand_shuffle)
+ emit_insn (gen_avx2_permvarv8sf (target, op0, mask));
+ else
+@@ -20223,7 +20240,7 @@
for (i = 0; i < 16; ++i)
vec[i] = GEN_INT (i/e * e);
vt = gen_rtx_CONST_VECTOR (V16QImode, gen_rtvec_v (16, vec));
@@ -2152,7 +20419,7 @@ Index: gcc/config/i386/i386.c
if (TARGET_XOP)
emit_insn (gen_xop_pperm (mask, mask, mask, vt));
else
-@@ -20234,7 +20234,7 @@
+@@ -20234,7 +20251,7 @@
for (i = 0; i < 16; ++i)
vec[i] = GEN_INT (i % e);
vt = gen_rtx_CONST_VECTOR (V16QImode, gen_rtvec_v (16, vec));
@@ -2161,6 +20428,274 @@ Index: gcc/config/i386/i386.c
emit_insn (gen_addv16qi3 (mask, mask, vt));
}
+@@ -24258,7 +24275,8 @@
+ int
+ ix86_data_alignment (tree type, int align)
+ {
+- int max_align = optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
++ int max_align
++ = optimize_size ? BITS_PER_WORD : MIN (256, MAX_OFILE_ALIGNMENT);
+
+ if (AGGREGATE_TYPE_P (type)
+ && TYPE_SIZE (type)
+@@ -27199,8 +27217,8 @@
+ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_shlv8hi3, "__builtin_ia32_vpshlw", IX86_BUILTIN_VPSHLW, UNKNOWN, (int)MULTI_ARG_2_HI },
+ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_shlv16qi3, "__builtin_ia32_vpshlb", IX86_BUILTIN_VPSHLB, UNKNOWN, (int)MULTI_ARG_2_QI },
+
+- { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv4sf2, "__builtin_ia32_vfrczss", IX86_BUILTIN_VFRCZSS, UNKNOWN, (int)MULTI_ARG_2_SF },
+- { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv2df2, "__builtin_ia32_vfrczsd", IX86_BUILTIN_VFRCZSD, UNKNOWN, (int)MULTI_ARG_2_DF },
++ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv4sf2, "__builtin_ia32_vfrczss", IX86_BUILTIN_VFRCZSS, UNKNOWN, (int)MULTI_ARG_1_SF },
++ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_vmfrczv2df2, "__builtin_ia32_vfrczsd", IX86_BUILTIN_VFRCZSD, UNKNOWN, (int)MULTI_ARG_1_DF },
+ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv4sf2, "__builtin_ia32_vfrczps", IX86_BUILTIN_VFRCZPS, UNKNOWN, (int)MULTI_ARG_1_SF },
+ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv2df2, "__builtin_ia32_vfrczpd", IX86_BUILTIN_VFRCZPD, UNKNOWN, (int)MULTI_ARG_1_DF },
+ { OPTION_MASK_ISA_XOP, CODE_FOR_xop_frczv8sf2, "__builtin_ia32_vfrczps256", IX86_BUILTIN_VFRCZPS256, UNKNOWN, (int)MULTI_ARG_1_SF2 },
+@@ -29763,7 +29781,9 @@
+ mode4 = insn_data[icode].operand[5].mode;
+
+ if (target == NULL_RTX
+- || GET_MODE (target) != insn_data[icode].operand[0].mode)
++ || GET_MODE (target) != insn_data[icode].operand[0].mode
++ || !insn_data[icode].operand[0].predicate (target,
++ GET_MODE (target)))
+ subtarget = gen_reg_rtx (insn_data[icode].operand[0].mode);
+ else
+ subtarget = target;
+@@ -36635,7 +36655,9 @@
+ else
+ dfinal.perm[i] = e;
+ }
+- dfinal.op0 = gen_reg_rtx (dfinal.vmode);
++
++ if (!d->testing_p)
++ dfinal.op0 = gen_reg_rtx (dfinal.vmode);
+ dfinal.op1 = dfinal.op0;
+ dremap.target = dfinal.op0;
+
+@@ -36833,6 +36855,9 @@
+ return false;
+ gcc_assert (d->op0 != d->op1);
+
++ if (d->testing_p)
++ return true;
++
+ nelt = d->nelt;
+ eltsz = GET_MODE_SIZE (GET_MODE_INNER (d->vmode));
+
+@@ -37032,6 +37057,8 @@
+ switch (d->vmode)
+ {
+ case V4DFmode:
++ if (d->testing_p)
++ break;
+ t1 = gen_reg_rtx (V4DFmode);
+ t2 = gen_reg_rtx (V4DFmode);
+
+@@ -37051,6 +37078,8 @@
+ {
+ int mask = odd ? 0xdd : 0x88;
+
++ if (d->testing_p)
++ break;
+ t1 = gen_reg_rtx (V8SFmode);
+ t2 = gen_reg_rtx (V8SFmode);
+ t3 = gen_reg_rtx (V8SFmode);
+@@ -37092,6 +37121,8 @@
+ return expand_vec_perm_pshufb2 (d);
+ else
+ {
++ if (d->testing_p)
++ break;
+ /* We need 2*log2(N)-1 operations to achieve odd/even
+ with interleave. */
+ t1 = gen_reg_rtx (V8HImode);
+@@ -37113,6 +37144,8 @@
+ return expand_vec_perm_pshufb2 (d);
+ else
+ {
++ if (d->testing_p)
++ break;
+ t1 = gen_reg_rtx (V16QImode);
+ t2 = gen_reg_rtx (V16QImode);
+ t3 = gen_reg_rtx (V16QImode);
+@@ -37145,6 +37178,9 @@
+ return expand_vec_perm_even_odd_1 (&d_copy, odd);
+ }
+
++ if (d->testing_p)
++ break;
++
+ t1 = gen_reg_rtx (V4DImode);
+ t2 = gen_reg_rtx (V4DImode);
+
+@@ -37171,6 +37207,9 @@
+ return expand_vec_perm_even_odd_1 (&d_copy, odd);
+ }
+
++ if (d->testing_p)
++ break;
++
+ t1 = gen_reg_rtx (V8SImode);
+ t2 = gen_reg_rtx (V8SImode);
+
+@@ -37263,6 +37302,8 @@
+ case V16QImode:
+ /* These can be implemented via interleave. We save one insn by
+ stopping once we have promoted to V4SImode and then use pshufd. */
++ if (d->testing_p)
++ return true;
+ do
+ {
+ rtx dest;
+Index: gcc/config/tilegx/tilegx.md
+===================================================================
+--- a/src/gcc/config/tilegx/tilegx.md (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/tilegx/tilegx.md (.../branches/gcc-4_7-branch)
+@@ -4924,10 +4924,8 @@
+
+ ;; Network intrinsics
+
+-;; Note the "pseudo" text is handled specially by the
+-;; asm_output_opcode routine. If the output is an empty string, the
+-;; instruction would bypass the asm_output_opcode routine, bypassing
+-;; the bundle handling code.
++;; Note the this barrier is of type "nothing," which is deleted after
++;; the final scheduling pass so that nothing is emitted for it.
+ (define_insn "tilegx_network_barrier"
+ [(unspec_volatile:SI [(const_int 0)] UNSPEC_NETWORK_BARRIER)]
+ ""
+Index: gcc/config/tilegx/tilegx-c.c
+===================================================================
+--- a/src/gcc/config/tilegx/tilegx-c.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/tilegx/tilegx-c.c (.../branches/gcc-4_7-branch)
+@@ -48,6 +48,9 @@
+ if (TARGET_32BIT)
+ builtin_define ("__tilegx32__");
+
++ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
++ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
++
+ TILEGX_CPU_CPP_ENDIAN_BUILTINS ();
+ GNU_USER_TARGET_OS_CPP_BUILTINS ();
+ }
+Index: gcc/config/tilegx/sync.md
+===================================================================
+--- a/src/gcc/config/tilegx/sync.md (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/tilegx/sync.md (.../branches/gcc-4_7-branch)
+@@ -151,15 +151,22 @@
+ (match_operand:SI 3 "const_int_operand" "")] ;; model
+ ""
+ {
++ rtx addend;
+ enum memmodel model = (enum memmodel) INTVAL (operands[3]);
+
+ if (operands[2] != const0_rtx)
+- emit_move_insn (operands[2], gen_rtx_NEG (<MODE>mode, operands[2]));
++ {
++ addend = gen_reg_rtx (<MODE>mode);
++ emit_move_insn (addend,
++ gen_rtx_MINUS (<MODE>mode, const0_rtx, operands[2]));
++ }
++ else
++ addend = operands[2];
+
+ tilegx_pre_atomic_barrier (model);
+ emit_insn (gen_atomic_fetch_add_bare<mode> (operands[0],
+ operands[1],
+- operands[2]));
++ addend));
+ tilegx_post_atomic_barrier (model);
+ DONE;
+ })
+Index: gcc/config/tilegx/tilegx.c
+===================================================================
+--- a/src/gcc/config/tilegx/tilegx.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/tilegx/tilegx.c (.../branches/gcc-4_7-branch)
+@@ -678,6 +678,16 @@
+ }
+
+
++/* Implement TARGET_EXPAND_TO_RTL_HOOK. */
++static void
++tilegx_expand_to_rtl_hook (void)
++{
++ /* Exclude earlier sets of crtl->uses_pic_offset_table, because we
++ only care about uses actually emitted. */
++ crtl->uses_pic_offset_table = 0;
++}
++
++
+ /* Implement TARGET_SHIFT_TRUNCATION_MASK. DImode shifts use the mode
+ matching insns and therefore guarantee that the shift count is
+ modulo 64. SImode shifts sometimes use the 64 bit version so do
+@@ -3490,6 +3500,12 @@
+ }
+ if (!pat)
+ return NULL_RTX;
++
++ /* If we are generating a prefetch, tell the scheduler not to move
++ it around. */
++ if (GET_CODE (pat) == PREFETCH)
++ PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
++
+ emit_insn (pat);
+
+ if (nonvoid)
+@@ -4317,10 +4333,12 @@
+ basic_block bb;
+ FOR_EACH_BB (bb)
+ {
+- rtx insn, next;
++ rtx insn, next, prev;
+ rtx end = NEXT_INSN (BB_END (bb));
+
+- for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn; insn = next)
++ prev = NULL_RTX;
++ for (insn = next_insn_to_bundle (BB_HEAD (bb), end); insn;
++ prev = insn, insn = next)
+ {
+ next = next_insn_to_bundle (NEXT_INSN (insn), end);
+
+@@ -4345,6 +4363,18 @@
+ PUT_MODE (insn, SImode);
+ }
+ }
++
++ /* Delete barrier insns, because they can mess up the
++ emitting of bundle braces. If it is end-of-bundle, then
++ the previous insn must be marked end-of-bundle. */
++ if (get_attr_type (insn) == TYPE_NOTHING) {
++ if (GET_MODE (insn) == QImode && prev != NULL
++ && GET_MODE (prev) == SImode)
++ {
++ PUT_MODE (prev, QImode);
++ }
++ delete_insn (insn);
++ }
+ }
+ }
+ }
+@@ -5428,6 +5458,9 @@
+ #undef TARGET_RTX_COSTS
+ #define TARGET_RTX_COSTS tilegx_rtx_costs
+
++#undef TARGET_EXPAND_TO_RTL_HOOK
++#define TARGET_EXPAND_TO_RTL_HOOK tilegx_expand_to_rtl_hook
++
+ #undef TARGET_SHIFT_TRUNCATION_MASK
+ #define TARGET_SHIFT_TRUNCATION_MASK tilegx_shift_truncation_mask
+
+Index: gcc/config/darwin-protos.h
+===================================================================
+--- a/src/gcc/config/darwin-protos.h (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/darwin-protos.h (.../branches/gcc-4_7-branch)
+@@ -26,6 +26,7 @@
+ extern void machopic_output_function_base_name (FILE *);
+ extern const char *machopic_indirection_name (rtx, bool);
+ extern const char *machopic_mcount_stub_name (void);
++extern bool machopic_should_output_picbase_label (void);
+
+ #ifdef RTX_CODE
+
Index: gcc/config/sh/sh.md
===================================================================
--- a/src/gcc/config/sh/sh.md (.../tags/gcc_4_7_3_release)
@@ -2174,11 +20709,61 @@ Index: gcc/config/sh/sh.md
(match_operand:SI 1 "const_int_operand")
(match_operand:SI 2 "const_int_operand"))
(const_int 0)))]
+Index: gcc/config/avr/avr.c
+===================================================================
+--- a/src/gcc/config/avr/avr.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/avr/avr.c (.../branches/gcc-4_7-branch)
+@@ -549,8 +549,17 @@
+ {
+ tree args = TYPE_ARG_TYPES (TREE_TYPE (decl));
+ tree ret = TREE_TYPE (TREE_TYPE (decl));
+- const char *name = IDENTIFIER_POINTER (DECL_NAME (decl));
+-
++ const char *name;
++
++ name = DECL_ASSEMBLER_NAME_SET_P (decl)
++ ? IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))
++ : IDENTIFIER_POINTER (DECL_NAME (decl));
++
++ /* Skip a leading '*' that might still prefix the assembler name,
++ e.g. in non-LTO runs. */
++
++ name = default_strip_name_encoding (name);
++
+ /* Silently ignore 'signal' if 'interrupt' is present. AVR-LibC startet
+ using this when it switched from SIGNAL and INTERRUPT to ISR. */
+
+@@ -1004,7 +1013,7 @@
+ leaf function and thus X has already been saved. */
+
+ int irq_state = -1;
+- HOST_WIDE_INT size_cfa = size;
++ HOST_WIDE_INT size_cfa = size, neg_size;
+ rtx fp_plus_insns, fp, my_fp;
+
+ gcc_assert (frame_pointer_needed
+@@ -1043,6 +1052,7 @@
+ }
+
+ size = trunc_int_for_mode (size, GET_MODE (my_fp));
++ neg_size = trunc_int_for_mode (-size, GET_MODE (my_fp));
+
+ /************ Method 1: Adjust frame pointer ************/
+
+@@ -1062,7 +1072,7 @@
+ gen_rtx_SET (VOIDmode, fp, stack_pointer_rtx));
+ }
+
+- insn = emit_move_insn (my_fp, plus_constant (my_fp, -size));
++ insn = emit_move_insn (my_fp, plus_constant (my_fp, neg_size));
+ if (frame_pointer_needed)
+ {
+ RTX_FRAME_RELATED_P (insn) = 1;
Index: gcc/config/rs6000/rs6000.c
===================================================================
--- a/src/gcc/config/rs6000/rs6000.c (.../tags/gcc_4_7_3_release)
+++ b/src/gcc/config/rs6000/rs6000.c (.../branches/gcc-4_7-branch)
-@@ -2398,8 +2398,16 @@
+@@ -2398,8 +2398,17 @@
reg_size = UNITS_PER_WORD;
for (m = 0; m < NUM_MACHINE_MODES; ++m)
@@ -2188,7 +20773,8 @@ Index: gcc/config/rs6000/rs6000.c
+ int reg_size2 = reg_size;
+
+ /* TFmode/TDmode always takes 2 registers, even in VSX. */
-+ if (m == TDmode || m == TFmode)
++ if (TARGET_VSX && VSX_REG_CLASS_P (c)
++ && (m == TDmode || m == TFmode))
+ reg_size2 = UNITS_PER_FP_WORD;
+
+ rs6000_class_max_nregs[m][c]
@@ -2232,6 +20818,60 @@ Index: gcc/config/rs6000/rs6000.h
#define VSX_VECTOR_MODE(MODE) \
((MODE) == V4SFmode \
+Index: gcc/config/darwin.c
+===================================================================
+--- a/src/gcc/config/darwin.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/darwin.c (.../branches/gcc-4_7-branch)
+@@ -362,14 +362,13 @@
+
+ static GTY(()) const char * function_base_func_name;
+ static GTY(()) int current_pic_label_num;
++static GTY(()) int emitted_pic_label_num;
+
+-void
+-machopic_output_function_base_name (FILE *file)
++static void
++update_pic_label_number_if_needed (void)
+ {
+ const char *current_name;
+
+- /* If dynamic-no-pic is on, we should not get here. */
+- gcc_assert (!MACHO_DYNAMIC_NO_PIC_P);
+ /* When we are generating _get_pc thunks within stubs, there is no current
+ function. */
+ if (current_function_decl)
+@@ -387,9 +386,30 @@
+ ++current_pic_label_num;
+ function_base_func_name = "L_machopic_stub_dummy";
+ }
+- fprintf (file, "L%011d$pb", current_pic_label_num);
+ }
+
++void
++machopic_output_function_base_name (FILE *file)
++{
++ /* If dynamic-no-pic is on, we should not get here. */
++ gcc_assert (!MACHO_DYNAMIC_NO_PIC_P);
++
++ update_pic_label_number_if_needed ();
++ fprintf (file, "L%d$pb", current_pic_label_num);
++}
++
++bool
++machopic_should_output_picbase_label (void)
++{
++ update_pic_label_number_if_needed ();
++
++ if (current_pic_label_num == emitted_pic_label_num)
++ return false;
++
++ emitted_pic_label_num = current_pic_label_num;
++ return true;
++}
++
+ /* The suffix attached to non-lazy pointer symbols. */
+ #define NON_LAZY_POINTER_SUFFIX "$non_lazy_ptr"
+ /* The suffix attached to stub symbols. */
Index: gcc/config/darwin.h
===================================================================
--- a/src/gcc/config/darwin.h (.../tags/gcc_4_7_3_release)
@@ -2265,6 +20905,109 @@ Index: gcc/config/darwin.h
/* When generating stabs debugging, use N_BINCL entries. */
#define DBX_USE_BINCL
+@@ -612,8 +616,6 @@
+ fprintf (FILE, "\"%s\"", xname); \
+ else if (darwin_label_is_anonymous_local_objc_name (xname)) \
+ fprintf (FILE, "L%s", xname); \
+- else if (!strncmp (xname, ".objc_class_name_", 17)) \
+- fprintf (FILE, "%s", xname); \
+ else if (xname[0] != '"' && name_needs_quotes (xname)) \
+ asm_fprintf (FILE, "\"%U%s\"", xname); \
+ else \
+@@ -696,29 +698,6 @@
+ #undef TARGET_ASM_RELOC_RW_MASK
+ #define TARGET_ASM_RELOC_RW_MASK machopic_reloc_rw_mask
+
+-
+-#define ASM_DECLARE_UNRESOLVED_REFERENCE(FILE,NAME) \
+- do { \
+- if (FILE) { \
+- if (MACHOPIC_INDIRECT) \
+- fprintf (FILE, "\t.lazy_reference "); \
+- else \
+- fprintf (FILE, "\t.reference "); \
+- assemble_name (FILE, NAME); \
+- fprintf (FILE, "\n"); \
+- } \
+- } while (0)
+-
+-#define ASM_DECLARE_CLASS_REFERENCE(FILE,NAME) \
+- do { \
+- if (FILE) { \
+- fprintf (FILE, "\t"); \
+- assemble_name (FILE, NAME); \
+- fprintf (FILE, "=0\n"); \
+- (*targetm.asm_out.globalize_label) (FILE, NAME); \
+- } \
+- } while (0)
+-
+ /* Globalizing directive for a label. */
+ #define GLOBAL_ASM_OP "\t.globl "
+ #define TARGET_ASM_GLOBALIZE_LABEL darwin_globalize_label
+Index: gcc/config/tilepro/tilepro-c.c
+===================================================================
+--- a/src/gcc/config/tilepro/tilepro-c.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/tilepro/tilepro-c.c (.../branches/gcc-4_7-branch)
+@@ -45,6 +45,11 @@
+ builtin_define ("__tile_chip__=1");
+ builtin_define ("__tile_chip_rev__=0");
+
++ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");
++ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");
++ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");
++ builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8");
++
+ TILEPRO_CPU_CPP_ENDIAN_BUILTINS ();
+ GNU_USER_TARGET_OS_CPP_BUILTINS ();
+ }
+Index: gcc/config/tilepro/tilepro.c
+===================================================================
+--- a/src/gcc/config/tilepro/tilepro.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/tilepro/tilepro.c (.../branches/gcc-4_7-branch)
+@@ -3167,6 +3167,12 @@
+ }
+ if (!pat)
+ return NULL_RTX;
++
++ /* If we are generating a prefetch, tell the scheduler not to move
++ it around. */
++ if (GET_CODE (pat) == PREFETCH)
++ PREFETCH_SCHEDULE_BARRIER_P (pat) = true;
++
+ emit_insn (pat);
+
+ if (nonvoid)
+Index: gcc/config/tilepro/tilepro.md
+===================================================================
+--- a/src/gcc/config/tilepro/tilepro.md (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/tilepro/tilepro.md (.../branches/gcc-4_7-branch)
+@@ -796,7 +796,7 @@
+
+ (define_expand "ctzdi2"
+ [(set (match_operand:DI 0 "register_operand" "")
+- (ctz:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
++ (ctz:DI (match_operand:DI 1 "register_operand" "")))]
+ ""
+ {
+ rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, result;
+@@ -824,7 +824,7 @@
+
+ (define_expand "clzdi2"
+ [(set (match_operand:DI 0 "register_operand" "")
+- (clz:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
++ (clz:DI (match_operand:DI 1 "register_operand" "")))]
+ ""
+ {
+ rtx lo, hi, clz_lo, clz_hi, clz_lo_plus_32, result;
+@@ -852,7 +852,7 @@
+
+ (define_expand "ffsdi2"
+ [(set (match_operand:DI 0 "register_operand" "")
+- (ffs:DI (match_operand:DI 1 "reg_or_0_operand" "")))]
++ (ffs:DI (match_operand:DI 1 "register_operand" "")))]
+ ""
+ {
+ rtx lo, hi, ctz_lo, ctz_hi, ctz_hi_plus_32, ctz, ctz_plus_1,ctz_cond;
Index: gcc/config/arm/thumb2.md
===================================================================
--- a/src/gcc/config/arm/thumb2.md (.../tags/gcc_4_7_3_release)
@@ -2314,6 +21057,21 @@ Index: gcc/config/arm/thumb2.md
(set_attr "neg_pool_range" "*,250")]
)
+Index: gcc/config/arm/arm.c
+===================================================================
+--- a/src/gcc/config/arm/arm.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/arm/arm.c (.../branches/gcc-4_7-branch)
+@@ -4355,7 +4355,9 @@
+ if (((pcum->aapcs_vfp_regs_free >> regno) & mask) == mask)
+ {
+ pcum->aapcs_vfp_reg_alloc = mask << regno;
+- if (mode == BLKmode || (mode == TImode && !TARGET_NEON))
++ if (mode == BLKmode
++ || (mode == TImode && ! TARGET_NEON)
++ || ! arm_hard_regno_mode_ok (FIRST_VFP_REGNUM + regno, mode))
+ {
+ int i;
+ int rcount = pcum->aapcs_vfp_rcount;
Index: gcc/config/arm/vfp.md
===================================================================
--- a/src/gcc/config/arm/vfp.md (.../tags/gcc_4_7_3_release)
@@ -2365,6 +21123,53 @@ Index: gcc/config/arm/vfp.md
(set_attr "neg_pool_range" "*,*,*,1008,*,0,*,*,*")]
)
+@@ -1144,7 +1146,7 @@
+ (set_attr "type" "fcmpd")]
+ )
+
+-;; Fixed point to floating point conversions.
++;; Fixed point to floating point conversions.
+ (define_code_iterator FCVT [unsigned_float float])
+ (define_code_attr FCVTI32typename [(unsigned_float "u32") (float "s32")])
+
+@@ -1151,11 +1153,11 @@
+ (define_insn "*combine_vcvt_f32_<FCVTI32typename>"
+ [(set (match_operand:SF 0 "s_register_operand" "=t")
+ (mult:SF (FCVT:SF (match_operand:SI 1 "s_register_operand" "0"))
+- (match_operand 2
++ (match_operand 2
+ "const_double_vcvt_power_of_two_reciprocal" "Dt")))]
+ "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP3 && !flag_rounding_math"
+- "vcvt.f32.<FCVTI32typename>\\t%0, %1, %v2"
+- [(set_attr "predicable" "no")
++ "vcvt%?.f32.<FCVTI32typename>\\t%0, %1, %v2"
++ [(set_attr "predicable" "yes")
+ (set_attr "type" "f_cvt")]
+ )
+
+@@ -1164,15 +1166,16 @@
+ (define_insn "*combine_vcvt_f64_<FCVTI32typename>"
+ [(set (match_operand:DF 0 "s_register_operand" "=x,x,w")
+ (mult:DF (FCVT:DF (match_operand:SI 1 "s_register_operand" "r,t,r"))
+- (match_operand 2
++ (match_operand 2
+ "const_double_vcvt_power_of_two_reciprocal" "Dt,Dt,Dt")))]
+- "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP3 && !flag_rounding_math
++ "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP3 && !flag_rounding_math
+ && !TARGET_VFP_SINGLE"
+ "@
+- vmov.f32\\t%0, %1\;vcvt.f64.<FCVTI32typename>\\t%P0, %P0, %v2
+- vmov.f32\\t%0, %1\;vcvt.f64.<FCVTI32typename>\\t%P0, %P0, %v2
+- vmov.f64\\t%P0, %1, %1\;vcvt.f64.<FCVTI32typename>\\t%P0, %P0, %v2"
+- [(set_attr "predicable" "no")
++ vmov%?.f32\\t%0, %1\;vcvt%?.f64.<FCVTI32typename>\\t%P0, %P0, %v2
++ vmov%?.f32\\t%0, %1\;vcvt%?.f64.<FCVTI32typename>\\t%P0, %P0, %v2
++ vmov%?.f64\\t%P0, %1, %1\;vcvt%?.f64.<FCVTI32typename>\\t%P0, %P0, %v2"
++ [(set_attr "predicable" "yes")
++ (set_attr "ce_count" "2")
+ (set_attr "type" "f_cvt")
+ (set_attr "length" "8")]
+ )
Index: gcc/config/arm/neon.md
===================================================================
--- a/src/gcc/config/arm/neon.md (.../tags/gcc_4_7_3_release)
@@ -2389,6 +21194,960 @@ Index: gcc/config/arm/neon.md
(set_attr "neg_pool_range" "*,*,*,996,*,*,*,996,*")])
(define_expand "movti"
+Index: gcc/config/arm/ldmstm.md
+===================================================================
+--- a/src/gcc/config/arm/ldmstm.md (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/arm/ldmstm.md (.../branches/gcc-4_7-branch)
+@@ -23,15 +23,15 @@
+
+ (define_insn "*ldm4_ia"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (match_operand:SI 5 "s_register_operand" "rk")))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 8))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 12))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+@@ -41,15 +41,15 @@
+
+ (define_insn "*thumb_ldm4_ia"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "low_register_operand" "")
+ (mem:SI (match_operand:SI 5 "s_register_operand" "l")))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 8))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 12))))])]
+ "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
+@@ -60,15 +60,15 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 5) (const_int 16)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (match_dup 5)))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 8))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 12))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
+@@ -80,15 +80,15 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 5 "s_register_operand" "+&l")
+ (plus:SI (match_dup 5) (const_int 16)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "low_register_operand" "")
+ (mem:SI (match_dup 5)))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 8))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 12))))])]
+ "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 5"
+@@ -98,13 +98,13 @@
+ (define_insn "*stm4_ia"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (match_operand:SI 5 "s_register_operand" "rk"))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
+- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+ "stm%(ia%)\t%5, {%1, %2, %3, %4}"
+ [(set_attr "type" "store4")
+@@ -115,13 +115,13 @@
+ [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 5) (const_int 16)))
+ (set (mem:SI (match_dup 5))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
+- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
+ "stm%(ia%)\t%5!, {%1, %2, %3, %4}"
+ [(set_attr "type" "store4")
+@@ -132,13 +132,13 @@
+ [(set (match_operand:SI 5 "s_register_operand" "+&l")
+ (plus:SI (match_dup 5) (const_int 16)))
+ (set (mem:SI (match_dup 5))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "low_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "low_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))
++ (match_operand:SI 3 "low_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
+- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 4 "low_register_operand" ""))])]
+ "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 5"
+ "stm%(ia%)\t%5!, {%1, %2, %3, %4}"
+ [(set_attr "type" "store4")])
+@@ -145,16 +145,16 @@
+
+ (define_insn "*ldm4_ib"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
+ (const_int 4))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 8))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 12))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 16))))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+@@ -166,16 +166,16 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 5) (const_int 16)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 4))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 8))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 12))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int 16))))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
+@@ -186,13 +186,13 @@
+ (define_insn "*stm4_ib"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int 4)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 16)))
+- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+ "stm%(ib%)\t%5, {%1, %2, %3, %4}"
+ [(set_attr "type" "store4")
+@@ -203,13 +203,13 @@
+ [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 5) (const_int 16)))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 4)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 12)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int 16)))
+- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
+ "stm%(ib%)\t%5!, {%1, %2, %3, %4}"
+ [(set_attr "type" "store4")
+@@ -217,16 +217,16 @@
+
+ (define_insn "*ldm4_da"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
+ (const_int -12))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -8))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -4))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+ (mem:SI (match_dup 5)))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+ "ldm%(da%)\t%5, {%1, %2, %3, %4}"
+@@ -237,16 +237,16 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 5) (const_int -16)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -12))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -8))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -4))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+ (mem:SI (match_dup 5)))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
+ "ldm%(da%)\t%5!, {%1, %2, %3, %4}"
+@@ -256,13 +256,13 @@
+ (define_insn "*stm4_da"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int -12)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (match_dup 5))
+- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+ "stm%(da%)\t%5, {%1, %2, %3, %4}"
+ [(set_attr "type" "store4")
+@@ -273,13 +273,13 @@
+ [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 5) (const_int -16)))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (match_dup 5))
+- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 5"
+ "stm%(da%)\t%5!, {%1, %2, %3, %4}"
+ [(set_attr "type" "store4")
+@@ -287,16 +287,16 @@
+
+ (define_insn "*ldm4_db"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk")
+ (const_int -16))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -12))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -8))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -4))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+@@ -308,16 +308,16 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 5) (const_int -16)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -16))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -12))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -8))))
+- (set (match_operand:SI 4 "arm_hard_register_operand" "")
++ (set (match_operand:SI 4 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 5)
+ (const_int -4))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
+@@ -328,13 +328,13 @@
+ (define_insn "*stm4_db"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (plus:SI (match_operand:SI 5 "s_register_operand" "rk") (const_int -16)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
+- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+ "stm%(db%)\t%5, {%1, %2, %3, %4}"
+ [(set_attr "type" "store4")
+@@ -345,13 +345,13 @@
+ [(set (match_operand:SI 5 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 5) (const_int -16)))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -16)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -12)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -8)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 5) (const_int -4)))
+- (match_operand:SI 4 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 4 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 5"
+ "stm%(db%)\t%5!, {%1, %2, %3, %4}"
+ [(set_attr "type" "store4")
+@@ -466,12 +466,12 @@
+
+ (define_insn "*ldm3_ia"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (match_operand:SI 4 "s_register_operand" "rk")))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 8))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+@@ -481,12 +481,12 @@
+
+ (define_insn "*thumb_ldm3_ia"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "low_register_operand" "")
+ (mem:SI (match_operand:SI 4 "s_register_operand" "l")))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 8))))])]
+ "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
+@@ -497,12 +497,12 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 4) (const_int 12)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (match_dup 4)))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 8))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+@@ -514,12 +514,12 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 4 "s_register_operand" "+&l")
+ (plus:SI (match_dup 4) (const_int 12)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "low_register_operand" "")
+ (mem:SI (match_dup 4)))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 8))))])]
+ "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
+@@ -529,11 +529,11 @@
+ (define_insn "*stm3_ia"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (match_operand:SI 4 "s_register_operand" "rk"))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+ "stm%(ia%)\t%4, {%1, %2, %3}"
+ [(set_attr "type" "store3")
+@@ -544,11 +544,11 @@
+ [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 4) (const_int 12)))
+ (set (mem:SI (match_dup 4))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+ "stm%(ia%)\t%4!, {%1, %2, %3}"
+ [(set_attr "type" "store3")
+@@ -559,11 +559,11 @@
+ [(set (match_operand:SI 4 "s_register_operand" "+&l")
+ (plus:SI (match_dup 4) (const_int 12)))
+ (set (mem:SI (match_dup 4))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "low_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "low_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 3 "low_register_operand" ""))])]
+ "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 4"
+ "stm%(ia%)\t%4!, {%1, %2, %3}"
+ [(set_attr "type" "store3")])
+@@ -570,13 +570,13 @@
+
+ (define_insn "*ldm3_ib"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
+ (const_int 4))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 8))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 12))))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+@@ -588,13 +588,13 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 4) (const_int 12)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 4))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 8))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int 12))))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+@@ -605,11 +605,11 @@
+ (define_insn "*stm3_ib"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int 4)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 12)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+ "stm%(ib%)\t%4, {%1, %2, %3}"
+ [(set_attr "type" "store3")
+@@ -620,11 +620,11 @@
+ [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 4) (const_int 12)))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 4)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int 12)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+ "stm%(ib%)\t%4!, {%1, %2, %3}"
+ [(set_attr "type" "store3")
+@@ -632,13 +632,13 @@
+
+ (define_insn "*ldm3_da"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
+ (const_int -8))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int -4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (match_dup 4)))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+ "ldm%(da%)\t%4, {%1, %2, %3}"
+@@ -649,13 +649,13 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 4) (const_int -12)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int -8))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int -4))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (match_dup 4)))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+ "ldm%(da%)\t%4!, {%1, %2, %3}"
+@@ -665,11 +665,11 @@
+ (define_insn "*stm3_da"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int -8)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (match_dup 4))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+ "stm%(da%)\t%4, {%1, %2, %3}"
+ [(set_attr "type" "store3")
+@@ -680,11 +680,11 @@
+ [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 4) (const_int -12)))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (match_dup 4))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 4"
+ "stm%(da%)\t%4!, {%1, %2, %3}"
+ [(set_attr "type" "store3")
+@@ -692,13 +692,13 @@
+
+ (define_insn "*ldm3_db"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk")
+ (const_int -12))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int -8))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int -4))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+@@ -710,13 +710,13 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 4) (const_int -12)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int -12))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int -8))))
+- (set (match_operand:SI 3 "arm_hard_register_operand" "")
++ (set (match_operand:SI 3 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 4)
+ (const_int -4))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+@@ -727,11 +727,11 @@
+ (define_insn "*stm3_db"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (plus:SI (match_operand:SI 4 "s_register_operand" "rk") (const_int -12)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+ "stm%(db%)\t%4, {%1, %2, %3}"
+ [(set_attr "type" "store3")
+@@ -742,11 +742,11 @@
+ [(set (match_operand:SI 4 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 4) (const_int -12)))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int -12)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int -8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 4) (const_int -4)))
+- (match_operand:SI 3 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 3 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 4"
+ "stm%(db%)\t%4!, {%1, %2, %3}"
+ [(set_attr "type" "store3")
+@@ -847,9 +847,9 @@
+
+ (define_insn "*ldm2_ia"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (match_operand:SI 3 "s_register_operand" "rk")))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int 4))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
+@@ -859,9 +859,9 @@
+
+ (define_insn "*thumb_ldm2_ia"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "low_register_operand" "")
+ (mem:SI (match_operand:SI 3 "s_register_operand" "l")))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int 4))))])]
+ "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 2"
+@@ -872,9 +872,9 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 3) (const_int 8)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (match_dup 3)))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int 4))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+@@ -886,9 +886,9 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 3 "s_register_operand" "+&l")
+ (plus:SI (match_dup 3) (const_int 8)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "low_register_operand" "")
+ (mem:SI (match_dup 3)))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "low_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int 4))))])]
+ "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
+@@ -898,9 +898,9 @@
+ (define_insn "*stm2_ia"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (match_operand:SI 3 "s_register_operand" "rk"))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
+ "stm%(ia%)\t%3, {%1, %2}"
+ [(set_attr "type" "store2")
+@@ -911,9 +911,9 @@
+ [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 3) (const_int 8)))
+ (set (mem:SI (match_dup 3))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+ "stm%(ia%)\t%3!, {%1, %2}"
+ [(set_attr "type" "store2")
+@@ -924,9 +924,9 @@
+ [(set (match_operand:SI 3 "s_register_operand" "+&l")
+ (plus:SI (match_dup 3) (const_int 8)))
+ (set (mem:SI (match_dup 3))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "low_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 2 "low_register_operand" ""))])]
+ "TARGET_THUMB1 && XVECLEN (operands[0], 0) == 3"
+ "stm%(ia%)\t%3!, {%1, %2}"
+ [(set_attr "type" "store2")])
+@@ -933,10 +933,10 @@
+
+ (define_insn "*ldm2_ib"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
+ (const_int 4))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int 8))))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
+@@ -948,10 +948,10 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 3) (const_int 8)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int 4))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int 8))))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+@@ -962,9 +962,9 @@
+ (define_insn "*stm2_ib"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int 4)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int 8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
+ "stm%(ib%)\t%3, {%1, %2}"
+ [(set_attr "type" "store2")
+@@ -975,9 +975,9 @@
+ [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 3) (const_int 8)))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int 4)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int 8)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+ "stm%(ib%)\t%3!, {%1, %2}"
+ [(set_attr "type" "store2")
+@@ -985,10 +985,10 @@
+
+ (define_insn "*ldm2_da"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
+ (const_int -4))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (match_dup 3)))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
+ "ldm%(da%)\t%3, {%1, %2}"
+@@ -999,10 +999,10 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 3) (const_int -8)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int -4))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (match_dup 3)))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+ "ldm%(da%)\t%3!, {%1, %2}"
+@@ -1012,9 +1012,9 @@
+ (define_insn "*stm2_da"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int -4)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (match_dup 3))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 2"
+ "stm%(da%)\t%3, {%1, %2}"
+ [(set_attr "type" "store2")
+@@ -1025,9 +1025,9 @@
+ [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 3) (const_int -8)))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (match_dup 3))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+ "TARGET_ARM && XVECLEN (operands[0], 0) == 3"
+ "stm%(da%)\t%3!, {%1, %2}"
+ [(set_attr "type" "store2")
+@@ -1035,10 +1035,10 @@
+
+ (define_insn "*ldm2_db"
+ [(match_parallel 0 "load_multiple_operation"
+- [(set (match_operand:SI 1 "arm_hard_register_operand" "")
++ [(set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk")
+ (const_int -8))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int -4))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
+@@ -1050,10 +1050,10 @@
+ [(match_parallel 0 "load_multiple_operation"
+ [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 3) (const_int -8)))
+- (set (match_operand:SI 1 "arm_hard_register_operand" "")
++ (set (match_operand:SI 1 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int -8))))
+- (set (match_operand:SI 2 "arm_hard_register_operand" "")
++ (set (match_operand:SI 2 "arm_hard_general_register_operand" "")
+ (mem:SI (plus:SI (match_dup 3)
+ (const_int -4))))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+@@ -1064,9 +1064,9 @@
+ (define_insn "*stm2_db"
+ [(match_parallel 0 "store_multiple_operation"
+ [(set (mem:SI (plus:SI (match_operand:SI 3 "s_register_operand" "rk") (const_int -8)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 2"
+ "stm%(db%)\t%3, {%1, %2}"
+ [(set_attr "type" "store2")
+@@ -1077,9 +1077,9 @@
+ [(set (match_operand:SI 3 "s_register_operand" "+&rk")
+ (plus:SI (match_dup 3) (const_int -8)))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int -8)))
+- (match_operand:SI 1 "arm_hard_register_operand" ""))
++ (match_operand:SI 1 "arm_hard_general_register_operand" ""))
+ (set (mem:SI (plus:SI (match_dup 3) (const_int -4)))
+- (match_operand:SI 2 "arm_hard_register_operand" ""))])]
++ (match_operand:SI 2 "arm_hard_general_register_operand" ""))])]
+ "TARGET_32BIT && XVECLEN (operands[0], 0) == 3"
+ "stm%(db%)\t%3!, {%1, %2}"
+ [(set_attr "type" "store2")
+Index: gcc/config/arm/predicates.md
+===================================================================
+--- a/src/gcc/config/arm/predicates.md (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/arm/predicates.md (.../branches/gcc-4_7-branch)
+@@ -31,11 +31,11 @@
+ || REGNO_REG_CLASS (REGNO (op)) != NO_REGS));
+ })
+
+-;; Any hard register.
+-(define_predicate "arm_hard_register_operand"
++;; Any general register.
++(define_predicate "arm_hard_general_register_operand"
+ (match_code "reg")
+ {
+- return REGNO (op) < FIRST_PSEUDO_REGISTER;
++ return REGNO (op) <= LAST_ARM_REGNUM;
+ })
+
+ ;; A low register.
+Index: gcc/config/arm/arm-ldmstm.ml
+===================================================================
+--- a/src/gcc/config/arm/arm-ldmstm.ml (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/arm/arm-ldmstm.ml (.../branches/gcc-4_7-branch)
+@@ -67,10 +67,13 @@
+ Printf.sprintf ("(match_operand:SI %d \"s_register_operand\" \"%s%s\")")
+ (nregs + 1) (inout_constr op_type) (constr thumb)
+
++let reg_predicate thumb =
++ if thumb then "low_register_operand" else "arm_hard_general_register_operand"
++
+ let write_ldm_set thumb nregs offset opnr first =
+ let indent = " " in
+ Printf.printf "%s" (if first then " [" else indent);
+- Printf.printf "(set (match_operand:SI %d \"arm_hard_register_operand\" \"\")\n" opnr;
++ Printf.printf "(set (match_operand:SI %d \"%s\" \"\")\n" opnr (reg_predicate thumb);
+ Printf.printf "%s (mem:SI " indent;
+ begin if offset != 0 then Printf.printf "(plus:SI " end;
+ Printf.printf "%s" (destreg nregs first IN thumb);
+@@ -84,7 +87,7 @@
+ begin if offset != 0 then Printf.printf "(plus:SI " end;
+ Printf.printf "%s" (destreg nregs first IN thumb);
+ begin if offset != 0 then Printf.printf " (const_int %d))" offset end;
+- Printf.printf ")\n%s (match_operand:SI %d \"arm_hard_register_operand\" \"\"))" indent opnr
++ Printf.printf ")\n%s (match_operand:SI %d \"%s\" \"\"))" indent opnr (reg_predicate thumb)
+
+ let write_ldm_peep_set extra_indent nregs opnr first =
+ let indent = " " ^ extra_indent in
Index: gcc/config/arm/arm.md
===================================================================
--- a/src/gcc/config/arm/arm.md (.../tags/gcc_4_7_3_release)
@@ -2574,6 +22333,96 @@ Index: gcc/config/arm/t-rtems-eabi
+MULTILIB_EXCEPTIONS += mfpu=neon/mfloat-abi=hard
+MULTILIB_EXCEPTIONS += mfpu=neon
+MULTILIB_EXCEPTIONS += mfloat-abi=hard
+Index: gcc/config/pa/pa.md
+===================================================================
+--- a/src/gcc/config/pa/pa.md (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/pa/pa.md (.../branches/gcc-4_7-branch)
+@@ -730,10 +730,10 @@
+ (define_insn "scc"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (match_operator:SI 3 "comparison_operator"
+- [(match_operand:SI 1 "register_operand" "r")
++ [(match_operand:SI 1 "reg_or_0_operand" "rM")
+ (match_operand:SI 2 "arith11_operand" "rI")]))]
+ ""
+- "{com%I2clr|cmp%I2clr},%B3 %2,%1,%0\;ldi 1,%0"
++ "{com%I2clr|cmp%I2clr},%B3 %2,%r1,%0\;ldi 1,%0"
+ [(set_attr "type" "binary")
+ (set_attr "length" "8")])
+
+@@ -740,10 +740,10 @@
+ (define_insn ""
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (match_operator:DI 3 "comparison_operator"
+- [(match_operand:DI 1 "register_operand" "r")
++ [(match_operand:DI 1 "reg_or_0_operand" "rM")
+ (match_operand:DI 2 "arith11_operand" "rI")]))]
+ "TARGET_64BIT"
+- "cmp%I2clr,*%B3 %2,%1,%0\;ldi 1,%0"
++ "cmp%I2clr,*%B3 %2,%r1,%0\;ldi 1,%0"
+ [(set_attr "type" "binary")
+ (set_attr "length" "8")])
+
+@@ -750,13 +750,13 @@
+ (define_insn "iorscc"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (ior:SI (match_operator:SI 3 "comparison_operator"
+- [(match_operand:SI 1 "register_operand" "r")
++ [(match_operand:SI 1 "reg_or_0_operand" "rM")
+ (match_operand:SI 2 "arith11_operand" "rI")])
+ (match_operator:SI 6 "comparison_operator"
+- [(match_operand:SI 4 "register_operand" "r")
++ [(match_operand:SI 4 "reg_or_0_operand" "rM")
+ (match_operand:SI 5 "arith11_operand" "rI")])))]
+ ""
+- "{com%I2clr|cmp%I2clr},%S3 %2,%1,%%r0\;{com%I5clr|cmp%I5clr},%B6 %5,%4,%0\;ldi 1,%0"
++ "{com%I2clr|cmp%I2clr},%S3 %2,%r1,%%r0\;{com%I5clr|cmp%I5clr},%B6 %5,%r4,%0\;ldi 1,%0"
+ [(set_attr "type" "binary")
+ (set_attr "length" "12")])
+
+@@ -763,13 +763,13 @@
+ (define_insn ""
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (ior:DI (match_operator:DI 3 "comparison_operator"
+- [(match_operand:DI 1 "register_operand" "r")
++ [(match_operand:DI 1 "reg_or_0_operand" "rM")
+ (match_operand:DI 2 "arith11_operand" "rI")])
+ (match_operator:DI 6 "comparison_operator"
+- [(match_operand:DI 4 "register_operand" "r")
++ [(match_operand:DI 4 "reg_or_0_operand" "rM")
+ (match_operand:DI 5 "arith11_operand" "rI")])))]
+ "TARGET_64BIT"
+- "cmp%I2clr,*%S3 %2,%1,%%r0\;cmp%I5clr,*%B6 %5,%4,%0\;ldi 1,%0"
++ "cmp%I2clr,*%S3 %2,%r1,%%r0\;cmp%I5clr,*%B6 %5,%r4,%0\;ldi 1,%0"
+ [(set_attr "type" "binary")
+ (set_attr "length" "12")])
+
+@@ -778,10 +778,10 @@
+ (define_insn "negscc"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (neg:SI (match_operator:SI 3 "comparison_operator"
+- [(match_operand:SI 1 "register_operand" "r")
++ [(match_operand:SI 1 "reg_or_0_operand" "rM")
+ (match_operand:SI 2 "arith11_operand" "rI")])))]
+ ""
+- "{com%I2clr|cmp%I2clr},%B3 %2,%1,%0\;ldi -1,%0"
++ "{com%I2clr|cmp%I2clr},%B3 %2,%r1,%0\;ldi -1,%0"
+ [(set_attr "type" "binary")
+ (set_attr "length" "8")])
+
+@@ -788,10 +788,10 @@
+ (define_insn ""
+ [(set (match_operand:DI 0 "register_operand" "=r")
+ (neg:DI (match_operator:DI 3 "comparison_operator"
+- [(match_operand:DI 1 "register_operand" "r")
++ [(match_operand:DI 1 "reg_or_0_operand" "rM")
+ (match_operand:DI 2 "arith11_operand" "rI")])))]
+ "TARGET_64BIT"
+- "cmp%I2clr,*%B3 %2,%1,%0\;ldi -1,%0"
++ "cmp%I2clr,*%B3 %2,%r1,%0\;ldi -1,%0"
+ [(set_attr "type" "binary")
+ (set_attr "length" "8")])
+
Index: gcc/config/pa/pa.c
===================================================================
--- a/src/gcc/config/pa/pa.c (.../tags/gcc_4_7_3_release)
@@ -2589,6 +22438,87 @@ Index: gcc/config/pa/pa.c
}
crtl->uses_pic_offset_table = 1;
return reg;
+@@ -2583,7 +2585,7 @@
+ if (optype0 == REGOP)
+ latehalf[0] = gen_rtx_REG (SImode, REGNO (operands[0]) + 1);
+ else if (optype0 == OFFSOP)
+- latehalf[0] = adjust_address (operands[0], SImode, 4);
++ latehalf[0] = adjust_address_nv (operands[0], SImode, 4);
+ else
+ latehalf[0] = operands[0];
+
+@@ -2590,7 +2592,7 @@
+ if (optype1 == REGOP)
+ latehalf[1] = gen_rtx_REG (SImode, REGNO (operands[1]) + 1);
+ else if (optype1 == OFFSOP)
+- latehalf[1] = adjust_address (operands[1], SImode, 4);
++ latehalf[1] = adjust_address_nv (operands[1], SImode, 4);
+ else if (optype1 == CNSTOP)
+ split_double (operands[1], &operands[1], &latehalf[1]);
+ else
+@@ -4001,7 +4003,8 @@
+ || (! TARGET_64BIT && df_regs_ever_live_p (i + 1)))
+ {
+ rtx addr, insn, reg;
+- addr = gen_rtx_MEM (DFmode, gen_rtx_POST_INC (DFmode, tmpreg));
++ addr = gen_rtx_MEM (DFmode,
++ gen_rtx_POST_INC (word_mode, tmpreg));
+ reg = gen_rtx_REG (DFmode, i);
+ insn = emit_move_insn (addr, reg);
+ if (DO_FRAME_NOTES)
+@@ -4291,7 +4294,8 @@
+ if (df_regs_ever_live_p (i)
+ || (! TARGET_64BIT && df_regs_ever_live_p (i + 1)))
+ {
+- rtx src = gen_rtx_MEM (DFmode, gen_rtx_POST_INC (DFmode, tmpreg));
++ rtx src = gen_rtx_MEM (DFmode,
++ gen_rtx_POST_INC (word_mode, tmpreg));
+ rtx dest = gen_rtx_REG (DFmode, i);
+ emit_move_insn (dest, src);
+ }
+@@ -7471,7 +7475,7 @@
+ if (!TARGET_LONG_CALLS && distance < MAX_PCREL17F_OFFSET)
+ return 8;
+
+- if (TARGET_LONG_ABS_CALL && !flag_pic)
++ if (!flag_pic)
+ return 12;
+
+ return 24;
+@@ -8036,7 +8040,8 @@
+ return 12;
+
+ if (TARGET_FAST_INDIRECT_CALLS
+- || (!TARGET_PORTABLE_RUNTIME
++ || (!TARGET_LONG_CALLS
++ && !TARGET_PORTABLE_RUNTIME
+ && ((TARGET_PA_20 && !TARGET_SOM && distance < 7600000)
+ || distance < MAX_PCREL17F_OFFSET)))
+ return 8;
+Index: gcc/config/mips/driver-native.c
+===================================================================
+--- a/src/gcc/config/mips/driver-native.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/config/mips/driver-native.c (.../branches/gcc-4_7-branch)
+@@ -116,11 +116,17 @@
+ if (strncmp (buf, "cpu model", sizeof ("cpu model") - 1) == 0)
+ {
+ if (strstr (buf, "Godson2 V0.2") != NULL
+- || strstr (buf, "Loongson-2 V0.2") != NULL)
++ || strstr (buf, "Loongson-2 V0.2") != NULL
++ || strstr (buf, "Loongson-2E") != NULL)
+ cpu = "loongson2e";
+ else if (strstr (buf, "Godson2 V0.3") != NULL
+- || strstr (buf, "Loongson-2 V0.3") != NULL)
++ || strstr (buf, "Loongson-2 V0.3") != NULL
++ || strstr (buf, "Loongson-2F") != NULL)
+ cpu = "loongson2f";
++ else if (strstr (buf, "Godson3 V0.5") != NULL
++ || strstr (buf, "Loongson-3 V0.5") != NULL
++ || strstr (buf, "Loongson-3A") != NULL)
++ cpu = "loongson3a";
+ else if (strstr (buf, "SiByte SB1") != NULL)
+ cpu = "sb1";
+ else if (strstr (buf, "R5000") != NULL)
Index: gcc/config/v850/t-rtems
===================================================================
--- a/src/gcc/config/v850/t-rtems (.../tags/gcc_4_7_3_release)
@@ -2601,11 +22531,196 @@ Index: gcc/config/v850/t-rtems
+MULTILIB_MATCHES = mv850e=mv850e1
+
MULTILIB_MATCHES += mv850e=mv850es
+Index: gcc/collect2.c
+===================================================================
+--- a/src/gcc/collect2.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/collect2.c (.../branches/gcc-4_7-branch)
+@@ -1,7 +1,7 @@
+ /* Collect static initialization info into data structures that can be
+ traversed by C++ initialization and finalization routines.
+ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998,
+- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
++ 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, 2013
+ Free Software Foundation, Inc.
+ Contributed by Chris Smith (csmith@convex.com).
+ Heavily modified by Michael Meissner (meissner@cygnus.com),
+@@ -384,8 +384,8 @@
+
+ /* Delete tempfiles and exit function. */
+
+-void
+-collect_exit (int status)
++static void
++collect_atexit (void)
+ {
+ if (c_file != 0 && c_file[0])
+ maybe_unlink (c_file);
+@@ -413,13 +413,8 @@
+ maybe_unlink (lderrout);
+ }
+
+- if (status != 0 && output_file != 0 && output_file[0])
+- maybe_unlink (output_file);
+-
+ if (response_file)
+ maybe_unlink (response_file);
+-
+- exit (status);
+ }
+
+
+@@ -1132,6 +1127,9 @@
+ signal (SIGCHLD, SIG_DFL);
+ #endif
+
++ if (atexit (collect_atexit) != 0)
++ fatal_error ("atexit failed");
++
+ /* Unlock the stdio streams. */
+ unlock_std_streams ();
+
+@@ -1973,7 +1971,7 @@
+ error ("%s terminated with signal %d [%s]%s",
+ prog, sig, strsignal(sig),
+ WCOREDUMP(status) ? ", core dumped" : "");
+- collect_exit (FATAL_EXIT_CODE);
++ exit (FATAL_EXIT_CODE);
+ }
+
+ if (WIFEXITED (status))
+@@ -1989,7 +1987,7 @@
+ if (ret != 0)
+ {
+ error ("%s returned %d exit status", prog, ret);
+- collect_exit (ret);
++ exit (ret);
+ }
+
+ if (response_file)
+Index: gcc/collect2.h
+===================================================================
+--- a/src/gcc/collect2.h (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/collect2.h (.../branches/gcc-4_7-branch)
+@@ -1,5 +1,5 @@
+ /* Header file for collect/tlink routines.
+- Copyright (C) 1998, 2003, 2004, 2005, 2007, 2010, 2011
++ Copyright (C) 1998, 2003, 2004, 2005, 2007, 2010, 2011, 2013
+ Free Software Foundation, Inc.
+
+ This file is part of GCC.
+@@ -26,8 +26,6 @@
+ extern struct pex_obj *collect_execute (const char *, char **, const char *,
+ const char *, int flags);
+
+-extern void collect_exit (int) ATTRIBUTE_NORETURN;
+-
+ extern int collect_wait (const char *, struct pex_obj *);
+
+ extern void dump_file (const char *, FILE *);
+Index: gcc/regcprop.c
+===================================================================
+--- a/src/gcc/regcprop.c (.../tags/gcc_4_7_3_release)
++++ b/src/gcc/regcprop.c (.../branches/gcc-4_7-branch)
+@@ -741,6 +741,7 @@
+ int n_ops, i, alt, predicated;
+ bool is_asm, any_replacements;
+ rtx set;
++ rtx link;
+ bool replaced[MAX_RECOG_OPERANDS];
+ bool changed = false;
+
+@@ -808,6 +809,23 @@
+ if (recog_op_alt[i][alt].earlyclobber)
+ kill_value (recog_data.operand[i], vd);
+
++ /* If we have dead sets in the insn, then we need to note these as we
++ would clobbers. */
++ for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
++ {
++ if (REG_NOTE_KIND (link) == REG_UNUSED)
++ {
++ kill_value (XEXP (link, 0), vd);
++ /* Furthermore, if the insn looked like a single-set,
++ but the dead store kills the source value of that
++ set, then we can no-longer use the plain move
++ special case below. */
++ if (set
++ && reg_overlap_mentioned_p (XEXP (link, 0), SET_SRC (set)))
++ set = NULL;
++ }
++ }
++
+ /* Special-case plain move instructions, since we may well
+ be able to do the move from a different register class. */
+ if (set && REG_P (SET_SRC (set)))
+Index: libgfortran/intrinsics/string_intrinsics_inc.c
+===================================================================
+--- a/src/libgfortran/intrinsics/string_intrinsics_inc.c (.../tags/gcc_4_7_3_release)
++++ b/src/libgfortran/intrinsics/string_intrinsics_inc.c (.../branches/gcc-4_7-branch)
+@@ -44,9 +44,6 @@
+ gfc_charlen_type, const CHARTYPE *);
+ export_proto(concat_string);
+
+-extern gfc_charlen_type string_len_trim (gfc_charlen_type, const CHARTYPE *);
+-export_proto(string_len_trim);
+-
+ extern void adjustl (CHARTYPE *, gfc_charlen_type, const CHARTYPE *);
+ export_proto(adjustl);
+
Index: libgfortran/ChangeLog
===================================================================
--- a/src/libgfortran/ChangeLog (.../tags/gcc_4_7_3_release)
+++ b/src/libgfortran/ChangeLog (.../branches/gcc-4_7-branch)
-@@ -1,3 +1,38 @@
+@@ -1,3 +1,87 @@
++2014-03-15 Jerry DeLisle <jvdelisle@gcc.gnu>
++
++ Backport from mainline
++ PR libfortran/58324
++ PR libfortran/38199
++ * intrinsics/string_intriniscs_inc.c (string_len_trim):
++ Remove prototypes for string_len_trim and move to...
++ * libgfortran.h (string_len_trim): ... here and
++ (string_len_trim_char4): ...here.
++ * io/list_read.c (finish_list_read): Read one character to check
++ for the end of the file. If it is the end, then issue the file
++ end error message. If not, use eat_line to reach the end
++ without giving error. The next attempt to read will then
++ issue the error as described above.
++ * io/read.c (read_decimal): Quickly skip spaces to avoid calls
++ to next_char.
++ * io/unit.c (is_trim_ok): New helper function to check various
++ conditions to see if its OK to trim the internal unit string.
++ (get_internal_unit): Use LEN_TRIM to shorten selected internal
++ unit strings for optimizing READ. Enable this optimization for
++ formatted READ.
++
++2014-02-15 Jerry DeLisle <jvdelisle@gcc.gnu>
++ Dominique d'Humieres <dominiq@lps.ens.fr>
++
++ Backport from mainline
++ PR libfortran/59771
++ PR libfortran/59774
++ PR libfortran/59836
++ * io/write_float.def (output_float): Fix wrong handling of the
++ Fw.0 format.
++ (output_float_FMT_G_): Fixes rounding issues with -m32.
++
++2013-07-03 Uros Bizjak <ubizjak@gmail.com>
++
++ Backport from mainline
++ 2013-06-20 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/fpu-387.h (_FPU_MASK_ALL): New.
++ (_FPU_EX_ALL): Ditto.
++ (set_fpu): Use fstcw to store x87 FPU control word. Use fnclex to
++ clear stalled exception flags. Correctly clear stalled SSE
++ exception flags. Simplify code.
++
++ Backport from mainline
++ 2013-06-19 Uros Bizjak <ubizjak@gmail.com>
++
++ * config/fpu-387.h: Use __asm__ and __volatile__ consistently.
++
+2013-04-28 Jerry DeLisle <jvdelisle@gcc.gnu.org>
+
+ Backport from mainline:
@@ -2644,11 +22759,141 @@ Index: libgfortran/ChangeLog
2013-04-11 Release Manager
* GCC 4.7.3 released.
+Index: libgfortran/libgfortran.h
+===================================================================
+--- a/src/libgfortran/libgfortran.h (.../tags/gcc_4_7_3_release)
++++ b/src/libgfortran/libgfortran.h (.../branches/gcc-4_7-branch)
+@@ -788,6 +788,13 @@
+ extern gfc_charlen_type cf_strcpy (char *, gfc_charlen_type, const char *);
+ internal_proto(cf_strcpy);
+
++extern gfc_charlen_type string_len_trim (gfc_charlen_type, const char *);
++export_proto(string_len_trim);
++
++extern gfc_charlen_type string_len_trim_char4 (gfc_charlen_type,
++ const gfc_char4_t *);
++export_proto(string_len_trim_char4);
++
+ /* io/intrinsics.c */
+
+ extern void flush_all_units (void);
+Index: libgfortran/config/fpu-387.h
+===================================================================
+--- a/src/libgfortran/config/fpu-387.h (.../tags/gcc_4_7_3_release)
++++ b/src/libgfortran/config/fpu-387.h (.../branches/gcc-4_7-branch)
+@@ -73,7 +73,7 @@
+
+ /* We need a single SSE instruction here so the handler can safely skip
+ over it. */
+- __asm__ volatile ("movaps %xmm0,%xmm0");
++ __asm__ __volatile__ ("movaps\t%xmm0,%xmm0");
+
+ sigaction (SIGILL, &oact, NULL);
+
+@@ -95,42 +95,42 @@
+ #define _FPU_MASK_OM 0x08
+ #define _FPU_MASK_UM 0x10
+ #define _FPU_MASK_PM 0x20
++#define _FPU_MASK_ALL 0x3f
+
++#define _FPU_EX_ALL 0x3f
++
+ void set_fpu (void)
+ {
++ int excepts = 0;
+ unsigned short cw;
+
+- asm volatile ("fnstcw %0" : "=m" (cw));
++ __asm__ __volatile__ ("fstcw\t%0" : "=m" (cw));
+
+- cw |= (_FPU_MASK_IM | _FPU_MASK_DM | _FPU_MASK_ZM | _FPU_MASK_OM
+- | _FPU_MASK_UM | _FPU_MASK_PM);
++ if (options.fpe & GFC_FPE_INVALID) excepts |= _FPU_MASK_IM;
++ if (options.fpe & GFC_FPE_DENORMAL) excepts |= _FPU_MASK_DM;
++ if (options.fpe & GFC_FPE_ZERO) excepts |= _FPU_MASK_ZM;
++ if (options.fpe & GFC_FPE_OVERFLOW) excepts |= _FPU_MASK_OM;
++ if (options.fpe & GFC_FPE_UNDERFLOW) excepts |= _FPU_MASK_UM;
++ if (options.fpe & GFC_FPE_INEXACT) excepts |= _FPU_MASK_PM;
+
+- if (options.fpe & GFC_FPE_INVALID) cw &= ~_FPU_MASK_IM;
+- if (options.fpe & GFC_FPE_DENORMAL) cw &= ~_FPU_MASK_DM;
+- if (options.fpe & GFC_FPE_ZERO) cw &= ~_FPU_MASK_ZM;
+- if (options.fpe & GFC_FPE_OVERFLOW) cw &= ~_FPU_MASK_OM;
+- if (options.fpe & GFC_FPE_UNDERFLOW) cw &= ~_FPU_MASK_UM;
+- if (options.fpe & GFC_FPE_INEXACT) cw &= ~_FPU_MASK_PM;
++ cw |= _FPU_MASK_ALL;
++ cw &= ~excepts;
+
+- asm volatile ("fldcw %0" : : "m" (cw));
++ __asm__ __volatile__ ("fnclex\n\tfldcw\t%0" : : "m" (cw));
+
+ if (has_sse())
+ {
+ unsigned int cw_sse;
+
+- asm volatile ("%vstmxcsr %0" : "=m" (cw_sse));
++ __asm__ __volatile__ ("%vstmxcsr\t%0" : "=m" (cw_sse));
+
+- cw_sse &= 0xffff0000;
+- cw_sse |= (_FPU_MASK_IM | _FPU_MASK_DM | _FPU_MASK_ZM | _FPU_MASK_OM
+- | _FPU_MASK_UM | _FPU_MASK_PM ) << 7;
++ /* The SSE exception masks are shifted by 7 bits. */
++ cw_sse |= _FPU_MASK_ALL << 7;
++ cw_sse &= ~(excepts << 7);
+
+- if (options.fpe & GFC_FPE_INVALID) cw_sse &= ~(_FPU_MASK_IM << 7);
+- if (options.fpe & GFC_FPE_DENORMAL) cw_sse &= ~(_FPU_MASK_DM << 7);
+- if (options.fpe & GFC_FPE_ZERO) cw_sse &= ~(_FPU_MASK_ZM << 7);
+- if (options.fpe & GFC_FPE_OVERFLOW) cw_sse &= ~(_FPU_MASK_OM << 7);
+- if (options.fpe & GFC_FPE_UNDERFLOW) cw_sse &= ~(_FPU_MASK_UM << 7);
+- if (options.fpe & GFC_FPE_INEXACT) cw_sse &= ~(_FPU_MASK_PM << 7);
++ /* Clear stalled exception flags. */
++ cw_sse &= ~_FPU_EX_ALL;
+
+- asm volatile ("%vldmxcsr %0" : : "m" (cw_sse));
++ __asm__ __volatile__ ("%vldmxcsr\t%0" : : "m" (cw_sse));
+ }
+ }
Index: libgfortran/io/list_read.c
===================================================================
--- a/src/libgfortran/io/list_read.c (.../tags/gcc_4_7_3_release)
+++ b/src/libgfortran/io/list_read.c (.../branches/gcc-4_7-branch)
-@@ -2028,8 +2028,8 @@
+@@ -1985,8 +1985,6 @@
+ void
+ finish_list_read (st_parameter_dt *dtp)
+ {
+- int err;
+-
+ free_saved (dtp);
+
+ fbuf_flush (dtp->u.p.current_unit, dtp->u.p.mode);
+@@ -1997,9 +1995,22 @@
+ return;
+ }
+
+- err = eat_line (dtp);
+- if (err == LIBERROR_END)
+- hit_eof (dtp);
++ if (!is_internal_unit (dtp))
++ {
++ int c;
++ c = next_char (dtp);
++ if (c == EOF)
++ {
++ free_line (dtp);
++ hit_eof (dtp);
++ return;
++ }
++ if (c != '\n')
++ eat_line (dtp);
++ }
++
++ free_line (dtp);
++
+ }
+
+ /* NAMELIST INPUT
+@@ -2028,8 +2039,8 @@
static try
nml_parse_qualifier (st_parameter_dt *dtp, descriptor_dimension *ad,
@@ -2659,7 +22904,7 @@ Index: libgfortran/io/list_read.c
int *parsed_rank)
{
int dim;
-@@ -2053,7 +2053,7 @@
+@@ -2053,7 +2064,7 @@
/* The next character in the stream should be the '('. */
if ((c = next_char (dtp)) == EOF)
@@ -2668,7 +22913,7 @@ Index: libgfortran/io/list_read.c
/* Process the qualifier, by dimension and triplet. */
-@@ -2067,7 +2067,7 @@
+@@ -2067,7 +2078,7 @@
/* Process a potential sign. */
if ((c = next_char (dtp)) == EOF)
@@ -2677,7 +22922,7 @@ Index: libgfortran/io/list_read.c
switch (c)
{
case '-':
-@@ -2085,11 +2085,12 @@
+@@ -2085,11 +2096,12 @@
/* Process characters up to the next ':' , ',' or ')'. */
for (;;)
{
@@ -2693,7 +22938,7 @@ Index: libgfortran/io/list_read.c
case ':':
is_array_section = 1;
break;
-@@ -2112,10 +2113,8 @@
+@@ -2112,10 +2124,8 @@
push_char (dtp, c);
continue;
@@ -2705,7 +22950,7 @@ Index: libgfortran/io/list_read.c
break;
default:
-@@ -2204,7 +2203,7 @@
+@@ -2204,7 +2214,7 @@
do not allow excess data to be processed. */
if (is_array_section == 1
|| !(compile_options.allow_std & GFC_STD_GNU)
@@ -2714,7 +22959,7 @@ Index: libgfortran/io/list_read.c
ls[dim].end = ls[dim].start;
else
dtp->u.p.expanded_read = 1;
-@@ -2257,6 +2256,15 @@
+@@ -2257,6 +2267,15 @@
err_ret:
@@ -2730,7 +22975,7 @@ Index: libgfortran/io/list_read.c
return FAILURE;
}
-@@ -2553,17 +2561,17 @@
+@@ -2553,17 +2572,17 @@
since a single object can have multiple reads. */
dtp->u.p.expanded_read = 0;
@@ -2754,7 +22999,7 @@ Index: libgfortran/io/list_read.c
if (nml_read_obj (dtp, cmp, (index_type)(pdata - nl->mem_pos),
pprev_nl, nml_err_msg, nml_err_msg_size,
-@@ -2726,12 +2734,12 @@
+@@ -2726,12 +2745,12 @@
return SUCCESS;
if ((c = next_char (dtp)) == EOF)
@@ -2769,7 +23014,7 @@ Index: libgfortran/io/list_read.c
if (c != '?')
{
snprintf (nml_err_msg, nml_err_msg_size,
-@@ -2781,8 +2789,9 @@
+@@ -2781,8 +2800,9 @@
if (!is_separator (c))
push_char (dtp, tolower(c));
if ((c = next_char (dtp)) == EOF)
@@ -2781,7 +23026,7 @@ Index: libgfortran/io/list_read.c
unget_char (dtp, c);
-@@ -2842,7 +2851,7 @@
+@@ -2842,7 +2862,7 @@
{
parsed_rank = 0;
if (nml_parse_qualifier (dtp, nl->dim, nl->ls, nl->var_rank,
@@ -2790,7 +23035,7 @@ Index: libgfortran/io/list_read.c
&parsed_rank) == FAILURE)
{
char *nml_err_msg_end = strchr (nml_err_msg, '\0');
-@@ -2857,7 +2866,7 @@
+@@ -2857,7 +2877,7 @@
qualifier_flag = 1;
if ((c = next_char (dtp)) == EOF)
@@ -2799,7 +23044,7 @@ Index: libgfortran/io/list_read.c
unget_char (dtp, c);
}
else if (nl->var_rank > 0)
-@@ -2876,14 +2885,15 @@
+@@ -2876,7 +2896,8 @@
goto nml_err_ret;
}
@@ -2809,6 +23054,7 @@ Index: libgfortran/io/list_read.c
first_nl = nl;
root_nl = nl;
+@@ -2883,7 +2904,7 @@
component_flag = 1;
if ((c = next_char (dtp)) == EOF)
@@ -2817,7 +23063,7 @@ Index: libgfortran/io/list_read.c
goto get_name;
}
-@@ -2898,8 +2908,8 @@
+@@ -2898,8 +2919,8 @@
descriptor_dimension chd[1] = { {1, clow, nl->string_length} };
array_loop_spec ind[1] = { {1, clow, nl->string_length, 1} };
@@ -2828,7 +23074,7 @@ Index: libgfortran/io/list_read.c
== FAILURE)
{
char *nml_err_msg_end = strchr (nml_err_msg, '\0');
-@@ -2921,7 +2931,7 @@
+@@ -2921,7 +2942,7 @@
}
if ((c = next_char (dtp)) == EOF)
@@ -2837,7 +23083,7 @@ Index: libgfortran/io/list_read.c
unget_char (dtp, c);
}
-@@ -2961,7 +2971,7 @@
+@@ -2961,7 +2982,7 @@
return SUCCESS;
if ((c = next_char (dtp)) == EOF)
@@ -2846,7 +23092,7 @@ Index: libgfortran/io/list_read.c
if (c != '=')
{
-@@ -2996,6 +3006,17 @@
+@@ -2996,6 +3017,17 @@
nml_err_ret:
@@ -2864,6 +23110,99 @@ Index: libgfortran/io/list_read.c
return FAILURE;
}
+Index: libgfortran/io/read.c
+===================================================================
+--- a/src/libgfortran/io/read.c (.../tags/gcc_4_7_3_release)
++++ b/src/libgfortran/io/read.c (.../branches/gcc-4_7-branch)
+@@ -667,7 +667,13 @@
+
+ if (c == ' ')
+ {
+- if (dtp->u.p.blank_status == BLANK_NULL) continue;
++ if (dtp->u.p.blank_status == BLANK_NULL)
++ {
++ /* Skip spaces. */
++ for ( ; w > 0; p++, w--)
++ if (*p != ' ') break;
++ continue;
++ }
+ if (dtp->u.p.blank_status == BLANK_ZERO) c = '0';
+ }
+
+Index: libgfortran/io/unit.c
+===================================================================
+--- a/src/libgfortran/io/unit.c (.../tags/gcc_4_7_3_release)
++++ b/src/libgfortran/io/unit.c (.../branches/gcc-4_7-branch)
+@@ -30,6 +30,7 @@
+ #include "unix.h"
+ #include <stdlib.h>
+ #include <string.h>
++#include <stdbool.h>
+
+
+ /* IO locking rules:
+@@ -377,6 +378,38 @@
+ }
+
+
++/* Helper function to check rank, stride, format string, and namelist.
++ This is used for optimization. You can't trim out blanks or shorten
++ the string if trailing spaces are significant. */
++static bool
++is_trim_ok (st_parameter_dt *dtp)
++{
++ /* Check rank and stride. */
++ if (dtp->internal_unit_desc
++ && (GFC_DESCRIPTOR_RANK (dtp->internal_unit_desc) > 1
++ || GFC_DESCRIPTOR_STRIDE(dtp->internal_unit_desc, 0) != 1))
++ return false;
++ /* Format strings can not have 'BZ' or '/'. */
++ if (dtp->common.flags & IOPARM_DT_HAS_FORMAT)
++ {
++ char *p = dtp->format;
++ off_t i;
++ if (dtp->common.flags & IOPARM_DT_HAS_BLANK)
++ return false;
++ for (i = 0; i < dtp->format_len; i++)
++ {
++ if (p[i] == '/') return false;
++ if (p[i] == 'b' || p[i] == 'B')
++ if (p[i+1] == 'z' || p[i+1] == 'Z')
++ return false;
++ }
++ }
++ if (dtp->u.p.ionml) /* A namelist. */
++ return false;
++ return true;
++}
++
++
+ gfc_unit *
+ get_internal_unit (st_parameter_dt *dtp)
+ {
+@@ -410,6 +443,22 @@
+ some other file I/O unit. */
+ iunit->unit_number = -1;
+
++ /* As an optimization, adjust the unit record length to not
++ include trailing blanks. This will not work under certain conditions
++ where trailing blanks have significance. */
++ if (dtp->u.p.mode == READING && is_trim_ok (dtp))
++ {
++ int len;
++ if (dtp->common.unit == 0)
++ len = string_len_trim (dtp->internal_unit_len,
++ dtp->internal_unit);
++ else
++ len = string_len_trim_char4 (dtp->internal_unit_len,
++ (const gfc_char4_t*) dtp->internal_unit);
++ dtp->internal_unit_len = len;
++ iunit->recl = dtp->internal_unit_len;
++ }
++
+ /* Set up the looping specification from the array descriptor, if any. */
+
+ if (is_array_io (dtp))
Index: libgfortran/io/transfer.c
===================================================================
--- a/src/libgfortran/io/transfer.c (.../tags/gcc_4_7_3_release)
@@ -2877,3 +23216,93 @@ Index: libgfortran/io/transfer.c
{
dtp->u.p.current_unit->endfile = AFTER_ENDFILE;
dtp->u.p.current_unit->current_record = 0;
+Index: libgfortran/io/write_float.def
+===================================================================
+--- a/src/libgfortran/io/write_float.def (.../tags/gcc_4_7_3_release)
++++ b/src/libgfortran/io/write_float.def (.../branches/gcc-4_7-branch)
+@@ -273,7 +273,7 @@
+ updown:
+
+ rchar = '0';
+- if (w > 0 && d == 0 && p == 0)
++ if (ft != FMT_F && w > 0 && d == 0 && p == 0)
+ nbefore = 1;
+ /* Scan for trailing zeros to see if we really need to round it. */
+ for(i = nbefore + nafter; i < ndigits; i++)
+@@ -288,11 +288,20 @@
+ if (nbefore + nafter == 0)
+ {
+ ndigits = 0;
+- if (nzero_real == d && digits[0] >= rchar)
++ if ((d == 0 || nzero_real == d) && digits[0] >= rchar)
+ {
+ /* We rounded to zero but shouldn't have */
+- nzero--;
+- nafter = 1;
++ if (d != 0)
++ {
++ nzero--;
++ nafter = 1;
++ }
++ else
++ {
++ /* Handle the case Fw.0 and value < 1.0 */
++ nbefore = 1;
++ digits--;
++ }
+ digits[0] = '1';
+ ndigits = 1;
+ }
+@@ -828,12 +837,13 @@
+ int d = f->u.real.d;\
+ int w = f->u.real.w;\
+ fnode *newf;\
+- GFC_REAL_ ## x rexp_d, r = 0.5;\
++ GFC_REAL_ ## x exp_d, r = 0.5, r_sc;\
+ int low, high, mid;\
+ int ubound, lbound;\
+ char *p, pad = ' ';\
+ int save_scale_factor, nb = 0;\
+ try result;\
++ volatile GFC_REAL_ ## x temp;\
+ \
+ save_scale_factor = dtp->u.p.scale_factor;\
+ newf = (fnode *) get_mem (sizeof (fnode));\
+@@ -853,10 +863,13 @@
+ break;\
+ }\
+ \
+- rexp_d = calculate_exp_ ## x (-d);\
+- if ((m > 0.0 && ((m < 0.1 - 0.1 * r * rexp_d) || (rexp_d * (m + r) >= 1.0)))\
++ exp_d = calculate_exp_ ## x (d);\
++ r_sc = (1 - r / exp_d);\
++ temp = 0.1 * r_sc;\
++ if ((m > 0.0 && ((m < temp) || (r >= (exp_d - m))))\
+ || ((m == 0.0) && !(compile_options.allow_std\
+- & (GFC_STD_F2003 | GFC_STD_F2008))))\
++ & (GFC_STD_F2003 | GFC_STD_F2008)))\
++ || d == 0)\
+ { \
+ newf->format = FMT_E;\
+ newf->u.real.w = w;\
+@@ -874,10 +887,9 @@
+ \
+ while (low <= high)\
+ { \
+- volatile GFC_REAL_ ## x temp;\
+ mid = (low + high) / 2;\
+ \
+- temp = (calculate_exp_ ## x (mid - 1) * (1 - r * rexp_d));\
++ temp = (calculate_exp_ ## x (mid - 1) * r_sc);\
+ \
+ if (m < temp)\
+ { \
+Index: .
+===================================================================
+--- a/src/. (.../tags/gcc_4_7_3_release)
++++ b/src/. (.../branches/gcc-4_7-branch)
+
+Property changes on: .
+___________________________________________________________________
+Modified: svn:mergeinfo
+ Merged /trunk:r206124-206126
diff --git a/debian/rules.conf b/debian/rules.conf
index fe025d4..e17a010 100644
--- a/debian/rules.conf
+++ b/debian/rules.conf
@@ -182,12 +182,25 @@ DPKG_BUILD_DEP = dpkg-dev (>= $(DPKGV)),
# the safe side (something like newest( version in stable, versions for the
# various platforms in INSTALL/specific.html) ).
# We need binutils (>= 2.22) for the --no-copy-dt-needed-entries default.
-BINUTILSV = 2.22
+BINUTILSBDV = 2.22
ifeq ($(DEB_CROSS),yes)
- BINUTILS_BUILD_DEP = binutils$(TS) (>= $(BINUTILSV)), binutils-multiarch (>= $(BINUTILSV))
+ BINUTILS_BUILD_DEP = binutils$(TS) (>= $(BINUTILSBDV)), binutils-multiarch (>= $(BINUTILSBDV))
+ BINUTILSV := $(shell dpkg -l binutils$(TS) \
+ | awk '/^ii/{print $$3;exit}' | sed 's/-.*//')
else
- BINUTILS_BUILD_DEP = binutils (>= $(BINUTILSV)) | binutils-multiarch (>= $(BINUTILSV))
+ BINUTILS_BUILD_DEP = binutils (>= $(BINUTILSBDV)) | binutils-multiarch (>= $(BINUTILSBDV))
+ ifeq ($(REVERSE_CROSS),yes)
+ BINUTILSV := $(shell dpkg -l binutils$(TS) \
+ | awk '/^ii/{print $$3;exit}' | sed 's/-.*//')
+ else
+ BINUTILSV := $(shell dpkg -l binutils binutils-multiarch \
+ | awk '/^ii/{print $$3;exit}' | sed 's/-.*//')
+ endif
endif
+ifeq (,$(BINUTILSV))
+ BINUTILSV := $(BINUTILSBDV)
+endif
+
# FIXME; stripping doesn't work with gold
#BINUTILS_BUILD_DEP += , binutils-gold (>= $(BINUTILSV)) [$(gold_archs)]
@@ -241,7 +254,7 @@ biarch_deb_map := \
i386=amd64 amd64=i386 \
mips=mips64 mipsel=mips64 \
powerpc=ppc64 ppc64=powerpc \
- sparc=sparc64 \
+ sparc=sparc64 sparc64=sparc\
s390=s390x s390x=s390 \
kfreebsd-amd64=i386 \
illumos-amd64=illumos-i386 \
@@ -293,7 +306,7 @@ ifneq ($(DEB_CROSS),yes)
ifeq (,$(filter $(distrelease),lenny etch squeeze dapper hardy jaunty karmic lucid maverick natty oneiric))
LIBC_BUILD_DEP += , libc6-dev (>= 2.13-31) [armel armhf]
endif
- LIBC_BIARCH_BUILD_DEP = libc6-dev-amd64 [i386 x32], libc6-dev-sparc64 [sparc], libc6-dev-s390 [s390x], libc6-dev-s390x [s390], libc6-dev-i386 [amd64 x32], libc6-dev-powerpc [ppc64], libc6-dev-ppc64 [powerpc], libc0.1-dev-i386 [kfreebsd-amd64], lib32gcc1 [amd64 ppc64 kfreebsd-amd64 s390x x32], libn32gcc1 [mips mipsel], lib64gcc1 [i386 mips mipsel powerpc sparc s390 x32], libc6-dev-mips64 [mips mipsel], libc6-dev-mipsn32 [mips mipsel],
+ LIBC_BIARCH_BUILD_DEP = libc6-dev-amd64 [i386 x32], libc6-dev-sparc64 [sparc], libc6-dev-sparc [sparc64], libc6-dev-s390 [s390x], libc6-dev-s390x [s390], libc6-dev-i386 [amd64 x32], libc6-dev-powerpc [ppc64], libc6-dev-ppc64 [powerpc], libc0.1-dev-i386 [kfreebsd-amd64], lib32gcc1 [amd64 ppc64 kfreebsd-amd64 s390x sparc64 x32], libn32gcc1 [mips mipsel], lib64gcc1 [i386 mips mipsel powerpc sparc s390 x32], libc6-dev-mips64 [mips mipsel], libc6-dev-mipsn32 [mips mipsel],
ifneq (,$(findstring amd64,$(biarchx32archs)))
LIBC_BIARCH_BUILD_DEP += libc6-dev-x32 [amd64 i386], libx32gcc1 [amd64 i386],
endif
@@ -367,7 +380,7 @@ ifneq (,$(findstring gcc,$(PKGSOURCE)))
endif
AUTO_BUILD_DEP := m4, libtool,
-AUTO_BUILD_DEP += autoconf2.64, automake (>= 1:1.11), automake (<< 1:1.12),
+AUTO_BUILD_DEP += autoconf2.64,
ifneq ($(DEB_CROSS),yes)
JAVA_BUILD_DEP := libc6.1-dbg [alpha ia64] | libc0.3-dbg [hurd-i386] | libc0.1-dbg [kfreebsd-i386 kfreebsd-amd64] | libc6-dbg [linux-any], zlib1g-dev, libantlr-java, python, libffi-dev,
@@ -440,8 +453,9 @@ ifeq ($(PKGSOURCE),gcc-$(BASE_VERSION))
JAVA_BUILD_INDEP :=, $(JAVA_BUILD_INDEP)
endif
-SPU_BUILD_DEP := binutils-spu (>= $(BINUTILSV)) [powerpc ppc64], newlib-spu (>= 1.16.0) [powerpc ppc64], gcc-$(BASE_VERSION)-base [powerpc ppc64],
-SPU_BUILD_DEP := binutils-spu (>= $(BINUTILSV)) [powerpc ppc64], newlib-spu (>= 1.16.0) [powerpc ppc64],
+SPU_BUILD_DEP := binutils-spu (>= $(BINUTILSBDV)) [powerpc ppc64], newlib-spu (>= 1.16.0) [powerpc ppc64], gcc-$(BASE_VERSION)-base [powerpc ppc64],
+SPU_BUILD_DEP := binutils-spu (>= $(BINUTILSBDV)) [powerpc ppc64], newlib-spu (>= 1.16.0) [powerpc ppc64],
+SPU_BUILD_DEP :=
# FIXME: needs zlib?
GO_BUILD_DEP := g++-4.6,
@@ -564,6 +578,7 @@ PKG_LIBGCJ_EXT = $(GCJ_SONAME1)$(if $(GCJ_SONAME2),-$(GCJ_SONAME2))
ctrl_flags = \
-DBINUTILSV=$(BINUTILSV) \
+ -DBINUTILSBDV=$(BINUTILSBDV) \
-DSRCNAME=$(PKGSOURCE) \
-D__$(DEB_TARGET_GNU_CPU)__ \
-DARCH=$(DEB_TARGET_ARCH) \
@@ -1112,7 +1127,7 @@ check-versions:
exit 1; \
fi
v=$$(dpkg-query -l binutils binutils-multiarch | awk '/^ii/ {print $$3;exit}'); \
- if dpkg --compare-versions "$$v" lt "$(BINUTILSV)"; then \
- echo "binutils (>= $(BINUTILSV)) required, found $$v"; \
+ if dpkg --compare-versions "$$v" lt "$(BINUTILSBDV)"; then \
+ echo "binutils (>= $(BINUTILSBDV)) required, found $$v"; \
exit 1; \
fi
diff --git a/debian/rules.d/binary-libstdcxx.mk b/debian/rules.d/binary-libstdcxx.mk
index 6ef0332..ba3ee08 100644
--- a/debian/rules.d/binary-libstdcxx.mk
+++ b/debian/rules.d/binary-libstdcxx.mk
@@ -223,6 +223,8 @@ define __do_libstdcxx_dbg
cp -p $(d)/$(usr_lib$(2))/libstdc++.so.*.py \
$(d_d)/$(PF)/lib/debug/$(usr_lib$(2))/.;
+ sed -i -e "/^libdir *=/s,=.*,= '/$(usr_lib$(2))'," \
+ $(d_d)/$(PF)/lib/debug/$(usr_lib$(2))/libstdc++.so.*.py
$(if $(filter yes,$(with_lib$(2)cxx)),
cp -a $(d)/$(usr_lib$(2))/libstdc++.so.*[0-9] \
$(d_d)/$(usr_lib$(2))/.;
@@ -418,6 +420,8 @@ endif
cp -p $(d)/$(usr_lib)/libstdc++.so.*.py \
$(d_dbg)/$(PF)/lib/debug/$(usr_lib)/
+ sed -i -e "/^libdir *=/s,=.*,= '/$(usr_lib)'," \
+ $(d_dbg)/$(PF)/lib/debug/$(usr_lib)/libstdc++.so.*.py
ifeq ($(with_libcxx),yes)
cp -a $(d)/$(usr_lib)/libstdc++.so.*[0-9] \
$(d_dbg)/$(usr_lib)/
diff --git a/debian/rules.defs b/debian/rules.defs
index c31b43f..9596454 100644
--- a/debian/rules.defs
+++ b/debian/rules.defs
@@ -340,8 +340,7 @@ with_common_libs := yes
# XXX: should with_common_libs be "yes" only if this is the default compiler
# version on the targeted arch?
-# currently, Debian experimental has gcc-4.8 too (identifying as wheezy)
-ifeq (,$(filter $(distrelease),etch lenny squeeze))
+ifeq (,$(filter $(distrelease),etch lenny squeeze wheezy))
with_common_pkgs :=
with_common_libs :=
else ifeq (,$(filter $(distrelease),dapper hardy jaunty karmic lucid maverick oneiric precise quantal raring))
@@ -941,6 +940,7 @@ mudflap_no_archs = arm64
ifneq (,$(filter $(DEB_TARGET_ARCH),$(mudflap_no_archs)))
with_mudflap :=
endif
+with_mudflap :=
# gomp --------------------
with_gomp := yes
@@ -959,7 +959,7 @@ with_itm := $(call envfilt, itm, , , $(with_itm))
# gold --------------------
# armel with binutils 2.20.51 only
-gold_archs = amd64 armel armhf i386 lpia powerpc ppc64 sparc
+gold_archs = amd64 armel armhf i386 lpia powerpc ppc64 sparc sparc64
ifneq (,$(filter $(DEB_TARGET_ARCH),$(gold_archs)))
with_gold := yes
endif
@@ -972,8 +972,7 @@ endif # ifndef DEB_STAGE
# cloog backend
ifneq (,$(filter $(distrelease),lenny etch squeeze dapper hardy jaunty karmic lucid maverick))
cloog_backend = ppl-0.10
-# FIXME: sid currently identifies itself as wheezy, add it here after the release
-else ifneq (,$(filter $(distrelease),wheezy natty oneiric precise quantal))
+else ifneq (,$(filter $(distrelease),wheezy jessie sid natty oneiric precise quantal))
cloog_backend = ppl-0.11
else
cloog_backend = ppl-1.0
@@ -1096,6 +1095,7 @@ else
with_spu := yes
endif
endif
+ with_spu := now disabled, newlib now maintained by an arm only maintainer
ifeq ($(spu_no_snap)-$(trunk_build),yes-yes)
with_spu := disabled for snapshot build
endif
@@ -1168,9 +1168,9 @@ debian_extra_langs := $(subst obj-c++,objcp,$(debian_extra_langs))
export debian_extra_langs
# multilib
-biarch_map := i686=x86_64 powerpc=powerpc64 sparc=sparc64 s390=s390x s390x=s390 \
+biarch_map := i686=x86_64 powerpc=powerpc64 sparc=sparc64 sparc64=sparc s390=s390x s390x=s390 \
x86_64=i686 powerpc64=powerpc mips=mips64 mipsel=mips64el
-ifeq (,$(filter $(distrelease),lenny etch squeeze wheezy sid dapper hardy jaunty karmic lucid))
+ifeq (,$(filter $(distrelease),lenny etch squeeze wheezy jessie sid dapper hardy jaunty karmic lucid))
biarch_map := $(subst i686=,i486=,$(biarch_map))
endif
ifeq ($(distribution),Ubuntu)
@@ -1277,7 +1277,8 @@ define gen_biarch
export TARGET64_MACHINE
endif
endef
-biarch32archs := /amd64/ppc64/kfreebsd-amd64/s390x/x32/illumos-amd64/
+biarch32archs := /amd64/ppc64/kfreebsd-amd64/s390x/sparc64/x32/
+biarch32archs += illumos-amd64/
biarch64archs := /i386/powerpc/sparc/s390/mips/mipsel/x32/
biarchn32archs := /mips/mipsel/
ifeq ($(distribution),Ubuntu)
@@ -1607,7 +1608,7 @@ else
define cross_mangle_substvars
endef
# precise's dh_shlibdeps doesn't work well for ARM multilibs
- ifneq (,$(filter $(distrelease),precise))
+ ifneq (,$(filter $(distrelease),precise quantal raring saucy))
ifneq (,$(filter $(DEB_TARGET_ARCH), armel armhf))
ignshld = -
endif
diff --git a/debian/rules.patch b/debian/rules.patch
index 4909a6f..99afe89 100644
--- a/debian/rules.patch
+++ b/debian/rules.patch
@@ -40,6 +40,7 @@ debian_patches += \
debian_patches += \
$(if $(with_linaro_branch),aarch64-multiarch) \
$(if $(with_linaro_branch),aarch64-hash-style-gnu) \
+ $(if $(with_linaro_branch),pr59695) \
aarch64-libffi \
aarch64-libffi-testsuite \
gcc-textdomain \
@@ -87,6 +88,12 @@ debian_patches += \
libgcc-backports \
ppl-version \
libgo-setcontext-config \
+ pr50043 \
+
+gdb_depends := $(shell dpkg -s gdb | grep '^Depends:.*libpython3')
+ifneq (,$(findstring libpython3,$(gdb_depends)))
+ debian_patches += libstdc++-python3
+endif
ifneq (,$(filter $(cloog_backend),ppl-0.11))
debian_patches += gcc-cloog-dl
@@ -228,9 +235,9 @@ ifeq ($(with_softfloat),yes)
debian_patches += arm-multilib-soft-float
else ifeq ($(multilib),yes)
ifneq (,$(filter $(distrelease),lucid maverick natty oneiric precise))
- debian_patches += arm-multilib-softfp
+ debian_patches += arm-multilib-softfp$(if $(filter yes,$(DEB_CROSS)),-cross)
else
- debian_patches += arm-multilib-soft
+ debian_patches += arm-multilib-soft$(if $(filter yes,$(DEB_CROSS)),-cross)
endif
endif
debian_patches += arm-multilib-defaults
@@ -296,7 +303,7 @@ endif
debian_patches += gcc-powerpc-undef
debian_patches += gcc-multilib-multiarch
-ifeq (,$(filter $(distrelease),lenny squeeze wheezy sid experimental dapper hardy intrepid jaunty karmic lucid maverick))
+ifeq (,$(filter $(distrelease),lenny squeeze wheezy jessie sid experimental dapper hardy intrepid jaunty karmic lucid maverick))
debian_patches += gcc-as-needed
endif
debian_patches += mips-fix-loongson2f-nop
diff --git a/debian/rules2 b/debian/rules2
index 879e33e..1d40ad9 100644
--- a/debian/rules2
+++ b/debian/rules2
@@ -50,8 +50,12 @@ ifeq ($(findstring linux,$(DEB_HOST_GNU_SYSTEM)),linux)
else \
m=`vmstat --free --swap-free --kilobytes|awk '{m+=$$2}END{print int(m*.9)}'`; \
fi; \
- ulimit -m $$m; \
- echo "Limited memory for test runs to `ulimit -m`kB"
+ echo "Limiting memory for test runs to $${m}kB"; \
+ if ulimit -m $$m; then \
+ echo " limited to `ulimit -m`kB"; \
+ else \
+ echo " failed"; \
+ fi
else
ULIMIT_M = true
endif
@@ -118,6 +122,10 @@ ifneq (,$(findstring static,$(DEB_BUILD_OPTIONS)))
LDFLAGS += -static
endif
+ifneq (,$(filter $(DEB_TARGET_ARCH),alpha))
+ LDFLAGS += -Wl,--no-relax
+endif
+
CFLAGS_TO_PASS = \
$(if $(CFLAGS),CFLAGS="$(CFLAGS)") \
$(if $(BOOT_CFLAGS),BOOT_CFLAGS="$(BOOT_CFLAGS)") \
@@ -222,7 +230,10 @@ endif
ifeq ($(with_cxx)-$(with_debug),yes-yes)
CONFARGS += --enable-libstdcxx-debug
endif
-CONFARGS += --enable-libstdcxx-time=yes
+# see #710220, revert this in 4.7 and 4.6
+ifneq (,$(filter $(distrelease),squeeze wheezy lucid maverick natty oneiric precise quantal raring))
+ CONFARGS += --enable-libstdcxx-time=yes
+endif
ifeq (,$(filter $(DEB_TARGET_ARCH), hurd-i386 kfreebsd-i386 kfreebsd-amd64))
CONFARGS += --enable-gnu-unique-object
@@ -430,9 +441,9 @@ ifneq (,$(findstring sparc-linux,$(DEB_TARGET_GNU_TYPE)))
endif
ifneq (,$(findstring sparc64-linux,$(DEB_TARGET_GNU_TYPE)))
- ifneq ($(biarch32),yes)
- CONFARGS += --disable-multilib
- endif
+ ifeq ($(biarch32),yes)
+ CONFARGS += --enable-targets=all
+ endif
endif
ifneq (,$(findstring ia64-linux,$(DEB_TARGET_GNU_TYPE)))
@@ -451,7 +462,7 @@ ifneq (,$(findstring m68k-linux,$(DEB_TARGET_GNU_TYPE)))
endif
ifeq ($(DEB_TARGET_ARCH_OS),linux)
- ifneq (,$(findstring $(DEB_TARGET_ARCH), alpha powerpc ppc64 s390 s390x sparc sparc64))
+ ifneq (,$(findstring $(DEB_TARGET_ARCH), alpha powerpc powerpcspe ppc64 s390 s390x sparc sparc64))
CONFARGS += --with-long-double-128
endif
endif
@@ -459,7 +470,7 @@ endif
ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 i386 kfreebsd-i386 kfreebsd-amd64 illumos-amd64))
ifneq (,$(filter $(distrelease),etch lenny dapper hardy))
CONFARGS += --with-arch-32=i486
- else ifneq (,$(filter $(distrelease),squeeze wheezy sid jaunty karmic lucid))
+ else ifneq (,$(filter $(distrelease),squeeze wheezy jessie sid jaunty karmic lucid))
CONFARGS += --with-arch-32=i586
else
CONFARGS += --with-arch-32=i686
@@ -490,7 +501,6 @@ ifneq (,$(filter $(DEB_TARGET_ARCH), amd64 i386 hurd-i386 kfreebsd-i386 kfreebsd
endif
ifneq (,$(findstring mips-linux,$(DEB_TARGET_GNU_TYPE)))
- CONFARGS += --with-mips-plt
CONFARGS += --with-arch-32=mips2 --with-tune-32=mips32
ifeq ($(multilib),yes)
ifeq ($(biarchn32)-$(biarch64),yes-yes)
@@ -501,7 +511,6 @@ ifneq (,$(findstring mips-linux,$(DEB_TARGET_GNU_TYPE)))
endif
ifneq (,$(findstring mipsel-linux,$(DEB_TARGET_GNU_TYPE)))
- CONFARGS += --with-mips-plt
CONFARGS += --with-arch-32=mips2 --with-tune-32=mips32
ifeq ($(multilib),yes)
ifeq ($(biarchn32)-$(biarch64),yes-yes)
@@ -774,15 +783,19 @@ usr_lib32 = $(PFL)/lib32
usr_libn32 = $(PFL)/lib32
usr_libx32 = $(PFL)/libx32
usr_lib64 = $(PFL)/lib64
-# FIXME: Don't hard code
-usr_libhf = $(PFL)/lib/arm-linux-gnueabihf
-usr_libsf = $(PFL)/lib/arm-linux-gnueabi
+# FIXME: Move to the new location for native builds too
+ifeq ($(DEB_CROSS),yes)
+ usr_libhf = $(PFL)/libhf
+ usr_libsf = $(PFL)/libsf
+else
+ usr_libhf = $(PFL)/lib/arm-linux-gnueabihf
+ usr_libsf = $(PFL)/lib/arm-linux-gnueabi
+endif
gcc_lib_dir32 = $(gcc_lib_dir)/$(biarch32subdir)
gcc_lib_dirn32 = $(gcc_lib_dir)/$(biarchn32subdir)
gcc_lib_dirx32 = $(gcc_lib_dir)/$(biarchx32subdir)
gcc_lib_dir64 = $(gcc_lib_dir)/$(biarch64subdir)
-# FIXME: Don't hard code
gcc_lib_dirhf = $(gcc_lib_dir)/$(biarchhfsubdir)
gcc_lib_dirsf = $(gcc_lib_dir)/$(biarchsfsubdir)
@@ -793,8 +806,14 @@ libgcc_dirn32 = $(RPF)/lib32
# libx32gcc_s also ends up in usr
libgcc_dirx32 = $(PFL)/libx32
libgcc_dir64 = $(RPF)/lib64
-libgcc_dirhf = $(RPF)/lib/arm-linux-gnueabihf
-libgcc_dirsf = $(RPF)/lib/arm-linux-gnueabi
+# FIXME: Move to the new location for native builds too
+ifeq ($(DEB_CROSS),yes)
+ libgcc_dirhf = $(RPF)/libhf
+ libgcc_dirsf = $(RPF)/libsf
+else
+ libgcc_dirhf = $(RPF)/lib/arm-linux-gnueabihf
+ libgcc_dirsf = $(RPF)/lib/arm-linux-gnueabi
+endif
# install_gcc_lib(lib,soname,flavour,package)
define install_gcc_lib
@@ -1400,38 +1419,10 @@ $(check_stamp): $(build_stamp) $(build_locale_stamp)
rm -f $(builddir)/runcheck*
-chmod 755 $(srcdir)/contrib/test_summary
-ifneq ($(with_common_libs),yes)
- ifeq ($(with_cxx),yes)
- : # libstdc++6 built from newer gcc-4.x source, run testsuite against the installed lib
- sed 's/-L[^ ]*//g' $(buildlibdir)/libstdc++-v3/scripts/testsuite_flags \
- > $(buildlibdir)/libstdc++-v3/scripts/testsuite_flags.installed
- -$(ULIMIT_M); \
- set +e; \
- for d in $(buildlibdir)/libstdc++-v3/testsuite; do \
- echo "Running testsuite in $$d ..."; \
- TEST_INSTALLED=1 \
- $(SET_SHELL) \
- $(SET_LOCPATH) \
- $(SET_PATH) \
- DEJAGNU_TIMEOUT=$(DEJAGNU_TIMEOUT) \
- DEB_GCC_NO_O3=1 \
- $(MAKE) -k -C $$d $(NJOBS) check $(RUNTESTFLAGS); \
- done 2>&1 | tee test-protocol2
-
- BOOT_CFLAGS="$(BOOT_CFLAGS)" \
- $(srcdir)/contrib/test_summary -m "$(S_EMAIL)" > raw-test-summary
- -( \
- sed -n '/^Mail/s/.*"\([^"][^"]*\)".*/\1/p' raw-test-summary; \
- awk '/^cat/, /^EOF/' raw-test-summary | grep -v EOF; \
- ) > libstdc++-test-summary
- echo 'BEGIN installed libstdc++-v3 test-summary'
- cat libstdc++-test-summary
- echo 'END installed libstdc++-v3 test-summary'
- find $(buildlibdir)/libstdc++-v3/testsuite -name '*.log' -o -name '*.sum' \
- | xargs -r rm -f
- endif
-endif
+ : # needed for the plugin tests to succeed
+ ln -sf gcc $(builddir)/prev-gcc
+ ln -sf $(DEB_TARGET_GNU_TYPE) $(builddir)/prev-$(DEB_TARGET_GNU_TYPE)
ifeq ($(start_logwatch),yes)
: # start logwatch script for regular output during test runs
@@ -1937,6 +1928,7 @@ endif
: # Work around PR lto/41569
ln -sf gcc $(builddir)/prev-gcc
+ ln -sf $(DEB_TARGET_GNU_TYPE) $(builddir)/prev-$(DEB_TARGET_GNU_TYPE)
: # Install everything
$(SET_PATH) \