* Weirdness in parsing cpp macros
@ 2024-03-20 12:37 Ville Syrjälä
2024-03-20 13:24 ` Julia Lawall
2024-03-21 9:31 ` ✗ Fi.CI.BUILD: failure for " Patchwork
0 siblings, 2 replies; 10+ messages in thread
From: Ville Syrjälä @ 2024-03-20 12:37 UTC (permalink / raw)
To: cocci; +Cc: Julia Lawall, Jani Nikula, intel-gfx
Hi Julia et al,
In Linux drm/i915 driver (drivers/gpu/drm/i915/display/intel_pps.[ch])
we have a magic macro like this:
#define with_intel_pps_lock(dp, wf) \
for ((wf) = intel_pps_lock(dp); (wf); (wf) = intel_pps_unlock((dp), (wf)))
which we can then use like so:
...
with_intel_pps_lock(intel_dp, wakeref)
wait_panel_power_cycle(intel_dp);
...
If I try to modify this code with eg.
@@
@@
- wait_panel_power_cycle
+ _wait_panel_power_cycle
spatch fails to parse the macro and won't do the changes here.
While experimenting with this I discovered that
I can make it work by:
- moving the macro definition into intel_pps.c file from intel_pps.h
- renaming the macro to contain the substring "for" (doesn't matter
where in the macro name the "for" appears)
What on earth is going on here?
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Weirdness in parsing cpp macros
2024-03-20 12:37 Weirdness in parsing cpp macros Ville Syrjälä
@ 2024-03-20 13:24 ` Julia Lawall
2024-03-20 13:31 ` Ville Syrjälä
2024-03-21 9:31 ` ✗ Fi.CI.BUILD: failure for " Patchwork
1 sibling, 1 reply; 10+ messages in thread
From: Julia Lawall @ 2024-03-20 13:24 UTC (permalink / raw)
To: Ville Syrjälä; +Cc: cocci, Jani Nikula, intel-gfx
[-- Attachment #1: Type: text/plain, Size: 1037 bytes --]
On Wed, 20 Mar 2024, Ville Syrjälä wrote:
> Hi Julia et al,
>
> In Linux drm/i915 driver (drivers/gpu/drm/i915/display/intel_pps.[ch])
> we have a magic macro like this:
>
> #define with_intel_pps_lock(dp, wf) \
Did you try declaring:
iterator name with_intel_pps_lock;
up with the metavariables?
julia
> for ((wf) = intel_pps_lock(dp); (wf); (wf) = intel_pps_unlock((dp), (wf)))
>
>
> which we can then use like so:
> ...
> with_intel_pps_lock(intel_dp, wakeref)
> wait_panel_power_cycle(intel_dp);
> ...
>
>
> If I try to modify this code with eg.
>
> @@
> @@
> - wait_panel_power_cycle
> + _wait_panel_power_cycle
>
> spatch fails to parse the macro and won't do the changes here.
>
>
> While experimenting with this I discovered that
> I can make it work by:
> - moving the macro definition into intel_pps.c file from intel_pps.h
> - renaming the macro to contain the substring "for" (doesn't matter
> where in the macro name the "for" appears)
>
> What on earth is going on here?
>
> --
> Ville Syrjälä
> Intel
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Weirdness in parsing cpp macros
2024-03-20 13:24 ` Julia Lawall
@ 2024-03-20 13:31 ` Ville Syrjälä
2024-03-20 13:42 ` Jani Nikula
0 siblings, 1 reply; 10+ messages in thread
From: Ville Syrjälä @ 2024-03-20 13:31 UTC (permalink / raw)
To: Julia Lawall; +Cc: cocci, Jani Nikula, intel-gfx
On Wed, Mar 20, 2024 at 02:24:08PM +0100, Julia Lawall wrote:
>
>
> On Wed, 20 Mar 2024, Ville Syrjälä wrote:
>
> > Hi Julia et al,
> >
> > In Linux drm/i915 driver (drivers/gpu/drm/i915/display/intel_pps.[ch])
> > we have a magic macro like this:
> >
> > #define with_intel_pps_lock(dp, wf) \
>
> Did you try declaring:
>
> iterator name with_intel_pps_lock;
>
> up with the metavariables?
Nope, didn't know about that one.
Seems to work fine with that. Thanks.
>
> julia
>
>
> > for ((wf) = intel_pps_lock(dp); (wf); (wf) = intel_pps_unlock((dp), (wf)))
> >
> >
> > which we can then use like so:
> > ...
> > with_intel_pps_lock(intel_dp, wakeref)
> > wait_panel_power_cycle(intel_dp);
> > ...
> >
> >
> > If I try to modify this code with eg.
> >
> > @@
> > @@
> > - wait_panel_power_cycle
> > + _wait_panel_power_cycle
> >
> > spatch fails to parse the macro and won't do the changes here.
> >
> >
> > While experimenting with this I discovered that
> > I can make it work by:
> > - moving the macro definition into intel_pps.c file from intel_pps.h
> > - renaming the macro to contain the substring "for" (doesn't matter
> > where in the macro name the "for" appears)
> >
> > What on earth is going on here?
> >
> > --
> > Ville Syrjälä
> > Intel
> >
--
Ville Syrjälä
Intel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Weirdness in parsing cpp macros
2024-03-20 13:31 ` Ville Syrjälä
@ 2024-03-20 13:42 ` Jani Nikula
2024-03-20 14:39 ` Julia Lawall
0 siblings, 1 reply; 10+ messages in thread
From: Jani Nikula @ 2024-03-20 13:42 UTC (permalink / raw)
To: Ville Syrjälä, Julia Lawall; +Cc: cocci, intel-gfx
On Wed, 20 Mar 2024, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> On Wed, Mar 20, 2024 at 02:24:08PM +0100, Julia Lawall wrote:
>>
>>
>> On Wed, 20 Mar 2024, Ville Syrjälä wrote:
>>
>> > Hi Julia et al,
>> >
>> > In Linux drm/i915 driver (drivers/gpu/drm/i915/display/intel_pps.[ch])
>> > we have a magic macro like this:
>> >
>> > #define with_intel_pps_lock(dp, wf) \
>>
>> Did you try declaring:
>>
>> iterator name with_intel_pps_lock;
>>
>> up with the metavariables?
>
> Nope, didn't know about that one.
>
> Seems to work fine with that. Thanks.
Okay, I have another one wrt macros. :)
I'm trying to add a completely new variadic macro, but it fails at
"...". I've tried all sorts of things, but can't seem to be able to add
a literal "...".
I've tested that my cocci patch works with x's:
+ #define fn(p, xxx) foo(__VA_ARGS__)
but when I try to make it actually variadic like:
+ #define fn(p, ...) foo(__VA_ARGS__)
it gives me error. Is there a way to escape? Even tried to use a fresh
identifier vararg = "..."; but cocci made them unique with numbering
"...0" and "...1" etc.
BR,
Jani.
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Weirdness in parsing cpp macros
2024-03-20 13:42 ` Jani Nikula
@ 2024-03-20 14:39 ` Julia Lawall
2024-03-20 15:52 ` Jani Nikula
0 siblings, 1 reply; 10+ messages in thread
From: Julia Lawall @ 2024-03-20 14:39 UTC (permalink / raw)
To: Jani Nikula; +Cc: Ville Syrjälä, cocci, intel-gfx
[-- Attachment #1: Type: text/plain, Size: 1319 bytes --]
On Wed, 20 Mar 2024, Jani Nikula wrote:
> On Wed, 20 Mar 2024, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> > On Wed, Mar 20, 2024 at 02:24:08PM +0100, Julia Lawall wrote:
> >>
> >>
> >> On Wed, 20 Mar 2024, Ville Syrjälä wrote:
> >>
> >> > Hi Julia et al,
> >> >
> >> > In Linux drm/i915 driver (drivers/gpu/drm/i915/display/intel_pps.[ch])
> >> > we have a magic macro like this:
> >> >
> >> > #define with_intel_pps_lock(dp, wf) \
> >>
> >> Did you try declaring:
> >>
> >> iterator name with_intel_pps_lock;
> >>
> >> up with the metavariables?
> >
> > Nope, didn't know about that one.
> >
> > Seems to work fine with that. Thanks.
>
> Okay, I have another one wrt macros. :)
>
> I'm trying to add a completely new variadic macro, but it fails at
> "...". I've tried all sorts of things, but can't seem to be able to add
> a literal "...".
>
> I've tested that my cocci patch works with x's:
>
> + #define fn(p, xxx) foo(__VA_ARGS__)
>
> but when I try to make it actually variadic like:
>
> + #define fn(p, ...) foo(__VA_ARGS__)
>
> it gives me error. Is there a way to escape? Even tried to use a fresh
> identifier vararg = "..."; but cocci made them unique with numbering
> "...0" and "...1" etc.
Put 6 dots. It's silly, but ... is a Coccinelle thing, so we had to use
something else.
julia
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Weirdness in parsing cpp macros
2024-03-20 14:39 ` Julia Lawall
@ 2024-03-20 15:52 ` Jani Nikula
2024-03-20 16:44 ` Julia Lawall
2024-03-21 8:21 ` Julia Lawall
0 siblings, 2 replies; 10+ messages in thread
From: Jani Nikula @ 2024-03-20 15:52 UTC (permalink / raw)
To: Julia Lawall; +Cc: Ville Syrjälä, cocci, intel-gfx
On Wed, 20 Mar 2024, Julia Lawall <julia.lawall@inria.fr> wrote:
> On Wed, 20 Mar 2024, Jani Nikula wrote:
>> Okay, I have another one wrt macros. :)
>>
>> I'm trying to add a completely new variadic macro, but it fails at
>> "...". I've tried all sorts of things, but can't seem to be able to add
>> a literal "...".
>>
>> I've tested that my cocci patch works with x's:
>>
>> + #define fn(p, xxx) foo(__VA_ARGS__)
>>
>> but when I try to make it actually variadic like:
>>
>> + #define fn(p, ...) foo(__VA_ARGS__)
>>
>> it gives me error. Is there a way to escape? Even tried to use a fresh
>> identifier vararg = "..."; but cocci made them unique with numbering
>> "...0" and "...1" etc.
>
> Put 6 dots. It's silly, but ... is a Coccinelle thing, so we had to use
> something else.
I've tried, but it doesn't seem to work in the + side:
plus: parse error:
File "/tmp/tmp.clvvc812Qe", line 20, column 2, charpos = 254
around = '#define fn(',
whole content = + #define fn(p, ......) __fn(__to_intel_display(p), __VA_ARGS__)
BR,
Jani.
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Weirdness in parsing cpp macros
2024-03-20 15:52 ` Jani Nikula
@ 2024-03-20 16:44 ` Julia Lawall
2024-03-21 8:21 ` Julia Lawall
1 sibling, 0 replies; 10+ messages in thread
From: Julia Lawall @ 2024-03-20 16:44 UTC (permalink / raw)
To: Jani Nikula; +Cc: Ville Syrjälä, cocci, intel-gfx
On Wed, 20 Mar 2024, Jani Nikula wrote:
> On Wed, 20 Mar 2024, Julia Lawall <julia.lawall@inria.fr> wrote:
> > On Wed, 20 Mar 2024, Jani Nikula wrote:
> >> Okay, I have another one wrt macros. :)
> >>
> >> I'm trying to add a completely new variadic macro, but it fails at
> >> "...". I've tried all sorts of things, but can't seem to be able to add
> >> a literal "...".
> >>
> >> I've tested that my cocci patch works with x's:
> >>
> >> + #define fn(p, xxx) foo(__VA_ARGS__)
> >>
> >> but when I try to make it actually variadic like:
> >>
> >> + #define fn(p, ...) foo(__VA_ARGS__)
> >>
> >> it gives me error. Is there a way to escape? Even tried to use a fresh
> >> identifier vararg = "..."; but cocci made them unique with numbering
> >> "...0" and "...1" etc.
> >
> > Put 6 dots. It's silly, but ... is a Coccinelle thing, so we had to use
> > something else.
>
> I've tried, but it doesn't seem to work in the + side:
>
> plus: parse error:
> File "/tmp/tmp.clvvc812Qe", line 20, column 2, charpos = 254
> around = '#define fn(',
> whole content = + #define fn(p, ......) __fn(__to_intel_display(p), __VA_ARGS__)
OK, maybe it doesn't work for macros. I will take a look.
julia
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Weirdness in parsing cpp macros
2024-03-20 15:52 ` Jani Nikula
2024-03-20 16:44 ` Julia Lawall
@ 2024-03-21 8:21 ` Julia Lawall
2024-03-21 9:48 ` Jani Nikula
1 sibling, 1 reply; 10+ messages in thread
From: Julia Lawall @ 2024-03-21 8:21 UTC (permalink / raw)
To: Jani Nikula; +Cc: Ville Syrjälä, cocci, intel-gfx
On Wed, 20 Mar 2024, Jani Nikula wrote:
> On Wed, 20 Mar 2024, Julia Lawall <julia.lawall@inria.fr> wrote:
> > On Wed, 20 Mar 2024, Jani Nikula wrote:
> >> Okay, I have another one wrt macros. :)
> >>
> >> I'm trying to add a completely new variadic macro, but it fails at
> >> "...". I've tried all sorts of things, but can't seem to be able to add
> >> a literal "...".
> >>
> >> I've tested that my cocci patch works with x's:
> >>
> >> + #define fn(p, xxx) foo(__VA_ARGS__)
> >>
> >> but when I try to make it actually variadic like:
> >>
> >> + #define fn(p, ...) foo(__VA_ARGS__)
> >>
> >> it gives me error. Is there a way to escape? Even tried to use a fresh
> >> identifier vararg = "..."; but cocci made them unique with numbering
> >> "...0" and "...1" etc.
> >
> > Put 6 dots. It's silly, but ... is a Coccinelle thing, so we had to use
> > something else.
>
> I've tried, but it doesn't seem to work in the + side:
>
> plus: parse error:
> File "/tmp/tmp.clvvc812Qe", line 20, column 2, charpos = 254
> around = '#define fn(',
> whole content = + #define fn(p, ......) __fn(__to_intel_display(p), __VA_ARGS__)
A patch is below. I haven't tested it. It's working its way through the
CI at the moment, but I'll be offline for the rest of the day, so I don't
think I will be able to make it public today. But let me know if it
works.
In particular, I don't think it would work for matching or removals, but
it should work for additions.
julia
---
commit 8a637290a87ca86ca75a216ef1a7ac07c6a1fd57
Author: Julia Lawall <Julia.Lawall@inria.fr>
Date: Thu Mar 21 09:16:07 2024 +0100
allow ...... as a #define param in SmPL
diff --git a/parsing_cocci/parser_cocci_menhir.mly b/parsing_cocci/parser_cocci_menhir.mly
index afba9e8f..4f9be9a6 100644
--- a/parsing_cocci/parser_cocci_menhir.mly
+++ b/parsing_cocci/parser_cocci_menhir.mly
@@ -1614,6 +1614,12 @@ defineop:
dparam: mident { Ast0_cocci.wrap(Ast0_cocci.DParam $1) }
| TMetaDParamList { Parse_aux.meta_dparam_list $1 }
+| TVAEllipsis
+ { let id = ("...",$1) in
+ Ast0_cocci.wrap
+ (Ast0_cocci.DParam
+ (Ast0_cocci.wrap
+ (Ast0_cocci.Id(Parse_aux.id2mcode id)))) }
define_param_list_option:
empty_list_start(dparam,TEllipsis)
^ permalink raw reply related [flat|nested] 10+ messages in thread
* ✗ Fi.CI.BUILD: failure for Weirdness in parsing cpp macros
2024-03-20 12:37 Weirdness in parsing cpp macros Ville Syrjälä
2024-03-20 13:24 ` Julia Lawall
@ 2024-03-21 9:31 ` Patchwork
1 sibling, 0 replies; 10+ messages in thread
From: Patchwork @ 2024-03-21 9:31 UTC (permalink / raw)
To: Julia Lawall; +Cc: intel-gfx
== Series Details ==
Series: Weirdness in parsing cpp macros
URL : https://patchwork.freedesktop.org/series/131409/
State : failure
== Summary ==
Error: patch https://patchwork.freedesktop.org/api/1.0/series/131409/revisions/1/mbox/ not applied
Applying: Weirdness in parsing cpp macros
error: sha1 information is lacking or useless (parsing_cocci/parser_cocci_menhir.mly).
error: could not build fake ancestor
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 Weirdness in parsing cpp macros
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
Build failed, no error log produced
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Weirdness in parsing cpp macros
2024-03-21 8:21 ` Julia Lawall
@ 2024-03-21 9:48 ` Jani Nikula
0 siblings, 0 replies; 10+ messages in thread
From: Jani Nikula @ 2024-03-21 9:48 UTC (permalink / raw)
To: Julia Lawall; +Cc: Ville Syrjälä, cocci, intel-gfx
On Thu, 21 Mar 2024, Julia Lawall <julia.lawall@inria.fr> wrote:
> On Wed, 20 Mar 2024, Jani Nikula wrote:
>
>> On Wed, 20 Mar 2024, Julia Lawall <julia.lawall@inria.fr> wrote:
>> > On Wed, 20 Mar 2024, Jani Nikula wrote:
>> >> Okay, I have another one wrt macros. :)
>> >>
>> >> I'm trying to add a completely new variadic macro, but it fails at
>> >> "...". I've tried all sorts of things, but can't seem to be able to add
>> >> a literal "...".
>> >>
>> >> I've tested that my cocci patch works with x's:
>> >>
>> >> + #define fn(p, xxx) foo(__VA_ARGS__)
>> >>
>> >> but when I try to make it actually variadic like:
>> >>
>> >> + #define fn(p, ...) foo(__VA_ARGS__)
>> >>
>> >> it gives me error. Is there a way to escape? Even tried to use a fresh
>> >> identifier vararg = "..."; but cocci made them unique with numbering
>> >> "...0" and "...1" etc.
>> >
>> > Put 6 dots. It's silly, but ... is a Coccinelle thing, so we had to use
>> > something else.
>>
>> I've tried, but it doesn't seem to work in the + side:
>>
>> plus: parse error:
>> File "/tmp/tmp.clvvc812Qe", line 20, column 2, charpos = 254
>> around = '#define fn(',
>> whole content = + #define fn(p, ......) __fn(__to_intel_display(p), __VA_ARGS__)
>
> A patch is below. I haven't tested it. It's working its way through the
> CI at the moment, but I'll be offline for the rest of the day, so I don't
> think I will be able to make it public today. But let me know if it
> works.
Thanks for looking into it!
I'm afraid setting up an environment to try cocci patches is a bit too
involved for me right now.
BR,
Jani.
>
> In particular, I don't think it would work for matching or removals, but
> it should work for additions.
>
> julia
>
> ---
>
> commit 8a637290a87ca86ca75a216ef1a7ac07c6a1fd57
> Author: Julia Lawall <Julia.Lawall@inria.fr>
> Date: Thu Mar 21 09:16:07 2024 +0100
>
> allow ...... as a #define param in SmPL
>
> diff --git a/parsing_cocci/parser_cocci_menhir.mly b/parsing_cocci/parser_cocci_menhir.mly
> index afba9e8f..4f9be9a6 100644
> --- a/parsing_cocci/parser_cocci_menhir.mly
> +++ b/parsing_cocci/parser_cocci_menhir.mly
> @@ -1614,6 +1614,12 @@ defineop:
>
> dparam: mident { Ast0_cocci.wrap(Ast0_cocci.DParam $1) }
> | TMetaDParamList { Parse_aux.meta_dparam_list $1 }
> +| TVAEllipsis
> + { let id = ("...",$1) in
> + Ast0_cocci.wrap
> + (Ast0_cocci.DParam
> + (Ast0_cocci.wrap
> + (Ast0_cocci.Id(Parse_aux.id2mcode id)))) }
>
> define_param_list_option:
> empty_list_start(dparam,TEllipsis)
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2024-03-21 9:48 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-03-20 12:37 Weirdness in parsing cpp macros Ville Syrjälä
2024-03-20 13:24 ` Julia Lawall
2024-03-20 13:31 ` Ville Syrjälä
2024-03-20 13:42 ` Jani Nikula
2024-03-20 14:39 ` Julia Lawall
2024-03-20 15:52 ` Jani Nikula
2024-03-20 16:44 ` Julia Lawall
2024-03-21 8:21 ` Julia Lawall
2024-03-21 9:48 ` Jani Nikula
2024-03-21 9:31 ` ✗ Fi.CI.BUILD: failure for " Patchwork
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.