From: Phillip Wood <phillip.wood123@gmail.com>
To: Taylor Blau <me@ttaylorr.com>, phillip.wood@dunelm.org.uk
Cc: "Git Mailing List" <git@vger.kernel.org>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Subject: Re: Bug in unused.cocci?
Date: Fri, 12 May 2023 16:07:08 +0100 [thread overview]
Message-ID: <20d1d7a2-049e-cb53-e276-101995b7c9bb@gmail.com> (raw)
In-Reply-To: <ZF0B2Prhc7jsqa3p@nand.local>
Hi Taylor
On 11/05/2023 15:55, Taylor Blau wrote:
> On Thu, May 11, 2023 at 10:16:21AM +0100, Phillip Wood wrote:
>> I think this is due to a bug in unused.cocci. I'm not sure what is going
>> wrong and admittedly we're unlikely to see code where an strbuf is
>> initialized and then used it without calling any of the strbuf_* functions
>> within our main codebase but it would be nice if the rule could handle this.
>
> I don't think that this is a bug in unused.cocci, but rather a bug in
> spatch not being able to read t/unit-tests/test-lib.h.
>
> $ spatch --verbose-parsing --debug --all-includes \
> --sp-file contrib/coccinelle/unused.old.cocci \
> t/unit-tests/t-strbuf.c | grep '^bad'
> init_defs_builtins: /usr/lib/coccinelle/standard.h
> -----------------------------------------------------------------------
> processing semantic patch file: contrib/coccinelle/unused.old.cocci
> with isos from: /usr/lib/coccinelle/standard.iso
> -----------------------------------------------------------------------
>
> HANDLING: t/unit-tests/t-strbuf.c
> parse error
> = error in t/unit-tests/test-lib.h; set verbose_parsing for more info
> badcount: 3
> bad: int test_done(void);
> bad:
> bad: /* Skip the current test. */
> BAD:!!!!! __attribute__((format (printf, 1, 2)))
>
> From my understanding, spatch happily ignores macros that it doesn't
> understand (like check_uint() and check_char()), so to it this code
> looks like:
>
> struct strbuf buf;
>
> strbuf_init(&buf, 1024);
> strbuf_release(&buf);
>
> which it marks as unused and applies the patch. Strangely, if you force
> it to pre-process with the appropriate macro file by passing it
> explicitly, it works as expected:
>
> $ spatch --macro-file t/unit-tests/test-lib.h \
> --sp-file contrib/coccinelle/unused.old.cocci \
> t/unit-tests/t-strbuf.c
> init_defs_builtins: /usr/lib/coccinelle/standard.h
> init_defs: t/unit-tests/test-lib.h
> HANDLING: t/unit-tests/t-strbuf.c
>
> I am puzzled by spatch's behavior here.
Thanks for looking at this. It's good that unused.cocci is not buggy but
I agree spatch's behavior is confusing. There is a similar test for
STRBUF_INIT which looks like
static void t_static_init(void)
{
struct strbuf buf = STRBUF_INIT;
check_uint(buf.len, ==, 0);
check_uint(buf.alloc, ==, 0);
if (check(buf.buf == strbuf_slopbuf))
return; /* avoid de-referencing buf.buf */
check_char(buf.buf[0], ==, '\0');
}
Which does not trigger this issue. Presumably the "if" statement is
stopping it from ignoring the check() macro even though it does not
understand it. If I change t_dynamic_init() to do
if (!check(buf.buf != NULL))
check_char(buf.buf[0], ==, '\0');
Then the static analysis job passes but I don't think that is really
fixing the problem.
Thanks
Phillip
prev parent reply other threads:[~2023-05-12 15:07 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-11 9:16 Bug in unused.cocci? Phillip Wood
2023-05-11 14:55 ` Taylor Blau
2023-05-12 15:07 ` Phillip Wood [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20d1d7a2-049e-cb53-e276-101995b7c9bb@gmail.com \
--to=phillip.wood123@gmail.com \
--cc=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=me@ttaylorr.com \
--cc=phillip.wood@dunelm.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.