svn commit: r263272 - in stable: 10/contrib/libc++/include 9/contrib/libc++/include

Dimitry Andric dim at FreeBSD.org
Mon Mar 17 20:42:46 UTC 2014


Author: dim
Date: Mon Mar 17 20:42:45 2014
New Revision: 263272
URL: http://svnweb.freebsd.org/changeset/base/263272

Log:
  MFC r263120:
  
  Pull in r201021 from upstream libc++ trunk:
  
    Fix for PR18735 - self-assignment for map/multimap gives incorrect
    results in C++03
  
  (Please note: that is an LLVM PR identifier, not a FreeBSD one.)
  
  Reported by:	rakuco

Modified:
  stable/10/contrib/libc++/include/map
  stable/10/contrib/libc++/include/unordered_map
Directory Properties:
  stable/10/   (props changed)

Changes in other areas also in this revision:
Modified:
  stable/9/contrib/libc++/include/map
  stable/9/contrib/libc++/include/unordered_map
Directory Properties:
  stable/9/contrib/libc++/   (props changed)

Modified: stable/10/contrib/libc++/include/map
==============================================================================
--- stable/10/contrib/libc++/include/map	Mon Mar 17 19:55:27 2014	(r263271)
+++ stable/10/contrib/libc++/include/map	Mon Mar 17 20:42:45 2014	(r263272)
@@ -884,10 +884,12 @@ public:
 #if __cplusplus >= 201103L
             __tree_ = __m.__tree_;
 #else
-            __tree_.clear();
-            __tree_.value_comp() = __m.__tree_.value_comp();
-            __tree_.__copy_assign_alloc(__m.__tree_);
-            insert(__m.begin(), __m.end());
+            if (this != &__m) {
+                __tree_.clear();
+                __tree_.value_comp() = __m.__tree_.value_comp();
+                __tree_.__copy_assign_alloc(__m.__tree_);
+                insert(__m.begin(), __m.end());
+            }
 #endif
             return *this;
         }
@@ -1616,10 +1618,12 @@ public:
 #if __cplusplus >= 201103L
             __tree_ = __m.__tree_;
 #else
-            __tree_.clear();
-            __tree_.value_comp() = __m.__tree_.value_comp();
-            __tree_.__copy_assign_alloc(__m.__tree_);
-            insert(__m.begin(), __m.end());
+            if (this != &__m) {
+                __tree_.clear();
+                __tree_.value_comp() = __m.__tree_.value_comp();
+                __tree_.__copy_assign_alloc(__m.__tree_);
+                insert(__m.begin(), __m.end());
+            }
 #endif
             return *this;
         }

Modified: stable/10/contrib/libc++/include/unordered_map
==============================================================================
--- stable/10/contrib/libc++/include/unordered_map	Mon Mar 17 19:55:27 2014	(r263271)
+++ stable/10/contrib/libc++/include/unordered_map	Mon Mar 17 20:42:45 2014	(r263272)
@@ -831,12 +831,14 @@ public:
 #if __cplusplus >= 201103L
         __table_ = __u.__table_;
 #else
-        __table_.clear();
-        __table_.hash_function() = __u.__table_.hash_function();
-        __table_.key_eq() = __u.__table_.key_eq();
-        __table_.max_load_factor() = __u.__table_.max_load_factor();
-        __table_.__copy_assign_alloc(__u.__table_);
-        insert(__u.begin(), __u.end());
+        if (this != &__u) {
+            __table_.clear();
+            __table_.hash_function() = __u.__table_.hash_function();
+            __table_.key_eq() = __u.__table_.key_eq();
+            __table_.max_load_factor() = __u.__table_.max_load_factor();
+            __table_.__copy_assign_alloc(__u.__table_);
+            insert(__u.begin(), __u.end());
+        }
 #endif
         return *this;
     }
@@ -1567,12 +1569,14 @@ public:
 #if __cplusplus >= 201103L
         __table_ = __u.__table_;
 #else
-        __table_.clear();
-        __table_.hash_function() = __u.__table_.hash_function();
-        __table_.key_eq() = __u.__table_.key_eq();
-        __table_.max_load_factor() = __u.__table_.max_load_factor();
-        __table_.__copy_assign_alloc(__u.__table_);
-        insert(__u.begin(), __u.end());
+        if (this != &__u) {
+            __table_.clear();
+            __table_.hash_function() = __u.__table_.hash_function();
+            __table_.key_eq() = __u.__table_.key_eq();
+            __table_.max_load_factor() = __u.__table_.max_load_factor();
+            __table_.__copy_assign_alloc(__u.__table_);
+            insert(__u.begin(), __u.end());
+        }
 #endif
         return *this;
     }


More information about the svn-src-all mailing list