]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix path::iterator post-increment and post-decrement
authorJonathan Wakely <jwakely@redhat.com>
Mon, 23 Oct 2017 17:47:05 +0000 (18:47 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Mon, 23 Oct 2017 17:47:05 +0000 (18:47 +0100)
Backport from mainline
2017-10-19  Jonathan Wakely  <jwakely@redhat.com>

* include/experimental/bits/fs_path.h (path::iterator++(int))
(path::iterator--(int)): Fix for paths with only one component.
* testsuite/experimental/filesystem/path/itr/traversal.cc: Test
post-increment and post-decrement.

From-SVN: r254017

libstdc++-v3/ChangeLog
libstdc++-v3/include/experimental/bits/fs_path.h
libstdc++-v3/testsuite/experimental/filesystem/path/itr/traversal.cc

index f803618da6f1b34b8158c54d0475b76b7f7a03c7..12f5fb9de0175937f0595e6a41b554d7eaec57f3 100644 (file)
@@ -1,3 +1,13 @@
+2017-10-23  Jonathan Wakely  <jwakely@redhat.com>
+
+       Backport from mainline
+       2017-10-19  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/experimental/bits/fs_path.h (path::iterator++(int))
+       (path::iterator--(int)): Fix for paths with only one component.
+       * testsuite/experimental/filesystem/path/itr/traversal.cc: Test
+       post-increment and post-decrement.
+
 2017-09-20  Jonathan Wakely  <jwakely@redhat.com>
 
        Backport from mainline
index 153d34557eefea92c3d35df8d972c4585d66676b..243b46c7b9c80bd6dd6ee3f0c5b14e3517293ba9 100644 (file)
@@ -724,10 +724,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CXX11
     pointer   operator->() const { return std::__addressof(**this); }
 
     iterator& operator++();
-    iterator  operator++(int) { auto __tmp = *this; ++_M_cur; return __tmp; }
+    iterator  operator++(int) { auto __tmp = *this; ++*this; return __tmp; }
 
     iterator& operator--();
-    iterator  operator--(int) { auto __tmp = *this; --_M_cur; return __tmp; }
+    iterator  operator--(int) { auto __tmp = *this; --*this; return __tmp; }
 
     friend bool operator==(const iterator& __lhs, const iterator& __rhs)
     { return __lhs._M_equals(__rhs); }
index 47f9f4343c04a7f37f004fefb825de2442e340cb..d822ed204eeca5bb9ed8e89b222ee9267e56c849 100644 (file)
@@ -78,9 +78,27 @@ test02()
   }
 }
 
+void
+test03()
+{
+  path paths[] = { "single", "multiple/elements" };
+  for (const path& p : paths)
+    for (auto iter = p.begin(); iter != p.end(); ++iter)
+    {
+      auto iter2 = iter;
+      ++iter;
+      iter2++;
+      VERIFY( iter2 == iter );
+      --iter;
+      iter2--;
+      VERIFY( iter2 == iter );
+    }
+}
+
 int
 main()
 {
   test01();
   test02();
+  test03();
 }