More testing for std::pair layout change
authorJonathan Wakely <jwakely@redhat.com>
Wed, 31 Oct 2018 12:58:45 +0000 (12:58 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Wed, 31 Oct 2018 12:58:45 +0000 (12:58 +0000)
* testsuite/20_util/pair/87822.cc: Test deeper nesting.

From-SVN: r265680

libstdc++-v3/ChangeLog
libstdc++-v3/testsuite/20_util/pair/87822.cc

index ac4df1ad515ed5caad6dfbacebd60966cd0f8660..9fb18de67d78bba53913ab79aabe97febd26ff45 100644 (file)
@@ -1,5 +1,7 @@
 2018-10-31  Jonathan Wakely  <jwakely@redhat.com>
 
+       * testsuite/20_util/pair/87822.cc: Test deeper nesting.
+
        PR libstdc++/87822
        * include/bits/stl_pair.h (__pair_base): Change to class template.
        (pair): Make base class type depend on template parameters.
index cd099d6f9f9fe0674a570ed851e2990f1733fde5..523d583f08a84afbb4d569d63b98af57c7c957e5 100644 (file)
@@ -26,6 +26,7 @@ test01()
   static_assert(sizeof(p) == (3 * sizeof(int)), "PR libstdc++/87822");
 #endif
   VERIFY( (void*)&p == (void*)&p.first );
+  VERIFY( (void*)&p == (void*)&p.first.first );
 }
 
 struct empty { };
@@ -40,8 +41,24 @@ test02()
   VERIFY( (void*)&p == (void*)&p.first );
 }
 
+void
+test03()
+{
+  typedef std::pair<int, int> int_pair;
+  typedef std::pair<int_pair, int_pair> int_pair_pair;
+  std::pair<int_pair_pair, int_pair_pair> p;
+#if __cplusplus >= 201103L
+  static_assert(sizeof(int_pair_pair) == (2 * sizeof(int_pair)), "nested");
+  static_assert(sizeof(p) == (2 * sizeof(int_pair_pair)), "nested again");
+#endif
+  VERIFY( (void*)&p == (void*)&p.first );
+  VERIFY( (void*)&p == (void*)&p.first.first );
+  VERIFY( (void*)&p == (void*)&p.first.first.first );
+}
+
 int main()
 {
   test01();
   test02();
+  test03();
 }