aboutsummaryrefslogtreecommitdiff
path: root/gcc/common
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2025-05-09 10:23:05 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2025-05-12 12:28:24 +0100
commitaf062510f4179aa7b13e632f77593deee8fe29f2 (patch)
tree780bd23dfa8096290137fcc8c9e85b12ee4d2a61 /gcc/common
parent203eb116ec60afba61c9fbe6cc4b54310ecda9de (diff)
downloadgcc-af062510f4179aa7b13e632f77593deee8fe29f2.zip
gcc-af062510f4179aa7b13e632f77593deee8fe29f2.tar.gz
gcc-af062510f4179aa7b13e632f77593deee8fe29f2.tar.bz2
libstdc++: Remove #warning from <ciso646> for C++17 [PR120187]
Although <ciso646> was removed from C++20, it was not formally deprecated in C++17. In contrast, <ctgmath>, <cstdalign>, etc. were formally deprecated in C++17 before being removed in C++20. Due to the widespread convention of including <ciso646> to detect implementation-specific macros (such as _GLIBCXX_RELEASE) it causes quite a lot of noise to issue deprecation warnings in C++17 mode. The recommendation to include <version> instead does work for recent compilers, even in C++17 mode, but isn't portable to older compilers that don't provide <version> yet (e.g. GCC 8). There are also potential objections to including <version> pre-C++20 when it wasn't defined by the standard. I don't have much sympathy for this position, because including <ciso646> for implementation-specific macros wasn't part of the C++17 standard either. It's no more non-standard to rely on <version> being present and defining those macros than to rely on <ciso646> defining them, and __has_include can be used to detect whether <version> is present. However, <ciso646> is being used in the wild by popular libraries like Abseil and we can't change versions of those that have already been released. This removes the #warning in <ciso646> for C++17 mode, so that we only emit diagnostics for C++20 and later. With this change, including <ciso646> in C++20 or later gives an error if _GLIBCXX_USE_DEPRECATED is defined to zero, otherwise a warning if -Wdeprecated is enabled, otherwise no diagnostic is given. This also adds "@since C++11 (removed in C++20)" to the Doxygen @file comments in all the relevant headers. The test for <ciso646> needs to be updated to no longer expect a warning for c++17_only. A new test is added to ensure that we get a warning instead of an error when -D_GLIBCXX_USE_DEPRECATED=0 is not used. libstdc++-v3/ChangeLog: PR libstdc++/120187 * include/c_global/ciso646: Only give deprecated warning for C++20 and later. * include/c_global/ccomplex: Add @since to Doxygen comment. * include/c_global/cstdalign: Likewise. * include/c_global/cstdbool: Likewise. * include/c_global/ctgmath: Likewise. * testsuite/18_support/headers/ciso646/macros.cc: Remove dg-warning for c++17_only effective target. * testsuite/18_support/headers/ciso646/macros-2.cc: New test. Reviewed-by: Tomasz KamiƄski <tkaminsk@redhat.com>
Diffstat (limited to 'gcc/common')
0 files changed, 0 insertions, 0 deletions