{"id":806735,"url":"http://patchwork.ozlabs.org/api/1.0/patches/806735/?format=json","project":{"id":17,"url":"http://patchwork.ozlabs.org/api/1.0/projects/17/?format=json","name":"GNU Compiler Collection","link_name":"gcc","list_id":"gcc-patches.gcc.gnu.org","list_email":"gcc-patches@gcc.gnu.org","web_url":null,"scm_url":null,"webscm_url":null},"msgid":"<4026eacd-cb49-e756-c855-627cd5a40206@gmail.com>","date":"2017-08-28T19:12:45","name":"Rb_tree constructor optimization","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"e6d185cd7858f6bf4a62272ea67c4f6dc8be9980","submitter":{"id":9231,"url":"http://patchwork.ozlabs.org/api/1.0/people/9231/?format=json","name":"François Dumont","email":"frs.dumont@gmail.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/gcc/patch/4026eacd-cb49-e756-c855-627cd5a40206@gmail.com/mbox/","series":[{"id":245,"url":"http://patchwork.ozlabs.org/api/1.0/series/245/?format=json","date":"2017-08-28T19:12:45","name":"Rb_tree constructor optimization","version":1,"mbox":"http://patchwork.ozlabs.org/series/245/mbox/"}],"check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/806735/checks/","tags":{},"headers":{"Return-Path":"<gcc-patches-return-461047-incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":["patchwork-incoming@bilbo.ozlabs.org","mailing list gcc-patches@gcc.gnu.org"],"Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org\n\t(client-ip=209.132.180.131; helo=sourceware.org;\n\tenvelope-from=gcc-patches-return-461047-incoming=patchwork.ozlabs.org@gcc.gnu.org;\n\treceiver=<UNKNOWN>)","ozlabs.org; dkim=pass (1024-bit key;\n\tunprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org\n\theader.b=\"J95B/Aje\"; dkim-atps=neutral","sourceware.org; auth=none"],"Received":["from sourceware.org (server1.sourceware.org [209.132.180.131])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xh1d95lHWz9sP3\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 29 Aug 2017 05:13:16 +1000 (AEST)","(qmail 91533 invoked by alias); 28 Aug 2017 19:13:01 -0000","(qmail 91505 invoked by uid 89); 28 Aug 2017 19:13:00 -0000","from mail-wm0-f53.google.com (HELO mail-wm0-f53.google.com)\n\t(74.125.82.53) by sourceware.org\n\t(qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP;\n\tMon, 28 Aug 2017 19:12:50 +0000","by mail-wm0-f53.google.com with SMTP id t201so9350721wmt.1;\n\tMon, 28 Aug 2017 12:12:49 -0700 (PDT)","from [192.168.0.23] (arf62-1-82-237-250-248.fbx.proxad.net.\n\t[82.237.250.248]) by smtp.googlemail.com with ESMTPSA id\n\to98sm1353821wrb.30.2017.08.28.12.12.46 (version=TLS1_2\n\tcipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tMon, 28 Aug 2017 12:12:47 -0700 (PDT)"],"DomainKey-Signature":"a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender:from\n\t:subject:to:message-id:date:mime-version:content-type; q=dns; s=\n\tdefault; b=SxeHDptqYs2ZP4N84Vw+oUPeB81ZhPSWnBTMA+mEy3gEkCWlbueAP\n\tMlYE6eAagXGRZbPX/Q+cTVeAxjstC19j7EUQO6IP2KIMh57HJRnuZDStmRbTqgKo\n\tyZvWFPawbQRwvWCiFeOufeM8OIZYaQeaLBTBBcoMecmCRs1JvI9c+k=","DKIM-Signature":"v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id\n\t:list-unsubscribe:list-archive:list-post:list-help:sender:from\n\t:subject:to:message-id:date:mime-version:content-type; s=\n\tdefault; bh=R+WpsjHyjtK8CprXJ4ihg2ZuPdo=; b=J95B/AjeX8e/Q3Yz/Jwu\n\tLh1PG77g6tBvICuK0mizlxEyLaFOdEOKXqfriAH1TQyHy6h6cnG1yFUtdZIGbaj6\n\tb1R5IbVrSttL1BL04ZbfVYXFbc12pQvrJDRvC2AohiP6+dO6ONyUM7ToqY2/Pmp/\n\tUfRJ9LGKdcG5RP/+Bfh92ME=","Mailing-List":"contact gcc-patches-help@gcc.gnu.org; run by ezmlm","Precedence":"bulk","List-Id":"<gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<mailto:gcc-patches-unsubscribe-incoming=patchwork.ozlabs.org@gcc.gnu.org>","List-Archive":"<http://gcc.gnu.org/ml/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-help@gcc.gnu.org>","Sender":"gcc-patches-owner@gcc.gnu.org","X-Virus-Found":"No","X-Spam-SWARE-Status":"No, score=-24.5 required=5.0 tests=AWL, BAYES_00,\n\tFREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2,\n\tGIT_PATCH_3, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM,\n\tSPF_PASS autolearn=ham version=3.3.2 spammy=7046","X-Spam-User":"qpsmtpd, 2 recipients","X-HELO":"mail-wm0-f53.google.com","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net;\n\ts=20161025;\n\th=x-gm-message-state:from:subject:to:message-id:date:user-agent\n\t:mime-version:content-language;\n\tbh=Gqo1RyC3Qu6CAXbzlv+qlOtH58PJps/W8ZkVFy0Lx90=;\n\tb=pl8YfJPW1XQfcc/RqQjUNxuElo/+E5TeK+jVvVjqxtEKHIHkW8AjF4o7hMsno819UT\n\tsvrsG2q+R9rLQGLvvqimUtVd8LAQjsgfftMSxj6qJYBvVVBUFrQEjWLW3enVc8lSEhbk\n\tuu6Aphj2zRZJ+pB/u1hMb+rIueZNsImWU97//j5ATdT4JchK+9L2xEPiqMGXyZtvN4rw\n\tLRI92pHMzsSCy+3zpkLANPY9sYE4G2lzRBoQRR4uvlj4uulChkxpgdQqUZkw9MxyAX1q\n\t+wJ3Yn+ZQQABFLtl3EzPyRIZH3gIY0MqLX5uLy4FicwfWM/fCMlUcaHTVt5Vev/SKafR\n\tRFQQ==","X-Gm-Message-State":"AHYfb5iK3iQVmzta3nqGo2zb/b9LEnMiwUoE1wNyDt5o8PYqJhR3lC9W\tpB+YZi7HSt1qV4a0","X-Received":"by 10.28.191.22 with SMTP id p22mr909333wmf.48.1503947567694;\n\tMon, 28 Aug 2017 12:12:47 -0700 (PDT)","From":"=?utf-8?q?Fran=C3=A7ois_Dumont?= <frs.dumont@gmail.com>","Subject":"Rb_tree constructor optimization","To":"\"libstdc++@gcc.gnu.org\" <libstdc++@gcc.gnu.org>,\n\tgcc-patches <gcc-patches@gcc.gnu.org>","Message-ID":"<4026eacd-cb49-e756-c855-627cd5a40206@gmail.com>","Date":"Mon, 28 Aug 2017 21:12:45 +0200","User-Agent":"Mozilla/5.0 (X11; Linux x86_64;\n\trv:52.0) Gecko/20100101 Thunderbird/52.2.1","MIME-Version":"1.0","Content-Type":"multipart/mixed;\n\tboundary=\"------------DF6AF348BEA0B09A0D35618E\""},"content":"Hi\n\n     Here is the always equal allocator optimization for associative \ncontainers.\n\n     Tested under Linux x86_64.\n\n     * include/bits/stl_tree.h\n     (_Rb_tree_impl(_Rb_tree_impl&&, _Node_allocator&&)): New.\n     (_Rb_tree(_Rb_tree&&, _Node_allocator&&, std::true_type)): New.\n     (_Rb_tree(_Rb_tree&&, _Node_allocator&&, std::false_type)): Likewise.\n     (_Rb_tree(_Rb_tree&&, _Node_allocator&&)): Adapt, use latters.\n\n     Ok to apply ?\n\nFrançois","diff":"diff --git a/libstdc++-v3/include/bits/stl_tree.h b/libstdc++-v3/include/bits/stl_tree.h\nindex c2417f1..f7d34e3 100644\n--- a/libstdc++-v3/include/bits/stl_tree.h\n+++ b/libstdc++-v3/include/bits/stl_tree.h\n@@ -704,6 +704,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n #else\n \t  _Rb_tree_impl(_Rb_tree_impl&&) = default;\n \n+\t  _Rb_tree_impl(_Rb_tree_impl&& __x, _Node_allocator&& __a) noexcept\n+\t    : _Node_allocator(std::move(__a)),\n+\t      _Base_key_compare(std::move(__x)),\n+\t      _Rb_tree_header(std::move(__x))\n+\t  { }\n+\n \t  _Rb_tree_impl(const _Key_compare& __comp, _Node_allocator&& __a)\n \t  : _Node_allocator(std::move(__a)), _Base_key_compare(__comp)\n \t  { }\n@@ -947,7 +953,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n       : _Rb_tree(std::move(__x), _Node_allocator(__a))\n       { }\n \n-      _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a);\n+    private:\n+      _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a, std::true_type) noexcept\n+      : _M_impl(std::move(__x._M_impl), std::move(__a))\n+      { }\n+\n+      _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a, std::false_type);\n+\n+    public:\n+      _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a)\n+      : _Rb_tree(std::move(__x), std::move(__a),\n+\t\t typename _Alloc_traits::is_always_equal{})\n+      { }\n #endif\n \n       ~_Rb_tree() _GLIBCXX_NOEXCEPT\n@@ -1591,12 +1608,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n   template<typename _Key, typename _Val, typename _KeyOfValue,\n \t   typename _Compare, typename _Alloc>\n     _Rb_tree<_Key, _Val, _KeyOfValue, _Compare, _Alloc>::\n-    _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a)\n+    _Rb_tree(_Rb_tree&& __x, _Node_allocator&& __a, std::false_type __eq)\n     : _M_impl(__x._M_impl._M_key_compare, std::move(__a))\n     {\n-      using __eq = typename _Alloc_traits::is_always_equal;\n       if (__x._M_root() != nullptr)\n-\t_M_move_data(__x, __eq());\n+\t_M_move_data(__x, __eq);\n     }\n \n   template<typename _Key, typename _Val, typename _KeyOfValue,\n\n","prefixes":[]}