Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 17 Jul 2015 17:53:23 -0500
From:      Pedro Giffuni <pfg@FreeBSD.org>
To:        Peter Jeremy <peter@rulingia.com>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org,  svn-src-head@freebsd.org
Subject:   Re: svn commit: r285644 - head/contrib/sqlite3
Message-ID:  <55A98763.1030705@FreeBSD.org>
In-Reply-To: <20150717222631.GD36150@server.rulingia.com>
References:  <201507162207.t6GM7ECT009955@repo.freebsd.org> <20150717222631.GD36150@server.rulingia.com>

next in thread | previous in thread | raw e-mail | index | archive | help


On 07/17/15 17:26, Peter Jeremy wrote:
> On 2015-Jul-16 22:07:14 +0000, "Pedro F. Giffuni" <pfg@FreeBSD.org> wrote:
>> Log:
> ...
>>   sqlite: clean a couple of invocations of memcpy(3)
>>   
>>   Found almost accidentally by our native gcc when enhanced with
>>   FORTIFY_SOURCE.
> ...
>> -  memcpy((void *)&aHdr[1], (void *)&pWal->hdr, sizeof(WalIndexHdr));
>> +  memcpy((void *)&aHdr[1], (const void *)&pWal->hdr, sizeof(WalIndexHdr));
>>    walShmBarrier(pWal);
>> -  memcpy((void *)&aHdr[0], (void *)&pWal->hdr, sizeof(WalIndexHdr));
>> +  memcpy((void *)&aHdr[0], (const void *)&pWal->hdr, sizeof(WalIndexHdr));
> If the compiler complained about that, the compiler is broken.

The change was rather collateral (read cosmetical) to the real warning
which remains unfixed.

The compiler warning is this:
...
===> lib/libsqlite3 (obj,depend,all,install)
cc1: warnings being treated as errors
/scratch/tmp/pfg/head/lib/libsqlite3/../../contrib/sqlite3/sqlite3.c: In 
function 'walIndexWriteHdr':
/scratch/tmp/pfg/head/lib/libsqlite3/../../contrib/sqlite3/sqlite3.c:49490: 
warning: passing argument 1 of 'memcpy' discards qualifiers from pointer 
target type
/scratch/tmp/pfg/head/lib/libsqlite3/../../contrib/sqlite3/sqlite3.c:49492: 
warning: passing argument 1 of 'memcpy' discards qualifiers from pointer 
target type
--- sqlite3.So ---
*** [sqlite3.So] Error code 1
...

make[6]: stopped in /scratch/tmp/pfg/head/lib/libsqlite3

It only happens when using the experimental FORTIFY_SOURCE support [1],
and it only happens with gcc (the base one is the only tested).

Yes, I am suspecting a compiler bug but gcc has been really useful to find
bugs in fortify_source.

>   'const'
> is a promise to the caller that the given parameter will not be modified
> by the callee.  There's no requirement that the passed argument be const.
> As bde commented, the casts are all spurious.

And since this is contrib'ed code I am not going through the
code churn but upstream has been notified.

Pedro.

[1] https://reviews.freebsd.org/D3043



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?55A98763.1030705>