]> gcc.gnu.org Git - gcc.git/commitdiff
libstdc++: Fix return type of ranges::ssize for 128-bit integer [PR 100824]
authorJonathan Wakely <jwakely@redhat.com>
Sat, 5 Jun 2021 10:42:01 +0000 (11:42 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Fri, 11 Jun 2021 22:23:56 +0000 (23:23 +0100)
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:

PR libstdc++/100824
* include/bits/ranges_base.h (_SSize): Return signed type.
* testsuite/std/ranges/access/ssize.cc: Check with __int128.

(cherry picked from commit 96963713f6a648a0ed890450e02ebdd8ff583b14)

libstdc++-v3/include/bits/ranges_base.h
libstdc++-v3/testsuite/std/ranges/access/ssize.cc

index e3c3962bcd95e4273783492570ee6ff9105624fc..728d3ad2b257d46a6aefea4b27968e14a2143cee 100644 (file)
@@ -447,7 +447,7 @@ namespace ranges
 #if defined __STRICT_ANSI__ && defined __SIZEOF_INT128__
          // For strict-ansi modes integral<__int128> is false
          else if constexpr (__detail::__is_int128<__size_type>)
-           return static_cast<unsigned __int128>(__size);
+           return static_cast<__int128>(__size);
 #endif
          else // Must be one of __max_diff_type or __max_size_type.
            return __detail::__max_diff_type(__size);
index f53f462580cc7d9f77b24d8b40e6e4febaeb7408..fdbf245d036336d6177a7ec9dbcb6a04e6c2286b 100644 (file)
@@ -85,6 +85,20 @@ test06()
   VERIFY( s == 4 );
 }
 
+void
+test07()
+{
+#ifdef __SIZEOF_INT128__
+  struct R
+  {
+    unsigned __int128 size() const { return 4; }
+  };
+  R r;
+  static_assert( std::same_as<decltype(std::ranges::ssize(r)), __int128> );
+  VERIFY( std::ranges::ssize(r) == 4 );
+#endif
+}
+
 int
 main()
 {
@@ -93,4 +107,5 @@ main()
   test04();
   test05();
   test06();
+  test07();
 }
This page took 0.062499 seconds and 5 git commands to generate.