On Tue, Mar 12, 2019 at 12:20:49PM +0100, Julia Lawall wrote:
> 
> 
> On Tue, 12 Mar 2019, Maxime Ripard wrote:
> 
> > Hi Julia,
> >
> > Thanks a lot for your answer,
> >
> > On Tue, Mar 12, 2019 at 10:03:57AM +0100, Julia Lawall wrote:
> > > > @@
> > > > expression arg;
> > > > identifier fb;
> > > > @@
> > > > ...
> > > > struct drm_framebuffer *fb;
> > > > ...
> > > > - drm_format_num_planes(arg)
> > > > + fb->format->num_planes
> > > >
> > > > // This one seems to work in some cases, such as
> > > > // 
> > > > https://elixir.bootlin.com/linux/v5.0/source/drivers/gpu/drm/vc4/vc4_plane.c#L490
> > > > // But it also matches in cases where fb hasn't been properly assigned 
> > > > before, such as:
> > > > // 
> > > > https://elixir.bootlin.com/linux/v5.0/source/drivers/gpu/drm/tegra/fb.c#L142
> > >
> > > OK, it looks like what you want is:
> > >
> > > @@
> > > struct drm_framebuffer *fb;
> > > expression e.
> > > @@
> > >
> > > fb = e;
> > > <...
> > > - drm_format_num_planes(arg)
> > > + fb->format->num_planes
> > > ...>
> > >
> > > That is, you find an assignment of fb, and then anywhere after that you
> > > have a call, you can replace it.  This is <... ...> rather than <+...
> > > ...+> so that it can match several 0 or more occurrences.
> >
> > It looks however that there's a difference between a variable
> > declaration and assignment, and only an assignment.
> >
> > The snippet above doesn't match
> > https://elixir.bootlin.com/linux/v5.0/source/drivers/gpu/drm/vc4/vc4_plane.c#L490
> >
> > Whereas using
> >
> > @@
> > identifier fb;
> > expression arg;
> > expression e;
> > @@
> >
> >   struct drm_framebuffer *fb = e;
> >   <...
> > - drm_format_num_planes(arg)
> > + fb->format->num_planes
> >   ...>
> >
> > Work for example. Is there a way to match both an assignment and a
> > declaration + assignment?
> 
> Try dropping the ; on the assignment fb = e

It worked, thanks!

What is the meaning of the semi-column in that case? The obvious would
be that it matches an end of line, but given the behaviour shown
above, I guess there's more to it?

Maxime

-- 
Maxime Ripard, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

Attachment: signature.asc
Description: PGP signature

_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci

Reply via email to