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

Re: [PATCH] describe: fix --no-exact-match

From
René Scharfe <l.s.r@web.de>
Date
Aug 12, 2023, 05:11 UTC
Message-ID
<6e05309d-c2be-c949-ae83-c4dd3247e790@web.de>
In-Reply-To
<20230811182415.GC2816191@coredump.intra.peff.net>
Am 11.08.23 um 20:24 schrieb Jeff King:
Show 15 quoted lines
> On Fri, Aug 11, 2023 at 07:59:12PM +0200, René Scharfe wrote:
>
>>> we are defining an inline function with the explicit goal of passing it
>>> as a function pointer. I don't remember all of the standard's rules
>>> here. Are we guaranteed that it will create a linkable version if
>>> necessary?
>>
>> I don't see on which basis the compiler could refuse.  We can't expect
>> the function address to be the same across compilation units, but we
>> don't need that.  If there's a compiler that won't do it or a standards
>> verse that makes this dubious then I'd like to know very much.
>
> I seem to recall some quirks where an inline function that is not called
> directly is not required to be compiled at all, and the compiler can
> assume that there is a definition available in another translation unit.

C99 says in 6.7.4 Function specifiers: "It is unspecified whether a call to the function uses the inline definition or the external definition.", referring to functions with both types of definition. So a compiler could ignore the inline version for those.

> But I think that only applies when no storage-class specifier is
> provided. In this case, you said "static", so I think it's OK?

That's how I understand it as well -- there is no external version to choose and the compiler is not free to ignore the inline one.

Show 8 quoted lines
> It's possible I'm mis-remembering the issues, too. One problem is that
> pre-C99, you might end up with the opposite problem (a compiled function
> with visible linkage that conflicts with other translation units at link
> time). E.g. here:
>
>   https://stackoverflow.com/questions/51533082/clarification-over-internal-linkage-of-inline-functions-in-c/51533367#51533367
>
> But I think with "static" we should always be OK.
*nod*
Show 5 quoted lines
> Don't get me wrong, I like type checking. It's just that doing weird
> things with the language and pre-processor also carries a cost,
> especially in an open source project where new folks may show up and say
> "what the hell is this macro doing?". That's a friction for new
> developers, even if they're comfortable with idiomatic C.

Sure, but that ship has sailed in this specific case. Standard option parsing would use getopt or getopt_long, neither of which has void pointers. We already carry the cost of our OPT_ macros. Let's ease it.

Show 10 quoted lines
> That said...
>
>> A good example in parseopt: The patch below adds type checking to the
>> int options and yields 79 warning about incompatible pointers, because
>> enum pointers were used in integer option definitions.  The storage size
>> of enums depends on the member values and the compiler; an enum could be
>> char-sized.  When we access such a thing with an int pointer we write up
>> to seven bytes of garbage ... somewhere.  We better fix that.
>
> ...I do find this evidence compelling.
It's 3 instead of 7 bytes of garbage, but the point still stands..
René
Previous: Jeff KingNext: Jeff King
Message 64 of 66 in “ls-tree: fix --no-full-name”
  1. ls-tree: fix --no-full-nameRené Scharfe, Jul 18, 2023
  2. Junio C HamanoJul 18, 2023
  3. Junio C HamanoJul 18, 2023
  4. René ScharfeJul 21, 2023
  5. René ScharfeJul 21, 2023
  6. Junio C HamanoJul 21, 2023
  7. René ScharfeJul 21, 2023
  8. Junio C HamanoJul 21, 2023
  9. Junio C HamanoJul 21, 2023
  10. René ScharfeJul 24, 2023
  11. Junio C HamanoJul 24, 2023
  12. René ScharfeJul 24, 2023
  13. Junio C HamanoJul 24, 2023
  14. René ScharfeJul 28, 2023
  15. Phillip WoodJul 28, 2023
  16. René ScharfeJul 29, 2023
  17. Junio C HamanoJul 31, 2023
  18. Junio C HamanoAug 4, 2023
  19. Phillip WoodAug 4, 2023
  20. René ScharfeAug 5, 2023
  21. 0/5 show negatability of options in short helpRené Scharfe, Jul 24, 2023
  22. 1/5 subtree: disallow --no-{help,quiet,debug,branch,message}René Scharfe, Jul 24, 2023
  23. 2/5 t1502, docs: disallow --no-helpRené Scharfe, Jul 24, 2023
  24. 3/5 t1502: move optionspec help output to a fileRené Scharfe, Jul 24, 2023
  25. 4/5 t1502: test option negationRené Scharfe, Jul 24, 2023
  26. 5/5 parse-options: show negatability of options in short helpRené Scharfe, Jul 24, 2023
  27. 0/8 show negatability of options in short helpRené Scharfe, Aug 5, 2023
  28. 1/8 subtree: disallow --no-{help,quiet,debug,branch,message}René Scharfe, Aug 5, 2023
  29. 2/8 t1502, docs: disallow --no-helpRené Scharfe, Aug 5, 2023
  30. 3/8 t1502: move optionspec help output to a fileRené Scharfe, Aug 5, 2023
  31. 4/8 t1502: test option negationRené Scharfe, Aug 5, 2023
  32. 5/8 parse-options: show negatability of options in short helpRené Scharfe, Aug 5, 2023
  33. 6/8 parse-options: factor out usage_indent() and usage_padding()René Scharfe, Aug 5, 2023
  34. 7/8 parse-options: no --[no-]no-...René Scharfe, Aug 5, 2023
  35. 8/8 parse-options: simplify usage_padding()René Scharfe, Aug 5, 2023
  36. Junio C HamanoAug 5, 2023
  37. show-branch: fix --no-sparseRené Scharfe, Jul 21, 2023
  38. Junio C HamanoJul 21, 2023
  39. René ScharfeJul 21, 2023
  40. show-branch: disallow --no-{date,topo}-orderRené Scharfe, Jul 21, 2023
  41. reset: disallow --no-{mixed,soft,hard,merge,keep}René Scharfe, Jul 21, 2023
  42. pack-objects: fix --no-quietRené Scharfe, Jul 21, 2023
  43. pack-objects: fix --no-keep-true-parentsRené Scharfe, Jul 21, 2023
  44. Junio C HamanoJul 21, 2023
  45. branch: disallow --no-{all,remotes}René Scharfe, Jul 21, 2023
  46. am: unify definition of --keep-cr and --no-keep-crRené Scharfe, Jul 21, 2023
  47. describe: fix --no-exact-matchRené Scharfe, Jul 21, 2023
  48. Junio C HamanoJul 21, 2023
  49. Junio C HamanoJul 21, 2023
  50. Jeff KingAug 8, 2023
  51. Jeff KingAug 8, 2023
  52. Junio C HamanoAug 9, 2023
  53. Jeff KingAug 9, 2023
  54. René ScharfeAug 9, 2023
  55. Junio C HamanoAug 9, 2023
  56. Jeff KingAug 10, 2023
  57. Junio C HamanoAug 10, 2023
  58. René ScharfeAug 10, 2023
  59. Jeff KingAug 10, 2023
  60. René ScharfeAug 10, 2023
  61. Jeff KingAug 11, 2023
  62. René ScharfeAug 11, 2023
  63. Jeff KingAug 11, 2023
  64. René ScharfeAug 12, 2023
  65. Jeff KingAug 11, 2023
  66. René ScharfeAug 11, 2023

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.