From: Pavel Roskin <proski@gnu.org>
To: Christopher Li <sparse@chrisli.org>
Cc: linux-sparse@vger.kernel.org
Subject: Re: Fixing "cast truncates bits from constant value"
Date: Wed, 19 Aug 2009 19:28:07 -0400 [thread overview]
Message-ID: <1250724487.23170.72.camel@mj> (raw)
In-Reply-To: <70318cbf0908182236h21c5d342o15bb658a445fc476@mail.gmail.com>
On Tue, 2009-08-18 at 22:36 -0700, Christopher Li wrote:
> On Mon, Aug 17, 2009 at 2:02 PM, Pavel Roskin<proski@gnu.org> wrote:
> > static unsigned short test(void)
> > {
> > return (unsigned short)~0x8000;
> > }
> >
> > test.c:3:32: warning: cast truncates bits from constant value (ffff7fff
> > becomes 7fff)
>
> That warning is legit because you ARE truncating constant value here.
I believe it's not, as it's an explicit cast. Sure, it's debatable
whether users want to be warned about it. But suppose we keep the
warning. What would be the fix for the above code? The only fix I can
think of would be to use AND with 0xffff:
static unsigned short test(void)
{
return (unsigned short)(0xffff & ~0x8000);
}
I think it's ugly. And that's what b43 developers think, so the sparce
warning remains unfixed.
> > 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;
>
> Sparse currently does not thing than just mark it as forced.
The whole point of having that attribute is to suppress warnings.
> > But this source doesn't:
> >
> > static unsigned short test(void)
> > {
> > return 0xfffff000U;
> > }
>
> I think sparse consider it as signed extend.
> Truncating all 0xffff is consider OK for the negative case.
That's wrong, as there are no signed integers involved in the above
example.
--
Regards,
Pavel Roskin
next prev parent reply other threads:[~2009-08-19 23:28 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
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 [this message]
2009-08-20 6:55 ` Christopher Li
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1250724487.23170.72.camel@mj \
--to=proski@gnu.org \
--cc=linux-sparse@vger.kernel.org \
--cc=sparse@chrisli.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).