This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: -Wcast-qual and casting away
- From: Richard Guenther <richard dot guenther at gmail dot com>
- To: Andreas Schwab <schwab at linux-m68k dot org>
- Cc: Ian Lance Taylor <iant at google dot com>, gcc at gcc dot gnu dot org
- Date: Thu, 21 May 2009 13:58:34 +0200
- Subject: Re: -Wcast-qual and casting away
- References: <m3r5yjxcpw.fsf@google.com> <m2y6sqk745.fsf@igel.home>
On Thu, May 21, 2009 at 1:50 PM, Andreas Schwab <schwab@linux-m68k.org> wrote:
> Ian Lance Taylor <iant@google.com> writes:
>
>> 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
>
> In a sense this warning is actually correct: this is storing a const
> char * into a void * object, which is where the qualifier is lost. ?IMHO
> having a warning for this questionable operation is a good thing.
I don't think so.
extern char **f1();
void f(char *p)
{
*(const char **)f1() = p;
}
warns the same. typeof(*(const char **)) should still be const char *.
For
extern const char **f1();
void f(char *p)
{
*(char **)f1() = p;
}
it warns with
t.C: In function ‘void f(char*)’:
t.C:4: warning: cast from type ‘const char**’ to type ‘char**’ casts
away constness
which makes sense.
Richard.