Ian Lance Taylor writes: > Andrew Haley <aph@xxxxxxxxxx> writes: > > > Matthew Woehlke writes: > > > I have a code snippet that looks roughly like this: > > > > > > extern void my_free(void* ptr); > > > > > > int foo() > > > { > > > volatile long * bar; > > > ... > > > my_free(bar); > > > } > > > > > > This generates the warning 'cast discards qualifiers from pointer target > > > type' at my_free() (gcc 3.4.3). Other than disabling the flag that > > > generates the warning (in general I want these warnings!), how do I > > > suppress this? my_free is of course a free() wrapper, i.e. I don't see > > > any problems discarding the qualifier at this point. I already tried > > > this, which seems like it used to work (I am moving the code from one > > > project to another): > > > > > > my_free(void*)bar); > > > > > > ...and it doesn't help. > > > > I think this is bad practice. You'd be far better advised to malloc() > > the memory, keep a void* pointer to it, but cast to volatile long * > > when volatile is actually required. > > Note that this is also somewhat dubious on a strict reading of the C > standard. The standard discusss access to volatile qualified objects, > and it says that casting away volatile is undefined. The standard > says absolutely nothing about volatile qualified pointers to > non-volatile objects. So you should not expect any particular > semantics from a volatile-qualified pointer which points to a > non-volatile-qualified object. Mmmm, but let's say you want a dynamic shared buffer between threads. How else would you do it, other than a malloc() and a cast? Andrew.