On Thu, May 21, 2009 at 5:20 AM, Richard Guenther
<richard.guent...@gmail.com> wrote:
> On Thu, May 21, 2009 at 7:10 AM, Ian Lance Taylor <i...@google.com> wrote:
>> Consider this C/C++ program:
>>
>> extern void **f1();
>> void f2(const char *p) { *(const void **)f1() = p; }
>>
>> If I compile this program with g++ -Wcast-qual, I get this:
>>
>> foo2.cc:2: warning: cast from type ‘void**’ to type ‘const void**’ casts 
>> away qualifiers
>>
>> If I compile this program with gcc -Wcast-qual, I do not get any
>> warning.
>>
>> Let's overlook the fact that the text of the g++ warning does not make
>> any sense--I am certainly not casting anything away.  The warning is
>> conceptually plausible for the same reason that you can't assign a
>> char** variable to a const char** variable without a cast.  At least, I
>> think one could make a argument that that is so.  But it's not a *very*
>> strong argument, as -Wcast-qual is documented to warn about cases where
>> a type qualifier is removed, and that is manifestly not happening here.
>> -Wcast-qual is useful to catch certain programming errors; I don't think
>> anybody adding a const qualifier is actually making a mistake.
>>
>> All that aside, I can't think of any reason that the C and C++ frontends
>> should be different in this regard.  Does anybody want to make an
>> argument for which of these choices we should adopt?
>>
>> 1) Keep things the same: the C++ frontend warns, the C frontend doesn't.
>>   Consistency is overrated.
>>
>> 2) Change the C frontend to also warn about this case, albeit with a
>>   better message.
>>
>> 3) Change the C++ frontend to not warn about this case.
>>
>> Of course in all cases the frontends should continue to warn about a
>> cast from const void** to void**.
>
> As the C++ warning doesn't make any sense I vote for 3).

Why do you think it the warning does not make sense?

The only you can go from void** to const void** is that you actually
remove the const in the middle of const void* const *.  That is
precisely what the cast is doing -- so the warning is legitimate.

-- Gaby

Reply via email to