All of lore.kernel.org
 help / color / mirror / Atom feed
* [Cocci] Matching function pointer typedef
@ 2018-05-15 20:36 Jerome Glisse
  2018-05-15 20:50 ` Håkon Løvdal
  2018-05-17 19:28 ` Julia Lawall
  0 siblings, 2 replies; 10+ messages in thread
From: Jerome Glisse @ 2018-05-15 20:36 UTC (permalink / raw)
  To: cocci

Hello,

I am trying to modify an function pointer typedef something like:

@@
@@
- typedef void (*toto_t)(int a, int b);
+ typedef void (*toto_t)(int a, int b, int c);

But it seems spatch or the semantic does not handle function pointer.
Or simply that typedef is not well handled in the first place. Thing
like:

@@
@@
- typedef int nombre;
+ typedef unsigned nombre;

also fails to work. But if typedef is use with struct then it works.
For instance:

@@
@@
- typedef struct {int a;} nombre;
+ typedef struct {unsigned a;} nombre;

Do work. Looking at declaration grammar i do not see why the former
does not work. I am using fedora 27 coccinelle 1.0.6 if that matters.

Is this a known limitation or am i writting it wrong ?

Thank you for any input on this,
J?r?me

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

* [Cocci] Matching function pointer typedef
  2018-05-15 20:36 [Cocci] Matching function pointer typedef Jerome Glisse
@ 2018-05-15 20:50 ` Håkon Løvdal
  2018-05-15 20:53   ` Julia Lawall
  2018-05-17 19:28 ` Julia Lawall
  1 sibling, 1 reply; 10+ messages in thread
From: Håkon Løvdal @ 2018-05-15 20:50 UTC (permalink / raw)
  To: cocci

It's been a while since I used coccinelle, but I think to remember that you must
(and in any case should) keep the non-changing parts outside of the
+/- lines, e.g.

@@
@@
         typedef void (*toto_t)(int a, int b
+        , int c
         );

etc

BR H?kon L?vdal

On 15 May 2018 at 22:36, Jerome Glisse <jglisse@redhat.com> wrote:
> Hello,
>
> I am trying to modify an function pointer typedef something like:
>
> @@
> @@
> - typedef void (*toto_t)(int a, int b);
> + typedef void (*toto_t)(int a, int b, int c);
>
> But it seems spatch or the semantic does not handle function pointer.
> Or simply that typedef is not well handled in the first place. Thing
> like:
>
> @@
> @@
> - typedef int nombre;
> + typedef unsigned nombre;
>
> also fails to work. But if typedef is use with struct then it works.
> For instance:
>
> @@
> @@
> - typedef struct {int a;} nombre;
> + typedef struct {unsigned a;} nombre;
>
> Do work. Looking at declaration grammar i do not see why the former
> does not work. I am using fedora 27 coccinelle 1.0.6 if that matters.
>
> Is this a known limitation or am i writting it wrong ?
>
> Thank you for any input on this,
> J?r?me
> _______________________________________________
> Cocci mailing list
> Cocci at systeme.lip6.fr
> https://systeme.lip6.fr/mailman/listinfo/cocci

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

* [Cocci] Matching function pointer typedef
  2018-05-15 20:50 ` Håkon Løvdal
@ 2018-05-15 20:53   ` Julia Lawall
  2018-05-15 21:26     ` Jerome Glisse
  0 siblings, 1 reply; 10+ messages in thread
From: Julia Lawall @ 2018-05-15 20:53 UTC (permalink / raw)
  To: cocci



On Tue, 15 May 2018, H?kon L?vdal wrote:

> It's been a while since I used coccinelle, but I think to remember that you must
> (and in any case should) keep the non-changing parts outside of the
> +/- lines, e.g.
>
> @@
> @@
>          typedef void (*toto_t)(int a, int b
> +        , int c
>          );

I think that typedefs of function pointers just don't work.  It is looking
for typedef type name;.  I can try to fix this.

julia

>
> etc
>
> BR H?kon L?vdal
>
> On 15 May 2018 at 22:36, Jerome Glisse <jglisse@redhat.com> wrote:
> > Hello,
> >
> > I am trying to modify an function pointer typedef something like:
> >
> > @@
> > @@
> > - typedef void (*toto_t)(int a, int b);
> > + typedef void (*toto_t)(int a, int b, int c);
> >
> > But it seems spatch or the semantic does not handle function pointer.
> > Or simply that typedef is not well handled in the first place. Thing
> > like:
> >
> > @@
> > @@
> > - typedef int nombre;
> > + typedef unsigned nombre;
> >
> > also fails to work. But if typedef is use with struct then it works.
> > For instance:
> >
> > @@
> > @@
> > - typedef struct {int a;} nombre;
> > + typedef struct {unsigned a;} nombre;
> >
> > Do work. Looking at declaration grammar i do not see why the former
> > does not work. I am using fedora 27 coccinelle 1.0.6 if that matters.
> >
> > Is this a known limitation or am i writting it wrong ?
> >
> > Thank you for any input on this,
> > J?r?me
> > _______________________________________________
> > Cocci mailing list
> > Cocci at systeme.lip6.fr
> > https://systeme.lip6.fr/mailman/listinfo/cocci
> _______________________________________________
> Cocci mailing list
> Cocci at systeme.lip6.fr
> https://systeme.lip6.fr/mailman/listinfo/cocci
>

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

* [Cocci] Matching function pointer typedef
  2018-05-15 20:53   ` Julia Lawall
@ 2018-05-15 21:26     ` Jerome Glisse
  2018-05-16 15:13       ` Jerome Glisse
  0 siblings, 1 reply; 10+ messages in thread
From: Jerome Glisse @ 2018-05-15 21:26 UTC (permalink / raw)
  To: cocci

On Tue, May 15, 2018 at 10:53:36PM +0200, Julia Lawall wrote:
> 
> 
> On Tue, 15 May 2018, H?kon L?vdal wrote:
> 
> > It's been a while since I used coccinelle, but I think to remember that you must
> > (and in any case should) keep the non-changing parts outside of the
> > +/- lines, e.g.
> >
> > @@
> > @@
> >          typedef void (*toto_t)(int a, int b
> > +        , int c
> >          );
> 
> I think that typedefs of function pointers just don't work.  It is looking
> for typedef type name;.  I can try to fix this.
> 

Above does not work either. The error is same roughly spatch complains
that it matches whole content ... I have a workaround, namely abusing
gcc which accept:

typedef void toto_t(int a, int b);

For function pointer typedef and then coccinelle on function declaration
do work. Still it would be nice if coccinelle can understand function
pointer typedef.

J?r?me

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

* [Cocci] Matching function pointer typedef
  2018-05-15 21:26     ` Jerome Glisse
@ 2018-05-16 15:13       ` Jerome Glisse
  2018-05-16 18:35         ` Julia Lawall
  0 siblings, 1 reply; 10+ messages in thread
From: Jerome Glisse @ 2018-05-16 15:13 UTC (permalink / raw)
  To: cocci

On Tue, May 15, 2018 at 05:26:59PM -0400, Jerome Glisse wrote:
> On Tue, May 15, 2018 at 10:53:36PM +0200, Julia Lawall wrote:
> > 
> > 
> > On Tue, 15 May 2018, H?kon L?vdal wrote:
> > 
> > > It's been a while since I used coccinelle, but I think to remember that you must
> > > (and in any case should) keep the non-changing parts outside of the
> > > +/- lines, e.g.
> > >
> > > @@
> > > @@
> > >          typedef void (*toto_t)(int a, int b
> > > +        , int c
> > >          );
> > 
> > I think that typedefs of function pointers just don't work.  It is looking
> > for typedef type name;.  I can try to fix this.
> > 
> 
> Above does not work either. The error is same roughly spatch complains
> that it matches whole content ... I have a workaround, namely abusing
> gcc which accept:
> 
> typedef void toto_t(int a, int b);
> 
> For function pointer typedef and then coccinelle on function declaration
> do work. Still it would be nice if coccinelle can understand function
> pointer typedef.

Ok my work around does work that well, it seems gcc allow this abuse
only for function parameter type, it can not be use as a type inside
a structure and so it doesn't cover all cases i am dealing with.

Is there a way to modify code using python inside coccinelle ? I have
seen example that print thing inside coccinelle but i haven't not seen
an example that use coccinelle to match something and then do changes
to the code using python.

I am guessing i can open the file and use the position information to
do that but was wondering if there is already helper provided for that.

Cheers,
J?r?me

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

* [Cocci] Matching function pointer typedef
  2018-05-16 15:13       ` Jerome Glisse
@ 2018-05-16 18:35         ` Julia Lawall
  0 siblings, 0 replies; 10+ messages in thread
From: Julia Lawall @ 2018-05-16 18:35 UTC (permalink / raw)
  To: cocci



On Wed, 16 May 2018, Jerome Glisse wrote:

> On Tue, May 15, 2018 at 05:26:59PM -0400, Jerome Glisse wrote:
> > On Tue, May 15, 2018 at 10:53:36PM +0200, Julia Lawall wrote:
> > >
> > >
> > > On Tue, 15 May 2018, H?kon L?vdal wrote:
> > >
> > > > It's been a while since I used coccinelle, but I think to remember that you must
> > > > (and in any case should) keep the non-changing parts outside of the
> > > > +/- lines, e.g.
> > > >
> > > > @@
> > > > @@
> > > >          typedef void (*toto_t)(int a, int b
> > > > +        , int c
> > > >          );
> > >
> > > I think that typedefs of function pointers just don't work.  It is looking
> > > for typedef type name;.  I can try to fix this.
> > >
> >
> > Above does not work either. The error is same roughly spatch complains
> > that it matches whole content ... I have a workaround, namely abusing
> > gcc which accept:
> >
> > typedef void toto_t(int a, int b);
> >
> > For function pointer typedef and then coccinelle on function declaration
> > do work. Still it would be nice if coccinelle can understand function
> > pointer typedef.
>
> Ok my work around does work that well, it seems gcc allow this abuse
> only for function parameter type, it can not be use as a type inside
> a structure and so it doesn't cover all cases i am dealing with.
>
> Is there a way to modify code using python inside coccinelle ? I have
> seen example that print thing inside coccinelle but i haven't not seen
> an example that use coccinelle to match something and then do changes
> to the code using python.
>
> I am guessing i can open the file and use the position information to
> do that but was wondering if there is already helper provided for that.

No, python code doesn't have access to the ast, which is an ocaml
structure.

julia

>
> Cheers,
> J?r?me
>

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

* [Cocci] Matching function pointer typedef
  2018-05-15 20:36 [Cocci] Matching function pointer typedef Jerome Glisse
  2018-05-15 20:50 ` Håkon Løvdal
@ 2018-05-17 19:28 ` Julia Lawall
  2018-05-17 19:48   ` Jerome Glisse
       [not found]   ` <51d95102-78ad-b56b-c470-c83d3f6c6b9b@users.sourceforge.net>
  1 sibling, 2 replies; 10+ messages in thread
From: Julia Lawall @ 2018-05-17 19:28 UTC (permalink / raw)
  To: cocci



On Tue, 15 May 2018, Jerome Glisse wrote:

> Hello,
>
> I am trying to modify an function pointer typedef something like:
>
> @@
> @@
> - typedef void (*toto_t)(int a, int b);
> + typedef void (*toto_t)(int a, int b, int c);

This now works.  Currently, you need to remove the whole typedef and add
it back, not just add the third argument as H?kon suggested.

>
> But it seems spatch or the semantic does not handle function pointer.
> Or simply that typedef is not well handled in the first place. Thing
> like:
>
> @@
> @@
> - typedef int nombre;
> + typedef unsigned nombre;

Was this just an experiment, or is it something you need?  I would imagine
that the problem is that "unsigned" as a type by itself is not well
supported.

julia

> also fails to work. But if typedef is use with struct then it works.
> For instance:
>
> @@
> @@
> - typedef struct {int a;} nombre;
> + typedef struct {unsigned a;} nombre;
>
> Do work. Looking at declaration grammar i do not see why the former
> does not work. I am using fedora 27 coccinelle 1.0.6 if that matters.
>
> Is this a known limitation or am i writting it wrong ?
>
> Thank you for any input on this,
> J?r?me
> _______________________________________________
> Cocci mailing list
> Cocci at systeme.lip6.fr
> https://systeme.lip6.fr/mailman/listinfo/cocci
>

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

* [Cocci] Matching function pointer typedef
  2018-05-17 19:28 ` Julia Lawall
@ 2018-05-17 19:48   ` Jerome Glisse
       [not found]   ` <51d95102-78ad-b56b-c470-c83d3f6c6b9b@users.sourceforge.net>
  1 sibling, 0 replies; 10+ messages in thread
From: Jerome Glisse @ 2018-05-17 19:48 UTC (permalink / raw)
  To: cocci

On Thu, May 17, 2018 at 09:28:00PM +0200, Julia Lawall wrote:
> 
> 
> On Tue, 15 May 2018, Jerome Glisse wrote:
> 
> > Hello,
> >
> > I am trying to modify an function pointer typedef something like:
> >
> > @@
> > @@
> > - typedef void (*toto_t)(int a, int b);
> > + typedef void (*toto_t)(int a, int b, int c);
> 
> This now works.  Currently, you need to remove the whole typedef and add
> it back, not just add the third argument as H?kon suggested.

Awesome ! :) Thank you for working on that.

> 
> >
> > But it seems spatch or the semantic does not handle function pointer.
> > Or simply that typedef is not well handled in the first place. Thing
> > like:
> >
> > @@
> > @@
> > - typedef int nombre;
> > + typedef unsigned nombre;
> 
> Was this just an experiment, or is it something you need?  I would imagine
> that the problem is that "unsigned" as a type by itself is not well
> supported.

This was just an experiment i did while trying to understand why my
function pointer typedef changes did not work. If i use long or any
basic ctype then it works.

Cheers,
J?r?me

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

* [Cocci] Matching function pointer typedef
       [not found]   ` <51d95102-78ad-b56b-c470-c83d3f6c6b9b@users.sourceforge.net>
@ 2018-05-18 16:53     ` Julia Lawall
       [not found]       ` <c3c0b202-ad2c-b53e-f73c-acc2baba9279@users.sourceforge.net>
  0 siblings, 1 reply; 10+ messages in thread
From: Julia Lawall @ 2018-05-18 16:53 UTC (permalink / raw)
  To: cocci



On Fri, 18 May 2018, SF Markus Elfring wrote:

> >> I am trying to modify an function pointer typedef something like:
> >>
> >> @@
> >> @@
> >> - typedef void (*toto_t)(int a, int b);
> >> + typedef void (*toto_t)(int a, int b, int c);
> >
> > This now works.
>
> Thanks for another software improvement.
> https://github.com/coccinelle/coccinelle/commit/80dcf751e411f1421fdcdb7119a95e50b841609c
>
>
> > Currently, you need to remove the whole typedef and add it back,
>
> I find this information inappropriate because such a source code replacement
> was attempted.

It was attempted before the change was made.

julia

>
>
> > not just add the third argument as H?kon suggested.
>
> It can be clearer to limit changes precisely while it can be also occasionally nice
> to extend the adjustment a bit so that the affected source code will be
> hopefully reformatted by the Coccinelle software in a desired way.
> https://github.com/coccinelle/coccinelle/issues/37
>
> Regards,
> Markus
>

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

* [Cocci] Matching function pointer typedef
       [not found]       ` <c3c0b202-ad2c-b53e-f73c-acc2baba9279@users.sourceforge.net>
@ 2018-05-18 17:54         ` Julia Lawall
  0 siblings, 0 replies; 10+ messages in thread
From: Julia Lawall @ 2018-05-18 17:54 UTC (permalink / raw)
  To: cocci



On Fri, 18 May 2018, SF Markus Elfring wrote:

> >>> Currently, you need to remove the whole typedef and add it back,
> >>
> >> I find this information inappropriate because such a source code replacement
> >> was attempted.
> >
> > It was attempted before the change was made.
>
> I get the impression from such feedback that another clarification
> would be useful about the granularity if each function parameter can be
> adjusted in data type definitions finally.

Concretely, the typedef name has to appear on the same line as all the
parameters.

julia

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

end of thread, other threads:[~2018-05-18 17:54 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-15 20:36 [Cocci] Matching function pointer typedef Jerome Glisse
2018-05-15 20:50 ` Håkon Løvdal
2018-05-15 20:53   ` Julia Lawall
2018-05-15 21:26     ` Jerome Glisse
2018-05-16 15:13       ` Jerome Glisse
2018-05-16 18:35         ` Julia Lawall
2018-05-17 19:28 ` Julia Lawall
2018-05-17 19:48   ` Jerome Glisse
     [not found]   ` <51d95102-78ad-b56b-c470-c83d3f6c6b9b@users.sourceforge.net>
2018-05-18 16:53     ` Julia Lawall
     [not found]       ` <c3c0b202-ad2c-b53e-f73c-acc2baba9279@users.sourceforge.net>
2018-05-18 17:54         ` Julia Lawall

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.