Re: [PATCH v4 4/6] coccinelle: add a rule to make "expression" code use FREE_AND_NULL()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jun 29, 2017 at 12:30 AM, René Scharfe <l.s.r@xxxxxx> wrote:
> Am 29.06.2017 um 00:21 schrieb René Scharfe:
>>
>> Am 28.06.2017 um 23:39 schrieb Ævar Arnfjörð Bjarmason:
>>>
>>>
>>> On Sun, Jun 25 2017, René Scharfe jotted:
>>>
>>>> Am 16.06.2017 um 21:43 schrieb Junio C Hamano:
>>>>>
>>>>> Ævar Arnfjörð Bjarmason  <avarab@xxxxxxxxx> writes:
>>>>>
>>>>>> A follow-up to the existing "type" rule added in an earlier
>>>>>> change. This catches some occurrences that are missed by the previous
>>>>>> rule.
>>>>>>
>>>>>> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx>
>>>>>> ---
>>>>>
>>>>>
>>>>> Hmph, I wonder if the "type" thing is really needed.  Over there,
>>>>> "ptr" is an expression and we can find "free(ptr); ptr = NULL" with
>>>>> the rule in this patch already, no?
>>>>
>>>>
>>>> Indeed.  How about this on top of master?
>>>>
>>>> -- >8 --
>>>> Subject: [PATCH] coccinelle: polish FREE_AND_NULL rules
>>>>
>>>> There are two rules for using FREE_AND_NULL in free.cocci, one for
>>>> pointer types and one for expressions.  Both cause coccinelle to remove
>>>> empty lines and even newline characters between replacements for some
>>>> reason; consecutive "free(x);/x=NULL;" sequences end up as multiple
>>>> FREE_AND_NULL calls on the same time.
>>>>
>>>> Remove the type rule, as the expression rule already covers it, and
>>>> rearrange the lines of the latter to place the addition of FREE_AND_NULL
>>>> between the removals, which causes coccinelle to leave surrounding
>>>> whitespace untouched.
>>>>
>>>> Signed-off-by: Rene Scharfe <l.s.r@xxxxxx>
>>>> ---
>>>>    contrib/coccinelle/free.cocci | 10 +---------
>>>>    1 file changed, 1 insertion(+), 9 deletions(-)
>>>>
>>>> diff --git a/contrib/coccinelle/free.cocci
>>>> b/contrib/coccinelle/free.cocci
>>>> index f2d97e755b..4490069df9 100644
>>>> --- a/contrib/coccinelle/free.cocci
>>>> +++ b/contrib/coccinelle/free.cocci
>>>> @@ -11,16 +11,8 @@ expression E;
>>>>      free(E);
>>>>
>>>>    @@
>>>> -type T;
>>>> -T *ptr;
>>>> -@@
>>>> -- free(ptr);
>>>> -- ptr = NULL;
>>>> -+ FREE_AND_NULL(ptr);
>>>> -
>>>> -@@
>>>>    expression E;
>>>>    @@
>>>>    - free(E);
>>>> -- E = NULL;
>>>>    + FREE_AND_NULL(E);
>>>> +- E = NULL;
>>>
>>>
>>> Late reply, sorry. What version of coccinelle are you running? I have
>>> 1.0.4 (from Debian) and can't get this to produce the same results as
>>> what I have.
>>>
>>> On top of next, I did:
>>>
>>>           Revert "*.[ch] refactoring: make use of the FREE_AND_NULL()
>>> macro"
>>>           Revert "coccinelle: make use of the "expression"
>>> FREE_AND_NULL() rule"
>>>           Revert "coccinelle: make use of the "type" FREE_AND_NULL()
>>> rule"
>>>
>>> And then generated the patch as usual with `make coccicheck`, and
>>> applied it. This has your change.
>>>
>>> I then re-applied the manual "*.[ch] refactoring" changes
>>>
>>> This results in this diff with next:
>>>
>>>       $ git diff --stat origin/next.. -- '*.[ch]'
>>>        builtin/am.c             |  3 ++-
>>>        builtin/clean.c          |  6 ++++--
>>>        builtin/config.c         |  6 ++++--
>>>        builtin/index-pack.c     |  6 ++++--
>>>        builtin/pack-objects.c   | 12 ++++++++----
>>>        builtin/unpack-objects.c |  3 ++-
>>>        fast-import.c            |  6 ++++--
>>>        http-push.c              | 24 ++++++++++++++++--------
>>>        http.c                   | 15 ++++++++++-----
>>>        imap-send.c              |  3 ++-
>>>        ref-filter.c             |  3 ++-
>>>        refs/files-backend.c     |  3 ++-
>>>        remote-testsvn.c         |  3 ++-
>>>        sequencer.c              |  3 ++-
>>>        sha1-array.c             |  3 ++-
>>>        sha1_file.c              |  3 ++-
>>>        transport-helper.c       | 27 ++++++++++++++++++---------
>>>        transport.c              |  3 ++-
>>>        tree-diff.c              |  6 ++++--
>>>        tree.c                   |  3 ++-
>>>        20 files changed, 94 insertions(+), 47 deletions(-)
>>>
>>> These are all cases where we now miss things that should use
>>> FREE_AND_NULL(), e.g.:
>>>
>>>       diff --git a/builtin/am.c b/builtin/am.c
>>>       index c973bd96dc..2f89338ed7 100644
>>>       --- a/builtin/am.c
>>>       +++ b/builtin/am.c
>>>       @@ -484,7 +484,8 @@ static int run_applypatch_msg_hook(struct
>>> am_state *state)
>>>               ret = run_hook_le(NULL, "applypatch-msg", am_path(state,
>>> "final-commit"), NULL);
>>>
>>>               if (!ret) {
>>>       -               FREE_AND_NULL(state->msg);
>>>       +               free(state->msg);
>>>       +               state->msg = NULL;
>>>                       if (read_commit_msg(state) < 0)
>>>                               die(_("'%s' was deleted by the
>>> applypatch-msg hook"),
>>>                                       am_path(state, "final-commit"));
>>>
>>> So it looks to me like removing the "type T" rule breaks a lot of
>>> things, but that the change you made to the expression rule is good, and
>>> we should do that for the "type" rule as well. Your commit says the
>>> "expression rule already covers it", but this doesn't seem to be the
>>> case at all.
>>>
>>> As an aside: Junio, did you mean to apply f8bb4631fb to next this way?
>>> Looks like a mis-applied scissor commit.
>>
>>
>> I can't reproduce that strange result with master, but get a scissors
>> line into the commit message as well.  The diff at the end looks
>> reasonable (contains just the manual stuff).  Here's what I did:
>
>
> On top of next it looks basically the same for me, only difference
> being several new converted cases in repository.c.
>
> Did you commit before diff?

At this point I have no idea what I did wrong, and no time/want to
really find out. But whatever it was was the wrong thing, obviously :)




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux