* [committed] libstdc++: Add [[nodiscard]] to some std::locale functions
@ 2024-05-22 22:34 Jonathan Wakely
0 siblings, 0 replies; only message in thread
From: Jonathan Wakely @ 2024-05-22 22:34 UTC (permalink / raw)
To: libstdc++, gcc-patches
Tested x86_64-linux. Pushed to trunk.
-- >8 --
libstdc++-v3/ChangeLog:
* include/bits/locale_classes.h (locale::combine)
(locale::name, locale::operator==, locale::operator!=)
(locale::operator(), locale::classic): Add nodiscard
attribute.
* include/bits/locale_classes.tcc (has_facet, use_facet):
Likewise.
* testsuite/22_locale/locale/cons/12438.cc: Add dg-warning for
nodiscard diagnostic.
* testsuite/22_locale/locale/cons/2.cc: Cast use_facet
expression to void, to suppress diagnostic.
* testsuite/22_locale/locale/cons/unicode.cc: Likewise.
* testsuite/22_locale/locale/operations/2.cc: Add dg-warning.
---
libstdc++-v3/include/bits/locale_classes.h | 7 ++++++-
libstdc++-v3/include/bits/locale_classes.tcc | 2 ++
libstdc++-v3/testsuite/22_locale/locale/cons/12438.cc | 2 +-
libstdc++-v3/testsuite/22_locale/locale/cons/2.cc | 2 +-
libstdc++-v3/testsuite/22_locale/locale/cons/unicode.cc | 2 +-
libstdc++-v3/testsuite/22_locale/locale/operations/2.cc | 2 +-
6 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/libstdc++-v3/include/bits/locale_classes.h b/libstdc++-v3/include/bits/locale_classes.h
index a2e94217006..50a748066f1 100644
--- a/libstdc++-v3/include/bits/locale_classes.h
+++ b/libstdc++-v3/include/bits/locale_classes.h
@@ -240,6 +240,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @throw std::runtime_error if __other has no facet of type _Facet.
*/
template<typename _Facet>
+ _GLIBCXX_NODISCARD
locale
combine(const locale& __other) const;
@@ -248,7 +249,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @brief Return locale name.
* @return Locale name or "*" if unnamed.
*/
- _GLIBCXX_DEFAULT_ABI_TAG
+ _GLIBCXX_NODISCARD _GLIBCXX_DEFAULT_ABI_TAG
string
name() const;
@@ -269,6 +270,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @return True if other and this refer to the same locale instance, are
* copies, or have the same name. False otherwise.
*/
+ _GLIBCXX_NODISCARD
bool
operator==(const locale& __other) const throw();
@@ -279,6 +281,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @param __other The locale to compare against.
* @return ! (*this == __other)
*/
+ _GLIBCXX_NODISCARD
bool
operator!=(const locale& __other) const throw()
{ return !(this->operator==(__other)); }
@@ -300,6 +303,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @return True if collate<_Char> facet compares __s1 < __s2, else false.
*/
template<typename _Char, typename _Traits, typename _Alloc>
+ _GLIBCXX_NODISCARD
bool
operator()(const basic_string<_Char, _Traits, _Alloc>& __s1,
const basic_string<_Char, _Traits, _Alloc>& __s2) const;
@@ -321,6 +325,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
/**
* @brief Return reference to the C locale.
*/
+ _GLIBCXX_NODISCARD
static const locale&
classic();
diff --git a/libstdc++-v3/include/bits/locale_classes.tcc b/libstdc++-v3/include/bits/locale_classes.tcc
index 00eeb7dd9f8..c79574e58de 100644
--- a/libstdc++-v3/include/bits/locale_classes.tcc
+++ b/libstdc++-v3/include/bits/locale_classes.tcc
@@ -173,6 +173,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
* @return true if @p __loc contains a facet of type _Facet, else false.
*/
template<typename _Facet>
+ _GLIBCXX_NODISCARD
inline bool
has_facet(const locale& __loc) _GLIBCXX_USE_NOEXCEPT
{
@@ -202,6 +203,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdangling-reference"
template<typename _Facet>
+ _GLIBCXX_NODISCARD
inline const _Facet&
use_facet(const locale& __loc)
{
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/12438.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/12438.cc
index 7ff3a487745..4838e1ba693 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/12438.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/12438.cc
@@ -45,7 +45,7 @@ void test01(int iters)
locale loc2 = locale("");
VERIFY( !has_facet<MyFacet>(loc2) );
- loc1.combine<MyFacet>(loc2);
+ loc1.combine<MyFacet>(loc2); // { dg-warning "nodiscard" "" { target c++17 } }
VERIFY( false );
}
catch (std::runtime_error&)
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/2.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/2.cc
index 12478dbfdc2..dce150effea 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/2.cc
@@ -68,7 +68,7 @@ void test01()
{ VERIFY( false ); }
try
- { use_facet<gnu_facet>(loc02); }
+ { (void) use_facet<gnu_facet>(loc02); }
catch(bad_cast& obj)
{ VERIFY( true ); }
catch(...)
diff --git a/libstdc++-v3/testsuite/22_locale/locale/cons/unicode.cc b/libstdc++-v3/testsuite/22_locale/locale/cons/unicode.cc
index 24af4142cd9..98d744de91e 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/cons/unicode.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/cons/unicode.cc
@@ -79,7 +79,7 @@ void test01()
{ VERIFY( false ); }
try
- { use_facet<gnu_facet>(loc13); }
+ { (void) use_facet<gnu_facet>(loc13); }
catch(bad_cast& obj)
{ VERIFY( true ); }
catch(...)
diff --git a/libstdc++-v3/testsuite/22_locale/locale/operations/2.cc b/libstdc++-v3/testsuite/22_locale/locale/operations/2.cc
index 899535137ba..917adecac56 100644
--- a/libstdc++-v3/testsuite/22_locale/locale/operations/2.cc
+++ b/libstdc++-v3/testsuite/22_locale/locale/operations/2.cc
@@ -48,7 +48,7 @@ void test02()
// Derivation, MF check.
locale loc_gnu(loc_c, new gnu_collate);
gnu_count = 0;
- loc_gnu(s01, s02);
+ loc_gnu(s01, s02); // { dg-warning "nodiscard" "" { target c++17 } }
VERIFY( gnu_count == 1 );
}
--
2.45.1
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2024-05-22 22:34 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-22 22:34 [committed] libstdc++: Add [[nodiscard]] to some std::locale functions Jonathan Wakely
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).