Richard Henderson <[EMAIL PROTECTED]> writes:

> On Thu, Nov 17, 2005 at 02:01:56PM -0800, Ian Lance Taylor wrote:
> > We traditionally do not warn about not using the value returned by a
> > function.  And I don't see why adding a cast should change that.
> > Intuitively, a cast by itself is not a computation.
> 
> In many cases is certainly is -- it's a value transformation;
> zero extension, floating-point conversion, etc.

Granted, although in this case the result is being thrown away
anyhow.

> My opinion is: why is the user asking for a value to be
> transformed if they're not going to use the result?

It's PR 24900.

>From linux/include/asm-i386/apic.h:

static __inline void apic_write_atomic(unsigned long reg, unsigned long v)
{
        xchg((volatile unsigned long *)(APIC_BASE+reg), v);
}

>From system.h:

#define xchg(ptr,v) ((__typeof__(*(ptr)))__xchg((unsigned 
long)(v),(ptr),sizeof(*(ptr))))

So the cast is there becaue __xchg returns a value, and the code wants
to get that value into the right type.  And presumably in some cases
the caller uses the value (or maybe not, I don't know).  But in this
particular case, the code does not use the value.

To me it seems that every step is reasonable: function returns value,
macro casts value to appropriate type, caller discards value.  What is
unreasonable is getting a -Wunused warning in this case.  I don't
think you should get a warning for not using the return value of a
function, at least not under -Wunused.

Ian

Reply via email to