----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....

Reply via email to