From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37803) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vl3cS-0005pY-Ax for qemu-devel@nongnu.org; Mon, 25 Nov 2013 16:23:06 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Vl3cM-0005yd-CF for qemu-devel@nongnu.org; Mon, 25 Nov 2013 16:23:00 -0500 Received: from mx1.redhat.com ([209.132.183.28]:11630) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vl3cM-0005yQ-3M for qemu-devel@nongnu.org; Mon, 25 Nov 2013 16:22:54 -0500 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id rAPLMqmw031250 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Mon, 25 Nov 2013 16:22:53 -0500 Date: Mon, 25 Nov 2013 23:26:08 +0200 From: "Michael S. Tsirkin" Message-ID: <20131125212608.GA13692@redhat.com> References: <1385379990-32093-1-git-send-email-mst@redhat.com> <1385379990-32093-4-git-send-email-mst@redhat.com> <5293B215.4030108@redhat.com> <20131125203152.GB12689@redhat.com> <5293B517.8090108@redhat.com> <20131125205404.GF12689@redhat.com> <5293BE8C.1060007@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5293BE8C.1060007@redhat.com> Subject: Re: [Qemu-devel] [PULL for-1.7 v2 3/6] acpi-build: fix build on glib < 2.22 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Richard Henderson Cc: Paolo Bonzini , qemu-devel@nongnu.org On Tue, Nov 26, 2013 at 07:18:04AM +1000, Richard Henderson wrote: > On 11/26/2013 06:54 AM, Michael S. Tsirkin wrote: > >>>>> + char s[] = "XXXX"; > >>>> > >>>> char s[5]; > >>>> > >> > >> Then do something like > >> > >> char s[sizeof("XXXX")]; > >> > >> so that the actual initialization doesn't happen. > > Why? As an optimization? > > How about failing to pessimize? > > With your initialization you're forcing the compiler to do: > > char s[5]; > memcpy(s, "XXXX\0", 5); > > possibly with the memcpy expanded inline. > Since we pass the address of S to vnsprintf, the compiler has to assume that > memory is read, and thus the initialization is needed. It can never be > optimized away. Who cares? It runs once on initialization. You worry about a cost of memcpy? FYI we are doing a crazy number of memory allocations in this code. I'm much more concerned with the fact that unlike the glib based variant we had before this is doing pointer math and relies on correct parameters to be passed to snprintf to avoid buffer overruns. I haven't found a way around that that will also keep old systems happy, and the snippet is tiny so maybe it's not too bad ... > > > I'm not quite sure this doesn't mean we are using VLA which I'd rather not. > > Would need to look at language spec ... simple initialization is shorter > > and more obviously correct. > > I'm quite sure that using sizeof does not imply a VLA. > > > > r~