Date: Mon, 17 Mar 2014 20:42:45 +0000 (UTC) From: Dimitry Andric <dim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r263272 - in stable: 10/contrib/libc++/include 9/contrib/libc++/include Message-ID: <201403172042.s2HKgjBa045383@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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/9/contrib/libc++/include/map stable/9/contrib/libc++/include/unordered_map Directory Properties: stable/9/contrib/libc++/ (props changed) Changes in other areas also in this revision: Modified: stable/10/contrib/libc++/include/map stable/10/contrib/libc++/include/unordered_map Directory Properties: stable/10/ (props changed) Modified: stable/9/contrib/libc++/include/map ============================================================================== --- stable/9/contrib/libc++/include/map Mon Mar 17 19:55:27 2014 (r263271) +++ stable/9/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/9/contrib/libc++/include/unordered_map ============================================================================== --- stable/9/contrib/libc++/include/unordered_map Mon Mar 17 19:55:27 2014 (r263271) +++ stable/9/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; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201403172042.s2HKgjBa045383>