From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 52172 invoked by alias); 27 Apr 2017 17:37:28 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 52154 invoked by uid 89); 27 Apr 2017 17:37:28 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-15.9 required=5.0 tests=BAYES_00,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=Hx-languages-length:1899, friend, they're, theyre X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 27 Apr 2017 17:37:26 +0000 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D566D75726; Thu, 27 Apr 2017 17:37:27 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com D566D75726 Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=palves@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com D566D75726 Received: from [127.0.0.1] (ovpn04.gateway.prod.ext.ams2.redhat.com [10.39.146.4]) by smtp.corp.redhat.com (Postfix) with ESMTP id 389A993DA8; Thu, 27 Apr 2017 17:37:25 +0000 (UTC) Subject: Re: [PATCH 5/6] Use copy ctor in regcache_dup To: Yao Qi , gdb-patches@sourceware.org References: <1493152106-3246-1-git-send-email-yao.qi@linaro.org> <1493152106-3246-6-git-send-email-yao.qi@linaro.org> From: Pedro Alves Message-ID: Date: Thu, 27 Apr 2017 17:37:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <1493152106-3246-6-git-send-email-yao.qi@linaro.org> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-SW-Source: 2017-04/txt/msg00747.txt.bz2 On 04/25/2017 09:28 PM, Yao Qi wrote: > gdb: > > 2017-04-25 Yao Qi > > * regcache.c (regcache::regcache): New copy ctor. > (do_cooked_read): Moved above. > (regcache_dup): Use copy ctor. > * regcache.h (struct regcache): Declare copy ctor and remove > friend regcache_dup. > --- > index e6494a9..0d302a7 100644 > --- a/gdb/regcache.h > +++ b/gdb/regcache.h > @@ -240,6 +240,10 @@ public: > : regcache (gdbarch, aspace_, true) > {} > > + /* Copy constructor, create a readonly regcache from a non-readonly > + regcache. */ > + regcache (const regcache &); This one doesn't look right to me. This isn't a copy in the normal C++ object copy sense. The new object isn't semantically the same as the source. One can't use the new object the same way as the source regcache, they're not interchangeable. This is bound to generate confusion and problems. Considering patch #6, it'd make more sense to me to make that a separate constructor with tag dispatching, like: struct regcache { struct readonly_t {}; static constexpr readonly_t readonly {}; regcache (readonly_t, const regcache &src); // old regcache_dup }; Then used like: regcache ro_copy (regcache::readonly, src); or if you want, you could make that tag-based ctor private and add a factory function: struct regcache { private: struct readonly_t {}; regcache(readonly_t, const regcache &src); regcache(regcache &&src) { // implement this } // move ctor public: static regcache make_readonly_copy (const regcache &src) { return regcache (readonly_t{}, src); } }; Used like regcache ro_copy = regcache::make_readonly_copy (src); In any case, I think we should make sure to disable the regular copy methods since the type doesn't really support normal copy: regcache(const regcache &) = delete; void operator= (const regcache &) = delete; Thanks, Pedro Alves