----Original Message----
>From: Joe Buck
>Sent: 11 July 2005 20:07
> On Mon, Jul 11, 2005 at 08:07:20PM +0200, Sylvester Diehl wrote:
>> why doesn't gcc (-Wall -Wuninitalized -O) detect
>> an uninialized variable passed by reference
>> decleared as <type> const *<name> ?
>
> There are no uninitialized variables in your program. For the
> kind of access checking you seem to be asking for, you'll need
> something like valgrind or mudflap.
>
>> int foo(int const *p)
>> {
>> static int sum = 0;
>>
>> sum += *p;
>> return sum;
>> }
>
> it happens that the memory that p points to is unitialized, but
> that is not what -Wuninitialized does. Similarly, in
>
>> int main(int argc, char **argv)
>> {
>> int k;
>>
>> return printf("%d\n", foo(&k));
>> }
>
> there are no uninitialized variables, as the address of k is
> perfectly well defined.
Indeed so, but I think Sylvester's point is that given that foo takes a
const pointer, the compiler could theoretically know that foo cannot
legitimately make any use of (dereference) the pointer value being passed
and could perhaps issue a warning.
Myself, I was surprised that the inliner didn't catch on to what was going
on and complain. I would have expected that, but it didn't even at O3.
cheers,
DaveK
--
Can't think of a witty .sigline today....