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

Re: [PATCH 0/11] annotating unused function parameters

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Aug 19, 2022, 13:58 UTC
Message-ID
<220819.861qtc8gug.gmgdl@evledraar.gmail.com>
In-Reply-To
<Yv9gxqH6nK2KYnNj@coredump.intra.peff.net>
On Fri, Aug 19 2022, Jeff King wrote:
Show 12 quoted lines
> I've been carrying a bunch of patches (for almost 4 years now!) that get
> the code base compiling cleanly with -Wunused-parameter. This is a
> useful warning in my opinion; it found real bugs[1] when applied to the
> whole code base. So it would be nice to be able to turn it on all the
> time and get the same protection going forward.
> [...]
> And of course the most important question is: do we like this direction
> overall. This mass-annotation is a one-time pain. Going forward, the
> only work would be requiring people to annotate new functions they add
> (which again, is mostly going to be callbacks). IMHO it's worth it. In
> addition to possibly finding errors, I think the annotations serve as an
> extra clue for people reading the code about what the author intended.

I've known you've had this out-of-tree for a while, and really like that it's on the path to getting integrated.

But I have a hang-up about it, which is that I though __attribute__ (unused) didn't work like *that*.

What it means (and maybe only I find this counter-intuitive) is "trust me, this is unused, but don't check!", furthermore it causes the compiler to completely ignore the variable for the purposes of *all* warnings, not just the unused one.

I may still be missing something, but I wonder if this squashed in
wouldn't be much better:
	
	diff --git a/git-compat-util.h b/git-compat-util.h
	index a9690126bb0..e02e2fc3f6d 100644
	--- a/git-compat-util.h
	+++ b/git-compat-util.h
	@@ -190,9 +190,9 @@ struct strbuf;
	 #define _SGI_SOURCE 1
	 
	 #if defined(__GNUC__)
	-#define UNUSED(var) UNUSED_##var __attribute__((unused))
	+#define UNUSED(var) var __attribute__((deprecated ("not 'deprecated', but expected not to be used!")))
	 #else
	-#define UNUSED(var) UNUSED_##var
	+#define UNUSED(var) var
	 #endif
	 
	 #if defined(WIN32) && !defined(__CYGWIN__) /* Both MinGW and MSVC */

I.e. it's a bit counter-intuitive to mark these as "deprecated", but you can add a custom message (with both GCC and clang). Improvements to the message welcome.

Now as in this series we stay silent if the variable is not used, but we
*don't* stay silent if an UNUSED(var) is actually used, that'll now be
an error:
	
	xdiff/xdiffi.c: In function ‘xdl_call_hunk_func’:
	xdiff/xdiffi.c:981:9: error: ‘xe’ is deprecated: not 'deprecated', but expected not to be used! [-Werror=deprecated-declarations]
	  981 |         fprintf(stderr, "%p", (void*)xe);
	      |         ^~~~~~~

This also means that you don't need to rename the variable just to avoid "accidental" use, which also has the benefit of not tripping up the variable typo detection.

Previous: Jeff KingNext: Derrick Stolee
Message 13 of 22 in “annotating unused function parameters”
  1. 0/11 annotating unused function parametersJeff King, Aug 19, 2022
  2. 01/11 git-compat-util: add UNUSED macroJeff King, Aug 19, 2022
  3. 02/11 refs: mark unused each_ref_fn parametersJeff King, Aug 19, 2022
  4. 03/11 refs: mark unused reflog callback parametersJeff King, Aug 19, 2022
  5. 04/11 refs: mark unused virtual method parametersJeff King, Aug 19, 2022
  6. 05/11 transport: mark bundle transport_options as unusedJeff King, Aug 19, 2022
  7. 06/11 streaming: mark unused virtual method parametersJeff King, Aug 19, 2022
  8. 07/11 config: mark unused callback parametersJeff King, Aug 19, 2022
  9. 08/11 hashmap: mark unused callback parametersJeff King, Aug 19, 2022
  10. 09/11 mark unused read_tree_recursive() callback parametersJeff King, Aug 19, 2022
  11. 10/11 run-command: mark unused async callback parametersJeff King, Aug 19, 2022
  12. 11/11 is_path_owned_by_current_uid(): mark "report" parameter as unusedJeff King, Aug 19, 2022
  13. Ævar Arnfjörð BjarmasonAug 19, 2022
  14. Derrick StoleeAug 19, 2022
  15. Ævar Arnfjörð BjarmasonAug 19, 2022
  16. Jeff KingAug 20, 2022
  17. Junio C HamanoAug 20, 2022
  18. Derrick StoleeAug 22, 2022
  19. Ævar Arnfjörð BjarmasonAug 25, 2022
  20. Jeff KingAug 26, 2022
  21. Phillip WoodAug 26, 2022
  22. Junio C HamanoAug 26, 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.