linux-sparse.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* bit-field notation and k&r function syntax
       [not found] <1231012108.4484627.1493830970281.JavaMail.zimbra@redhat.com>
@ 2017-05-03 17:10 ` Lance Richardson
  2017-05-03 23:07   ` Luc Van Oostenryck
  0 siblings, 1 reply; 6+ messages in thread
From: Lance Richardson @ 2017-05-03 17:10 UTC (permalink / raw)
  To: Linux-Sparse

I noticed when browsing parse.c that function parameters declared
using K&R syntax are parsed by calling declaration_list(), which
seems to have been intended for parsing structure member declarations
and accepts bit-field syntax.

So e.g. this is (incorrectly) accepted by sparse:

static int foo(b)
int b: 4;
{
	return 0;
}

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

* Re: bit-field notation and k&r function syntax
  2017-05-03 17:10 ` bit-field notation and k&r function syntax Lance Richardson
@ 2017-05-03 23:07   ` Luc Van Oostenryck
  2017-05-04  1:50     ` Christopher Li
  0 siblings, 1 reply; 6+ messages in thread
From: Luc Van Oostenryck @ 2017-05-03 23:07 UTC (permalink / raw)
  To: Lance Richardson; +Cc: Linux-Sparse

On Wed, May 03, 2017 at 01:10:12PM -0400, Lance Richardson wrote:
> I noticed when browsing parse.c that function parameters declared
> using K&R syntax are parsed by calling declaration_list(), which
> seems to have been intended for parsing structure member declarations
> and accepts bit-field syntax.
> 
> So e.g. this is (incorrectly) accepted by sparse:
> 
> static int foo(b)
> int b: 4;
> {
> 	return 0;
> }

Hmmm yes.
What's sparse use 'declaration_list()' for is not what correspond
to the standard's 'declaration-list' but is indeed for something
that should be reserved to structs.

Nice catch.

-- Luc

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

* Re: bit-field notation and k&r function syntax
  2017-05-03 23:07   ` Luc Van Oostenryck
@ 2017-05-04  1:50     ` Christopher Li
  2017-05-04  2:14       ` Luc Van Oostenryck
  0 siblings, 1 reply; 6+ messages in thread
From: Christopher Li @ 2017-05-04  1:50 UTC (permalink / raw)
  To: Luc Van Oostenryck; +Cc: Lance Richardson, Linux-Sparse

On Wed, May 3, 2017 at 7:07 PM, Luc Van Oostenryck
<luc.vanoostenryck@gmail.com> wrote:
> What's sparse use 'declaration_list()' for is not what correspond
> to the standard's 'declaration-list' but is indeed for something
> that should be reserved to structs.

I think declaration_list() can add one argument "is_struct" to
indicate parse for struct or not.
Only in struct mode we do the ":" and handle_bitfield() thing.
There are only two caller of declaration_list() so that should fix it.

Chris

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

* Re: bit-field notation and k&r function syntax
  2017-05-04  1:50     ` Christopher Li
@ 2017-05-04  2:14       ` Luc Van Oostenryck
  2017-05-04  3:20         ` Christopher Li
  0 siblings, 1 reply; 6+ messages in thread
From: Luc Van Oostenryck @ 2017-05-04  2:14 UTC (permalink / raw)
  To: Christopher Li; +Cc: Lance Richardson, Linux-Sparse

On Wed, May 03, 2017 at 09:50:14PM -0400, Christopher Li wrote:
> On Wed, May 3, 2017 at 7:07 PM, Luc Van Oostenryck
> <luc.vanoostenryck@gmail.com> wrote:
> > What's sparse use 'declaration_list()' for is not what correspond
> > to the standard's 'declaration-list' but is indeed for something
> > that should be reserved to structs.
> 
> I think declaration_list() can add one argument "is_struct" to
> indicate parse for struct or not.
> Only in struct mode we do the ":" and handle_bitfield() thing.
> There are only two caller of declaration_list() so that should fix it.

Yes, but there are a few details we need to look at.
For example, this should be supported (GCC does)
	int foo(a)
		register int a;
	{
		return a;
	}

But this we should warn on this
	struct s {
		register int a;
	};
And currently, we don't.

-- Luc

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

* Re: bit-field notation and k&r function syntax
  2017-05-04  2:14       ` Luc Van Oostenryck
@ 2017-05-04  3:20         ` Christopher Li
  2017-05-04 15:07           ` Luc Van Oostenryck
  0 siblings, 1 reply; 6+ messages in thread
From: Christopher Li @ 2017-05-04  3:20 UTC (permalink / raw)
  To: Luc Van Oostenryck; +Cc: Lance Richardson, Linux-Sparse

On Wed, May 3, 2017 at 10:14 PM, Luc Van Oostenryck
<luc.vanoostenryck@gmail.com> wrote:
>
> Yes, but there are a few details we need to look at.
> For example, this should be supported (GCC does)
>         int foo(a)
>                 register int a;
>         {
>                 return a;
>         }
>
> But this we should warn on this
>         struct s {
>                 register int a;
>         };
> And currently, we don't.

You are right. If we really want to fix that, we could add some field into
"struct decl_state" to indicate we are in the struct mode, some storage
specifier does not apply.

Can be a separate patch.

Chris

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

* Re: bit-field notation and k&r function syntax
  2017-05-04  3:20         ` Christopher Li
@ 2017-05-04 15:07           ` Luc Van Oostenryck
  0 siblings, 0 replies; 6+ messages in thread
From: Luc Van Oostenryck @ 2017-05-04 15:07 UTC (permalink / raw)
  To: Christopher Li; +Cc: Lance Richardson, Linux-Sparse

On Wed, May 03, 2017 at 11:20:24PM -0400, Christopher Li wrote:
> On Wed, May 3, 2017 at 10:14 PM, Luc Van Oostenryck
> <luc.vanoostenryck@gmail.com> wrote:
> >
> > Yes, but there are a few details we need to look at.
> > For example, this should be supported (GCC does)
> >         int foo(a)
> >                 register int a;
> >         {
> >                 return a;
> >         }
> >
> > But this we should warn on this
> >         struct s {
> >                 register int a;
> >         };
> > And currently, we don't.
> 
> You are right. If we really want to fix that, we could add some field into
> "struct decl_state" to indicate we are in the struct mode, some storage
> specifier does not apply.
> 
> Can be a separate patch.

It's not that I care much about pre-ANSI syntax but this 'register' allowed
inside a struct really bugs me.

I'll look for a patchs in the coming days.

-- Luc

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

end of thread, other threads:[~2017-05-04 15:07 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <1231012108.4484627.1493830970281.JavaMail.zimbra@redhat.com>
2017-05-03 17:10 ` bit-field notation and k&r function syntax Lance Richardson
2017-05-03 23:07   ` Luc Van Oostenryck
2017-05-04  1:50     ` Christopher Li
2017-05-04  2:14       ` Luc Van Oostenryck
2017-05-04  3:20         ` Christopher Li
2017-05-04 15:07           ` Luc Van Oostenryck

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).