git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] ci: update 'static-analysis' to Ubuntu 22.04

From
Jeff King <peff@peff.net>
Date
Aug 26, 2022, 07:48 UTC
Message-ID
<Ywh6v8oo3nRl/O5h@coredump.intra.peff.net>
In-Reply-To
<220825.86ilmg4mil.gmgdl@evledraar.gmail.com>
On Thu, Aug 25, 2022 at 12:47:53PM +0200, Ævar Arnfjörð Bjarmason wrote:
> What's happening here is that coccinelle can no longer properly parse
> the file after the UNUSED() macros were applied to refs.c.
Ugh. Thanks for finding this.

I'm a little disappointed in coccinelle here. I mean, I get that it probably can't just use the output of "gcc -E"; it wants to see and transform the code as written (and maybe even translate macros). But if it doesn't understand the macros enough to see inside them, there are a lot of things it is going to get confused by.

A simple example like this shows that it doesn't really see inside them:
  $ cat foo.c
  #define foo(x) bar(x)
  static void fun(int x) { foo(x); }
  $ cat foo.cocci
  expression E;
  @@
  - bar(E);
  + changed(E);

I wonder what it makes of code-generation macros like for_each_string_list_item(). Or all of commit-slab.

Likewise, the manner in which it fails is unexpected. I could see it getting confused about the line in question, but why would that cause it to fail to see the of a strbuf in another function entirely?

I realize that pseudo-parsing C is an incredibly hard problem. But I also wonder how robust the tool actually is in practice. We've had a lot of mystery "now why didn't it catch this case" incidents over the years. Just running the tip of master with --verbose-parsing yields quite a few "bad" and "parse error" entries in the log. I wonder how much that contributes.

> We should probably coerce coccinelle into stopping in general if it's
> encountering "BAD:!!!!!" parse errors behind the scenes, as it clearly
> results in broken logic, but offhand (and from briefly browsing the
> manpage) I don't know a way to do that.

You could detect the BAD entries from the log and complain before returning the exit code to make. But since there are several instances already, I suspect it's a losing battle. We need some way to actually _fix_ them. And in the meantime, it does seem to _mostly_ work, as it clearly has some kind of resync logic.

> But the fix here isn't to delete unused.cocci, but to hold off on the
> UNUSEwork D() patches until we figure out how to make coccinelle jive with
> them.

Yeah, my general skepticism and disappointment above notwithstanding, this seems like the best path forward from here. I tried a few other tricks (like --macro-file and --iso-file), but if its parser chokes, I don't think there's much we can do about it. Even if we wrote a patch to coccinelle itself (and I have no interest in doing that myself), it would take a while to become available.

-Peff
Previous: Jeff KingNext: Junio C Hamano
Message 13 of 26 in “ci: update 'static-analysis' to Ubuntu 22.04”
  1. ci: update 'static-analysis' to Ubuntu 22.04Derrick Stolee via GitGitGadget, Aug 23, 2022
  2. Johannes SchindelinAug 24, 2022
  3. Junio C HamanoAug 24, 2022
  4. Junio C HamanoAug 24, 2022
  5. Derrick StoleeAug 25, 2022
  6. Junio C HamanoAug 25, 2022
  7. Ævar Arnfjörð BjarmasonAug 25, 2022
  8. Junio C HamanoAug 25, 2022
  9. 0/2 git-compat-util.h: change UNUSED(var) to UNUSEDÆvar Arnfjörð Bjarmason, Aug 25, 2022
  10. 2/2 git-compat-util.h: use "deprecated" for UNUSED variablesÆvar Arnfjörð Bjarmason, Aug 25, 2022
  11. 1/2 git-compat-util.h: use "UNUSED", not "UNUSED(var)"Ævar Arnfjörð Bjarmason, Aug 25, 2022
  12. Jeff KingAug 26, 2022
  13. Jeff KingAug 26, 2022
  14. Junio C HamanoAug 26, 2022
  15. Jeff KingAug 27, 2022
  16. Junio C HamanoAug 29, 2022
  17. Ævar Arnfjörð BjarmasonAug 29, 2022
  18. Jeff KingAug 31, 2022
  19. SZEDER GáborAug 31, 2022
  20. Ævar Arnfjörð BjarmasonAug 31, 2022
  21. Jeff KingAug 31, 2022
  22. Junio C HamanoAug 31, 2022
  23. SZEDER GáborAug 31, 2022
  24. Ævar Arnfjörð BjarmasonAug 31, 2022
  25. Ævar Arnfjörð BjarmasonAug 25, 2022
  26. Junio C HamanoAug 25, 2022

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.