@@ -318,7 +318,8 @@ namespace std
#if _GLIBCXX_USE_CXX11_ABI
namespace std
{
- inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
+ inline namespace __cxx11
+ __attribute__((__abi_tag__ ("cxx11"), __diagnose_as__("std"))) { }
}
namespace __gnu_cxx
{
@@ -74,22 +74,22 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
_GLIBCXX_END_NAMESPACE_CXX11
/// A string of @c char
- typedef basic_string<char> string;
+ typedef basic_string<char> string __attribute__((__diagnose_as__));
/// A string of @c wchar_t
- typedef basic_string<wchar_t> wstring;
+ typedef basic_string<wchar_t> wstring __attribute__((__diagnose_as__));
#ifdef _GLIBCXX_USE_CHAR8_T
/// A string of @c char8_t
- typedef basic_string<char8_t> u8string;
+ typedef basic_string<char8_t> u8string __attribute__((__diagnose_as__));
#endif
#if __cplusplus >= 201103L
/// A string of @c char16_t
- typedef basic_string<char16_t> u16string;
+ typedef basic_string<char16_t> u16string __attribute__((__diagnose_as__));
/// A string of @c char32_t
- typedef basic_string<char32_t> u32string;
+ typedef basic_string<char32_t> u32string __attribute__((__diagnose_as__));
#endif
/** @} */
@@ -1296,21 +1296,21 @@ namespace __gnu_debug
return __res;
}
- typedef basic_string<char> string;
+ typedef basic_string<char> string __attribute__((__diagnose_as__));
- typedef basic_string<wchar_t> wstring;
+ typedef basic_string<wchar_t> wstring __attribute__((__diagnose_as__));
#ifdef _GLIBCXX_USE_CHAR8_T
/// A string of @c char8_t
- typedef basic_string<char8_t> u8string;
+ typedef basic_string<char8_t> u8string __attribute__((__diagnose_as__));
#endif
#if __cplusplus >= 201103L
/// A string of @c char16_t
- typedef basic_string<char16_t> u16string;
+ typedef basic_string<char16_t> u16string __attribute__((__diagnose_as__));
/// A string of @c char32_t
- typedef basic_string<char32_t> u32string;
+ typedef basic_string<char32_t> u32string __attribute__((__diagnose_as__));
#endif
template<typename _CharT, typename _Traits, typename _Allocator>
@@ -73,13 +73,13 @@ inline namespace fundamentals_v2
// basic_string typedef names using polymorphic allocator in namespace
// std::experimental::pmr
- typedef basic_string<char> string;
+ typedef basic_string<char> string __attribute__((__diagnose_as__));
#ifdef _GLIBCXX_USE_CHAR8_T
- typedef basic_string<char8_t> u8string;
+ typedef basic_string<char8_t> u8string __attribute__((__diagnose_as__));
#endif
- typedef basic_string<char16_t> u16string;
- typedef basic_string<char32_t> u32string;
- typedef basic_string<wchar_t> wstring;
+ typedef basic_string<char16_t> u16string __attribute__((__diagnose_as__));
+ typedef basic_string<char32_t> u32string __attribute__((__diagnose_as__));
+ typedef basic_string<wchar_t> wstring __attribute__((__diagnose_as__));
} // namespace pmr
#endif
@@ -62,13 +62,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _CharT, typename _Traits = char_traits<_CharT>>
using basic_string = std::basic_string<_CharT, _Traits,
polymorphic_allocator<_CharT>>;
- using string = basic_string<char>;
+ using string [[__gnu__::__diagnose_as__]] = basic_string<char>;
#ifdef _GLIBCXX_USE_CHAR8_T
- using u8string = basic_string<char8_t>;
+ using u8string [[__gnu__::__diagnose_as__]] = basic_string<char8_t>;
#endif
- using u16string = basic_string<char16_t>;
- using u32string = basic_string<char32_t>;
- using wstring = basic_string<wchar_t>;
+ using u16string [[__gnu__::__diagnose_as__]] = basic_string<char16_t>;
+ using u32string [[__gnu__::__diagnose_as__]] = basic_string<char32_t>;
+ using wstring [[__gnu__::__diagnose_as__]] = basic_string<wchar_t>;
} // namespace pmr
template<typename _Str>
This hides the basic_string template in all diagnostics, reducing the signal-to-noise ratio significantly. It also hides the std::__cxx11 namespace from users by presenting it as std. Signed-off-by: Matthias Kretz <m.kretz@gsi.de> libstdc++-v3/ChangeLog: PR c++/89370 * include/bits/c++config: Diagnose std::__cxx11:: as std:: using the diagnose_as attribute. * include/bits/stringfwd.h: Add diagnose_as attribute to string, wstring, u8string, u16string, and u32string. * include/debug/string: Ditto. * include/experimental/string: Ditto. * include/std/string: Ditto. --- libstdc++-v3/include/bits/c++config | 3 ++- libstdc++-v3/include/bits/stringfwd.h | 10 +++++----- libstdc++-v3/include/debug/string | 10 +++++----- libstdc++-v3/include/experimental/string | 10 +++++----- libstdc++-v3/include/std/string | 10 +++++----- 5 files changed, 22 insertions(+), 21 deletions(-) -- ────────────────────────────────────────────────────────────────────────── Dr. Matthias Kretz https://mattkretz.github.io GSI Helmholtz Centre for Heavy Ion Research https://gsi.de stdₓ::simd ──────────────────────────────────────────────────────────────────────────