PR78905 define _GLIBCXX_RELEASE macro
authorJonathan Wakely <jwakely@redhat.com>
Thu, 19 Jan 2017 16:40:46 +0000 (16:40 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Thu, 19 Jan 2017 16:40:46 +0000 (16:40 +0000)
PR libstdc++/78905
* doc/xml/manual/abi.xml (abi.versioning.history): Add markup to
macro names, filenames, and literal values. Document _GLIBCXX_RELEASE.
Document that the deprecated _GLIBCXX_VERSION macro was removed for
the 4.0.0 release.
* doc/html/*: Regenerate.
* include/Makefile.am (_GLIBCXX_RELEASE): Set value.
* include/Makefile.in: Regenerate.
* include/bits/c++config (_GLIBCXX_RELEASE): Add #define.
* testsuite/ext/profile/mutex_extensions_neg.cc: Use lineno of 0 in
dg-error.

From-SVN: r244642

libstdc++-v3/ChangeLog
libstdc++-v3/doc/html/manual/abi.html
libstdc++-v3/doc/xml/manual/abi.xml
libstdc++-v3/include/Makefile.am
libstdc++-v3/include/Makefile.in
libstdc++-v3/include/bits/c++config
libstdc++-v3/testsuite/ext/profile/mutex_extensions_neg.cc

index 9af3b9f89955786db6a7951ff9fa6175113f0b7e..c6fb5adec1d4853f18edc220bf151e015e35622d 100644 (file)
@@ -1,3 +1,17 @@
+2017-01-19  Jonathan Wakely  <jwakely@redhat.com>
+
+       PR libstdc++/78905
+       * doc/xml/manual/abi.xml (abi.versioning.history): Add markup to
+       macro names, filenames, and literal values. Document _GLIBCXX_RELEASE.
+       Document that the deprecated _GLIBCXX_VERSION macro was removed for
+       the 4.0.0 release.
+       * doc/html/*: Regenerate.
+       * include/Makefile.am (_GLIBCXX_RELEASE): Set value.
+       * include/Makefile.in: Regenerate.
+       * include/bits/c++config (_GLIBCXX_RELEASE): Add #define.
+       * testsuite/ext/profile/mutex_extensions_neg.cc: Use lineno of 0 in
+       dg-error.
+
 2017-01-18  Jonathan Wakely  <jwakely@redhat.com>
 
        PR libstdc++/69301
@@ -22,7 +36,7 @@
 
        PR libstdc++/69699
        * doc/xml/manual/abi.xml (abi.versioning.history): Explain why the
-       _GLIBCXX__ macro is not useful. Remove redundant date information
+       __GLIBCXX__ macro is not useful. Remove redundant date information
        and link to the GCC release timeline.
        (abi.versioning.active): Move partial sentence into the previous
        paragraph.
index 8988e4559a6479907e3ba0292d29cb29bf68e59b..775d09e3c1826ff31c149f2aae724640f2386d33 100644 (file)
@@ -145,60 +145,82 @@ compatible.
     <code class="code">-fabi-version</code>.
     </p><p>
     It is versioned as follows:
-    </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
-    macro namespace.) These macros are defined as the date the library
-    was released, in compressed ISO date format, as an unsigned long.
+    </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><li class="listitem"><p>GCC 5 and higher: <code class="code">-fabi-version=0</code> <span class="emphasis"><em>(See GCC manual for meaning)</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 <span class="symbol">__GLIBCPP__</span>. For later
+    releases, it's <span class="symbol">__GLIBCXX__</span>. (The libstdc++ project
+    generously changed from CPP to CXX throughout its source to allow the
+    "C" pre-processor the CPP macro namespace.) These macros are defined
+    as the date the library was released, in compressed ISO date format,
+    as an integer constant.
     </p><p>
-    This macro is defined in the file "c++config" in the
-    "libstdc++-v3/include/bits" directory. Up to GCC 4.1.0, it was
+    This macro is defined in the file
+    <code class="filename">c++config</code> in the
+    <code class="filename">libstdc++-v3/include/bits</code>
+    directory.  Up to GCC 4.1.0, it was
     changed every night by an automated script. Since GCC 4.1.0 it is set
     during configuration to the same value as
     <code class="filename">gcc/DATESTAMP</code>, so for an official release its value
     is the same as the date of the release, which is given in the <a class="link" href="https://gcc.gnu.org/develop.html#timeline" target="_top">GCC Release
     Timeline</a>.
     </p><p>
-    This macro is not useful for determining whether a particular feature is
-    supported by the version of libstdc++ you are using. The date of a release
-    might be after a feature was added to the development trunk, but the
-    release could be from an older branch. For example, in the 5.4.0 release
-    the macro has the value 20160603 which is greater than the 20160427 value
-    of the macro in the 6.1.0 release, but there are features supported in the
-    6.1.0 release that are not supported in 5.4.0 release.
+    This macro can be used in code to detect whether the C++ Standard Library
+    implementation in use is libstdc++, but is not useful for detecting the
+    libstdc++ version, nor whether particular features are supported.
+    The macro value might be a date after a feature was added to the
+    development trunk, but the release could be from an older branch without
+    the feature. For example, in the 5.4.0 release the macro has the value
+    <code class="literal">20160603</code> which is greater than the
+    <code class="literal">20160427</code> value of the macro in the 6.1.0 release,
+    but there are features supported in the 6.1.0 release that are not
+    supported in 5.4.0 release.
     You also can't test for the the exact values listed below to try and
     identify a release, because a snapshot taken from the gcc-5-branch on
     2016-04-27 would have the same value for the macro as the 6.1.0 release
     despite being a different version.
     Many GNU/Linux distributions build their GCC packages from snapshots, so
-    the macro can have dates that doesn't correspond to official releases.
+    the macro can have dates that don't correspond to official releases.
     </p><p>
     It is versioned as follows:
-    </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>
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: <code class="literal">20010615</code></p></li><li class="listitem"><p>GCC 3.0.1: <code class="literal">20010819</code></p></li><li class="listitem"><p>GCC 3.0.2: <code class="literal">20011023</code></p></li><li class="listitem"><p>GCC 3.0.3: <code class="literal">20011220</code></p></li><li class="listitem"><p>GCC 3.0.4: <code class="literal">20020220</code></p></li><li class="listitem"><p>GCC 3.1.0: <code class="literal">20020514</code></p></li><li class="listitem"><p>GCC 3.1.1: <code class="literal">20020725</code></p></li><li class="listitem"><p>GCC 3.2.0: <code class="literal">20020814</code></p></li><li class="listitem"><p>GCC 3.2.1: <code class="literal">20021119</code></p></li><li class="listitem"><p>GCC 3.2.2: <code class="literal">20030205</code></p></li><li class="listitem"><p>GCC 3.2.3: <code class="literal">20030422</code></p></li><li class="listitem"><p>GCC 3.3.0: <code class="literal">20030513</code></p></li><li class="listitem"><p>GCC 3.3.1: <code class="literal">20030804</code></p></li><li class="listitem"><p>GCC 3.3.2: <code class="literal">20031016</code></p></li><li class="listitem"><p>GCC 3.3.3: <code class="literal">20040214</code></p></li><li class="listitem"><p>GCC 3.4.0: <code class="literal">20040419</code></p></li><li class="listitem"><p>GCC 3.4.1: <code class="literal">20040701</code></p></li><li class="listitem"><p>GCC 3.4.2: <code class="literal">20040906</code></p></li><li class="listitem"><p>GCC 3.4.3: <code class="literal">20041105</code></p></li><li class="listitem"><p>GCC 3.4.4: <code class="literal">20050519</code></p></li><li class="listitem"><p>GCC 3.4.5: <code class="literal">20051201</code></p></li><li class="listitem"><p>GCC 3.4.6: <code class="literal">20060306</code></p></li><li class="listitem"><p>GCC 4.0.0: <code class="literal">20050421</code></p></li><li class="listitem"><p>GCC 4.0.1: <code class="literal">20050707</code></p></li><li class="listitem"><p>GCC 4.0.2: <code class="literal">20050921</code></p></li><li class="listitem"><p>GCC 4.0.3: <code class="literal">20060309</code></p></li><li class="listitem"><p>
       GCC 4.1.0 and later: the GCC release date, as shown in the
       <a class="link" href="https://gcc.gnu.org/develop.html#timeline" target="_top">GCC
       Release Timeline</a>
     </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
-    GCC 3.1.0 releases and higher, and is deprecated in 3.4 (where it
-    is called _GLIBCXX_VERSION).
+    Since GCC 7, incremental bumping of a library pre-defined macro,
+    <span class="symbol">_GLIBCXX_RELEASE</span>. This macro is defined to the GCC
+    major version that the libstdc++ headers belong to, as an integer constant.
+    When compiling with GCC it has the same value as GCC's pre-defined
+    macro <span class="symbol">__GNUC__</span>.
+    This macro can be used when libstdc++ is used with a non-GNU
+    compiler where <span class="symbol">__GNUC__</span> is not defined, or has a
+    different value that doesn't correspond to the libstdc++ version.
     </p><p>
-    This macro is defined in the file "c++config" in the
-    "libstdc++-v3/include/bits" directory and is generated
-    automatically by autoconf as part of the configure-time generation
-    of config.h.
+    This macro is defined in the file
+    <code class="filename">c++config</code> in the
+    <code class="filename">libstdc++-v3/include/bits</code>
+    directory and is generated automatically by autoconf as part of the
+    configure-time generation of
+    <code class="filename">config.h</code> and subsequently
+    <code class="filename">&lt;bits/c++config.h&gt;</code>.
+    </p></li><li class="listitem"><p>
+    Historically, incremental bumping of a library pre-defined macro,
+    <span class="symbol">_GLIBCPP_VERSION</span>. This macro was defined as the
+    released version of the library, as a string literal. This was only
+    implemented in GCC 3.1.0 releases and higher, and was deprecated in
+    3.4.x (where it was called <span class="symbol">_GLIBCXX_VERSION</span>),
+    and is not defined in 4.0.0 and higher.
+    </p><p>
+    This macro is defined in the same file as
+    <span class="symbol">_GLIBCXX_RELEASE</span>, described above.
     </p><p>
     It is versioned as follows:
-    </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>
+    </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>GCC 3.0.0: <code class="literal">"3.0.0"</code></p></li><li class="listitem"><p>GCC 3.0.1: <code class="literal">"3.0.0"</code> (Error, should be <code class="literal">"3.0.1"</code>)</p></li><li class="listitem"><p>GCC 3.0.2: <code class="literal">"3.0.0"</code> (Error, should be <code class="literal">"3.0.2"</code>)</p></li><li class="listitem"><p>GCC 3.0.3: <code class="literal">"3.0.0"</code> (Error, should be <code class="literal">"3.0.3"</code>)</p></li><li class="listitem"><p>GCC 3.0.4: <code class="literal">"3.0.0"</code> (Error, should be <code class="literal">"3.0.4"</code>)</p></li><li class="listitem"><p>GCC 3.1.0: <code class="literal">"3.1.0"</code></p></li><li class="listitem"><p>GCC 3.1.1: <code class="literal">"3.1.1"</code></p></li><li class="listitem"><p>GCC 3.2.0: <code class="literal">"3.2"</code></p></li><li class="listitem"><p>GCC 3.2.1: <code class="literal">"3.2.1"</code></p></li><li class="listitem"><p>GCC 3.2.2: <code class="literal">"3.2.2"</code></p></li><li class="listitem"><p>GCC 3.2.3: <code class="literal">"3.2.3"</code></p></li><li class="listitem"><p>GCC 3.3.0: <code class="literal">"3.3"</code></p></li><li class="listitem"><p>GCC 3.3.1: <code class="literal">"3.3.1"</code></p></li><li class="listitem"><p>GCC 3.3.2: <code class="literal">"3.3.2"</code></p></li><li class="listitem"><p>GCC 3.3.3: <code class="literal">"3.3.3"</code></p></li><li class="listitem"><p>GCC 3.4: <code class="literal">"version-unused"</code></p></li><li class="listitem"><p>GCC 4 and later: not defined</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.
     </p><p>
     All C++ includes are installed in
-    <code class="filename">include/c++</code>, then nest in a
+    <code class="filename">include/c++</code>, then nested in a
     directory hierarchy corresponding to the C++ compiler's released
     version. This version corresponds to the variable "gcc_version" in
     "libstdc++-v3/acinclude.m4," and more details can be found in that
index c818bd86605321f5ca7630968b54d673c5914bd3..f2b2ec3796225bc1ce4441caed9ff9561b378fb3 100644 (file)
@@ -378,22 +378,26 @@ compatible.
     <listitem><para>GCC 3.2: <code>-fabi-version=1</code></para></listitem>
     <listitem><para>GCC 3.3: <code>-fabi-version=1</code></para></listitem>
     <listitem><para>GCC 3.4, GCC 4.x: <code>-fabi-version=2</code> <emphasis>(Incompatible with previous)</emphasis></para></listitem>
+    <listitem><para>GCC 5 and higher: <code>-fabi-version=0</code> <emphasis>(See GCC manual for meaning)</emphasis></para></listitem>
     </itemizedlist>
     <para/>
     </listitem>
 
    <listitem>
     <para>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
-    macro namespace.) These macros are defined as the date the library
-    was released, in compressed ISO date format, as an unsigned long.
+    before 3.4.0, the macro is <symbol>__GLIBCPP__</symbol>. For later
+    releases, it's <symbol>__GLIBCXX__</symbol>. (The libstdc++ project
+    generously changed from CPP to CXX throughout its source to allow the
+    "C" pre-processor the CPP macro namespace.) These macros are defined
+    as the date the library was released, in compressed ISO date format,
+    as an integer constant.
     </para>
 
     <para>
-    This macro is defined in the file "c++config" in the
-    "libstdc++-v3/include/bits" directory. Up to GCC 4.1.0, it was
+    This macro is defined in the file
+    <filename class="headerfile">c++config</filename> in the
+    <filename class="directory">libstdc++-v3/include/bits</filename>
+    directory.  Up to GCC 4.1.0, it was
     changed every night by an automated script. Since GCC 4.1.0 it is set
     during configuration to the same value as
     <filename>gcc/DATESTAMP</filename>, so for an official release its value
@@ -404,51 +408,54 @@ compatible.
     </para>
 
     <para>
-    This macro is not useful for determining whether a particular feature is
-    supported by the version of libstdc++ you are using. The date of a release
-    might be after a feature was added to the development trunk, but the
-    release could be from an older branch. For example, in the 5.4.0 release
-    the macro has the value 20160603 which is greater than the 20160427 value
-    of the macro in the 6.1.0 release, but there are features supported in the
-    6.1.0 release that are not supported in 5.4.0 release.
+    This macro can be used in code to detect whether the C++ Standard Library
+    implementation in use is libstdc++, but is not useful for detecting the
+    libstdc++ version, nor whether particular features are supported.
+    The macro value might be a date after a feature was added to the
+    development trunk, but the release could be from an older branch without
+    the feature. For example, in the 5.4.0 release the macro has the value
+    <literal>20160603</literal> which is greater than the
+    <literal>20160427</literal> value of the macro in the 6.1.0 release,
+    but there are features supported in the 6.1.0 release that are not
+    supported in 5.4.0 release.
     You also can't test for the the exact values listed below to try and
     identify a release, because a snapshot taken from the gcc-5-branch on
     2016-04-27 would have the same value for the macro as the 6.1.0 release
     despite being a different version.
     Many GNU/Linux distributions build their GCC packages from snapshots, so
-    the macro can have dates that doesn't correspond to official releases.
+    the macro can have dates that don't correspond to official releases.
     </para>
 
     <para>
     It is versioned as follows:
     </para>
     <itemizedlist>
-    <listitem><para>GCC 3.0.0: 20010615</para></listitem>
-    <listitem><para>GCC 3.0.1: 20010819</para></listitem>
-    <listitem><para>GCC 3.0.2: 20011023</para></listitem>
-    <listitem><para>GCC 3.0.3: 20011220</para></listitem>
-    <listitem><para>GCC 3.0.4: 20020220</para></listitem>
-    <listitem><para>GCC 3.1.0: 20020514</para></listitem>
-    <listitem><para>GCC 3.1.1: 20020725</para></listitem>
-    <listitem><para>GCC 3.2.0: 20020814</para></listitem>
-    <listitem><para>GCC 3.2.1: 20021119</para></listitem>
-    <listitem><para>GCC 3.2.2: 20030205</para></listitem>
-    <listitem><para>GCC 3.2.3: 20030422</para></listitem>
-    <listitem><para>GCC 3.3.0: 20030513</para></listitem>
-    <listitem><para>GCC 3.3.1: 20030804</para></listitem>
-    <listitem><para>GCC 3.3.2: 20031016</para></listitem>
-    <listitem><para>GCC 3.3.3: 20040214</para></listitem>
-    <listitem><para>GCC 3.4.0: 20040419</para></listitem>
-    <listitem><para>GCC 3.4.1: 20040701</para></listitem>
-    <listitem><para>GCC 3.4.2: 20040906</para></listitem>
-    <listitem><para>GCC 3.4.3: 20041105</para></listitem>
-    <listitem><para>GCC 3.4.4: 20050519</para></listitem>
-    <listitem><para>GCC 3.4.5: 20051201</para></listitem>
-    <listitem><para>GCC 3.4.6: 20060306</para></listitem>
-    <listitem><para>GCC 4.0.0: 20050421</para></listitem>
-    <listitem><para>GCC 4.0.1: 20050707</para></listitem>
-    <listitem><para>GCC 4.0.2: 20050921</para></listitem>
-    <listitem><para>GCC 4.0.3: 20060309</para></listitem>
+    <listitem><para>GCC 3.0.0: <literal>20010615</literal></para></listitem>
+    <listitem><para>GCC 3.0.1: <literal>20010819</literal></para></listitem>
+    <listitem><para>GCC 3.0.2: <literal>20011023</literal></para></listitem>
+    <listitem><para>GCC 3.0.3: <literal>20011220</literal></para></listitem>
+    <listitem><para>GCC 3.0.4: <literal>20020220</literal></para></listitem>
+    <listitem><para>GCC 3.1.0: <literal>20020514</literal></para></listitem>
+    <listitem><para>GCC 3.1.1: <literal>20020725</literal></para></listitem>
+    <listitem><para>GCC 3.2.0: <literal>20020814</literal></para></listitem>
+    <listitem><para>GCC 3.2.1: <literal>20021119</literal></para></listitem>
+    <listitem><para>GCC 3.2.2: <literal>20030205</literal></para></listitem>
+    <listitem><para>GCC 3.2.3: <literal>20030422</literal></para></listitem>
+    <listitem><para>GCC 3.3.0: <literal>20030513</literal></para></listitem>
+    <listitem><para>GCC 3.3.1: <literal>20030804</literal></para></listitem>
+    <listitem><para>GCC 3.3.2: <literal>20031016</literal></para></listitem>
+    <listitem><para>GCC 3.3.3: <literal>20040214</literal></para></listitem>
+    <listitem><para>GCC 3.4.0: <literal>20040419</literal></para></listitem>
+    <listitem><para>GCC 3.4.1: <literal>20040701</literal></para></listitem>
+    <listitem><para>GCC 3.4.2: <literal>20040906</literal></para></listitem>
+    <listitem><para>GCC 3.4.3: <literal>20041105</literal></para></listitem>
+    <listitem><para>GCC 3.4.4: <literal>20050519</literal></para></listitem>
+    <listitem><para>GCC 3.4.5: <literal>20051201</literal></para></listitem>
+    <listitem><para>GCC 3.4.6: <literal>20060306</literal></para></listitem>
+    <listitem><para>GCC 4.0.0: <literal>20050421</literal></para></listitem>
+    <listitem><para>GCC 4.0.1: <literal>20050707</literal></para></listitem>
+    <listitem><para>GCC 4.0.2: <literal>20050921</literal></para></listitem>
+    <listitem><para>GCC 4.0.3: <literal>20060309</literal></para></listitem>
     <listitem><para>
       GCC 4.1.0 and later: the GCC release date, as shown in the
       <link xmlns:xlink="http://www.w3.org/1999/xlink"
@@ -461,41 +468,63 @@ compatible.
 
     <listitem>
     <para>
-    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
-    GCC 3.1.0 releases and higher, and is deprecated in 3.4 (where it
-    is called _GLIBCXX_VERSION).
+    Since GCC 7, incremental bumping of a library pre-defined macro,
+    <symbol>_GLIBCXX_RELEASE</symbol>. This macro is defined to the GCC
+    major version that the libstdc++ headers belong to, as an integer constant.
+    When compiling with GCC it has the same value as GCC's pre-defined
+    macro <symbol>__GNUC__</symbol>.
+    This macro can be used when libstdc++ is used with a non-GNU
+    compiler where <symbol>__GNUC__</symbol> is not defined, or has a
+    different value that doesn't correspond to the libstdc++ version.
     </para>
 
     <para>
-    This macro is defined in the file "c++config" in the
-    "libstdc++-v3/include/bits" directory and is generated
-    automatically by autoconf as part of the configure-time generation
-    of config.h.
+    This macro is defined in the file
+    <filename class="headerfile">c++config</filename> in the
+    <filename class="directory">libstdc++-v3/include/bits</filename>
+    directory and is generated automatically by autoconf as part of the
+    configure-time generation of
+    <filename class="headerfile">config.h</filename> and subsequently
+    <filename class="headerfile">&lt;bits/c++config.h&gt;</filename>.
+    </para>
+    </listitem>
+
+    <listitem>
+    <para>
+    Historically, incremental bumping of a library pre-defined macro,
+    <symbol>_GLIBCPP_VERSION</symbol>. This macro was defined as the
+    released version of the library, as a string literal. This was only
+    implemented in GCC 3.1.0 releases and higher, and was deprecated in
+    3.4.x (where it was called <symbol>_GLIBCXX_VERSION</symbol>),
+    and is not defined in 4.0.0 and higher.
+    </para>
+
+    <para>
+    This macro is defined in the same file as
+    <symbol>_GLIBCXX_RELEASE</symbol>, described above.
     </para>
 
     <para>
     It is versioned as follows:
     </para>
     <itemizedlist>
-    <listitem><para>GCC 3.0.0: "3.0.0"</para></listitem>
-    <listitem><para>GCC 3.0.1: "3.0.0" (Error, should be "3.0.1")</para></listitem>
-    <listitem><para>GCC 3.0.2: "3.0.0" (Error, should be "3.0.2")</para></listitem>
-    <listitem><para>GCC 3.0.3: "3.0.0" (Error, should be "3.0.3")</para></listitem>
-    <listitem><para>GCC 3.0.4: "3.0.0" (Error, should be "3.0.4")</para></listitem>
-    <listitem><para>GCC 3.1.0: "3.1.0"</para></listitem>
-    <listitem><para>GCC 3.1.1: "3.1.1"</para></listitem>
-    <listitem><para>GCC 3.2.0: "3.2"</para></listitem>
-    <listitem><para>GCC 3.2.1: "3.2.1"</para></listitem>
-    <listitem><para>GCC 3.2.2: "3.2.2"</para></listitem>
-    <listitem><para>GCC 3.2.3: "3.2.3"</para></listitem>
-    <listitem><para>GCC 3.3.0: "3.3"</para></listitem>
-    <listitem><para>GCC 3.3.1: "3.3.1"</para></listitem>
-    <listitem><para>GCC 3.3.2: "3.3.2"</para></listitem>
-    <listitem><para>GCC 3.3.3: "3.3.3"</para></listitem>
-    <listitem><para>GCC 3.4: "version-unused"</para></listitem>
-    <listitem><para>GCC 4.x: "version-unused"</para></listitem>
+    <listitem><para>GCC 3.0.0: <literal>"3.0.0"</literal></para></listitem>
+    <listitem><para>GCC 3.0.1: <literal>"3.0.0"</literal> (Error, should be <literal>"3.0.1"</literal>)</para></listitem>
+    <listitem><para>GCC 3.0.2: <literal>"3.0.0"</literal> (Error, should be <literal>"3.0.2"</literal>)</para></listitem>
+    <listitem><para>GCC 3.0.3: <literal>"3.0.0"</literal> (Error, should be <literal>"3.0.3"</literal>)</para></listitem>
+    <listitem><para>GCC 3.0.4: <literal>"3.0.0"</literal> (Error, should be <literal>"3.0.4"</literal>)</para></listitem>
+    <listitem><para>GCC 3.1.0: <literal>"3.1.0"</literal></para></listitem>
+    <listitem><para>GCC 3.1.1: <literal>"3.1.1"</literal></para></listitem>
+    <listitem><para>GCC 3.2.0: <literal>"3.2"</literal></para></listitem>
+    <listitem><para>GCC 3.2.1: <literal>"3.2.1"</literal></para></listitem>
+    <listitem><para>GCC 3.2.2: <literal>"3.2.2"</literal></para></listitem>
+    <listitem><para>GCC 3.2.3: <literal>"3.2.3"</literal></para></listitem>
+    <listitem><para>GCC 3.3.0: <literal>"3.3"</literal></para></listitem>
+    <listitem><para>GCC 3.3.1: <literal>"3.3.1"</literal></para></listitem>
+    <listitem><para>GCC 3.3.2: <literal>"3.3.2"</literal></para></listitem>
+    <listitem><para>GCC 3.3.3: <literal>"3.3.3"</literal></para></listitem>
+    <listitem><para>GCC 3.4: <literal>"version-unused"</literal></para></listitem>
+    <listitem><para>GCC 4 and later: not defined</para></listitem>
     </itemizedlist>
     <para/>
     </listitem>
@@ -508,7 +537,7 @@ compatible.
     </para>
     <para>
     All C++ includes are installed in
-    <filename class="directory">include/c++</filename>, then nest in a
+    <filename class="directory">include/c++</filename>, then nested in a
     directory hierarchy corresponding to the C++ compiler's released
     version. This version corresponds to the variable "gcc_version" in
     "libstdc++-v3/acinclude.m4," and more details can be found in that
index dfdceb3895cb59ea976e317c228275c66830e7a2..3703bd1d3d9b68dcfc76b16c9700400d3bc851d8 100644 (file)
@@ -1238,6 +1238,7 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \
                              stamp-cxx11-abi \
                              stamp-allocator-new
        @date=`cat ${toplevel_srcdir}/gcc/DATESTAMP` ;\
+       release=`sed 's/^\([0-9]*\).*$$/\1/' ${toplevel_srcdir}/gcc/BASE-VER` ;\
        ns_version=`cat stamp-namespace-version` ;\
        visibility=`cat stamp-visibility` ;\
        externtemplate=`cat stamp-extern-template` ;\
@@ -1249,6 +1250,7 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \
        ${CONFIG_HEADER} > /dev/null 2>&1 \
        && ldbl_compat='s,^#undef _GLIBCXX_LONG_DOUBLE_COMPAT$$,#define _GLIBCXX_LONG_DOUBLE_COMPAT 1,' ;\
        sed -e "s,define __GLIBCXX__,define __GLIBCXX__ $$date," \
+       -e "s,define _GLIBCXX_RELEASE,define _GLIBCXX_RELEASE $$release," \
        -e "s,define _GLIBCXX_INLINE_VERSION, define _GLIBCXX_INLINE_VERSION $$ns_version," \
        -e "s,define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY, define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY $$visibility," \
        -e "s,define _GLIBCXX_EXTERN_TEMPLATE$$, define _GLIBCXX_EXTERN_TEMPLATE $$externtemplate," \
index 4e78aaa3bdc7b4c7d3eb33c7b9a5eb2b4d6b2d8b..ae1481f05534130a9b31dbfacd6a50c61a8d9844 100644 (file)
@@ -1669,6 +1669,7 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \
                              stamp-cxx11-abi \
                              stamp-allocator-new
        @date=`cat ${toplevel_srcdir}/gcc/DATESTAMP` ;\
+       release=`sed 's/^\([0-9]*\).*$$/\1/' ${toplevel_srcdir}/gcc/BASE-VER` ;\
        ns_version=`cat stamp-namespace-version` ;\
        visibility=`cat stamp-visibility` ;\
        externtemplate=`cat stamp-extern-template` ;\
@@ -1680,6 +1681,7 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \
        ${CONFIG_HEADER} > /dev/null 2>&1 \
        && ldbl_compat='s,^#undef _GLIBCXX_LONG_DOUBLE_COMPAT$$,#define _GLIBCXX_LONG_DOUBLE_COMPAT 1,' ;\
        sed -e "s,define __GLIBCXX__,define __GLIBCXX__ $$date," \
+       -e "s,define _GLIBCXX_RELEASE,define _GLIBCXX_RELEASE $$release," \
        -e "s,define _GLIBCXX_INLINE_VERSION, define _GLIBCXX_INLINE_VERSION $$ns_version," \
        -e "s,define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY, define _GLIBCXX_HAVE_ATTRIBUTE_VISIBILITY $$visibility," \
        -e "s,define _GLIBCXX_EXTERN_TEMPLATE$$, define _GLIBCXX_EXTERN_TEMPLATE $$externtemplate," \
index 0cc1865294c2c46c01b921a5f1d5c5b9730685eb..bc1ab5fc17e1e7eb17a4771c6c68eabdaebec1f4 100644 (file)
 #ifndef _GLIBCXX_CXX_CONFIG_H
 #define _GLIBCXX_CXX_CONFIG_H 1
 
-// The current version of the C++ library in compressed ISO date format.
+// The major release number for the GCC release the C++ library belongs to.
+#define _GLIBCXX_RELEASE
+
+// The datestamp of the C++ library in compressed ISO date format.
 #define __GLIBCXX__
 
 // Macros for various attributes.
index 32a4e91cfb0bc014be56e685c858e21902ef55bc..645aa24f0358b3acad2680897747cd619f49f300 100644 (file)
@@ -25,7 +25,7 @@
 
 #include <vector>
 
-// { dg-error "multiple inlined namespaces" "" { target *-*-* } 350 }
+// { dg-error "multiple inlined namespaces" "" { target *-*-* } 0 }
 
 // "template argument 1 is invalid"
 // { dg-prune-output "tuple:993" }