linux-sparse.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Fixing "cast truncates bits from constant value"
@ 2009-08-17 21:02 Pavel Roskin
  2009-08-19  5:36 ` Christopher Li
  0 siblings, 1 reply; 4+ messages in thread
From: Pavel Roskin @ 2009-08-17 21:02 UTC (permalink / raw)
  To: linux-sparse

Hello!

There was a discussion in the linux-wireless mailing list about
silencing a sparse warning in the b43 driver:

http://marc.info/?t=125020183400006&r=1&w=2

It turns out the fixes for the warnings would make the code worse, not
better.  It's not what sparse should try to do.

Here's the simplest case:

static unsigned short test(void)
{
        return (unsigned short)~0x8000;
}

test.c:3:32: warning: cast truncates bits from constant value (ffff7fff
becomes 7fff)

A side note - "0x" should be used with user visible output.

0x8000 could be a constant defined in a header, so just using 0x7fff is
not an option, if the code readability is to be preserved.

In my opinion, an explicit cast should be enough to suppress the
warning.  But it's not.  Moreover, it's a "superwarning" that cannot
even be suppressed by the "force" attribute!  This source still
generates a warning:

static unsigned short test(void)
{
        return (__attribute__((force)) unsigned short)~0x8000;
}

There is also an inconsistency.  This source produces a warning:

static unsigned short test(void)
{
        return 0x0ffff000U;
}

But this source doesn't:

static unsigned short test(void)
{
        return 0xfffff000U;
}

In both cases bits are dropped and the value (a large positive number)
is changed.

I'm not currently subscribed to this list, please copy me.

-- 
Regards,
Pavel Roskin

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2009-08-20  6:55 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-17 21:02 Fixing "cast truncates bits from constant value" Pavel Roskin
2009-08-19  5:36 ` Christopher Li
2009-08-19 23:28   ` Pavel Roskin
2009-08-20  6:55     ` Christopher Li

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).