From 74345dec226a46b8c7095fbc4c62474cb1e86bff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fran=C3=A7ois=20Dumont?= <fdumont@gcc.gnu.org>
Date: Mon, 6 Feb 2012 20:19:44 +0000
Subject: [PATCH] =?UTF-8?q?2012-02-06=20=20Fran=C3=A7ois=20Dumont=20=20<fd?=
 =?UTF-8?q?umont@gcc.gnu.org>?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

	* include/debug/safe_iterator.h
	(_Safe_iterator::_M_before_dereferenceable): Avoid the expensive
	creation of a _Safe_iterator instance to do the check.

From-SVN: r183941
---
 libstdc++-v3/ChangeLog                     | 6 ++++++
 libstdc++-v3/include/debug/safe_iterator.h | 8 ++++++--
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 799be7c5d4e5..95a9a181935f 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,9 @@
+2012-02-06  François Dumont  <fdumont@gcc.gnu.org>
+
+	* include/debug/safe_iterator.h
+	(_Safe_iterator::_M_before_dereferenceable): Avoid the expensive
+	creation of a _Safe_iterator instance to do the check.
+
 2012-02-05  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
 	PR libstdc++/52104
diff --git a/libstdc++-v3/include/debug/safe_iterator.h b/libstdc++-v3/include/debug/safe_iterator.h
index 016ec7b9418c..e7cfe9c9d53b 100644
--- a/libstdc++-v3/include/debug/safe_iterator.h
+++ b/libstdc++-v3/include/debug/safe_iterator.h
@@ -380,8 +380,12 @@ namespace __gnu_debug
       bool
       _M_before_dereferenceable() const
       {
-	_Self __it = *this;
-	return __it._M_incrementable() && (++__it)._M_dereferenceable();
+	if (this->_M_incrementable())
+	{
+	  _Iterator __base = base();
+	  return ++__base != _M_get_sequence()->_M_base().end();
+	}
+	return false;
       }
 
       /// Is the iterator incrementable?
-- 
GitLab