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

Re: [PATCH 2/2] remove NORETURN from function pointers

From
Jeff King <peff@peff.net>
Date
Sep 14, 2009, 12:44 UTC
Message-ID
<20090914124428.GA9394@coredump.intra.peff.net>
In-Reply-To
<40aa078e0909140532q693a7f9qc3d9b1d354cac356@mail.gmail.com>
On Mon, Sep 14, 2009 at 02:32:38PM +0200, Erik Faye-Lund wrote:
Show 11 quoted lines
> Compiling the following code gives a warning about unreachable code,
> so it's clear that msvc doesn't simply ignore the directive. I'm not
> saying that anyone suggested otherwise, I just wanted to know for
> sure.
> 
> #include <stdio.h>
> #include <stdlib.h>
> void (*exit_fun)(int) = exit;
> void __declspec(noreturn) die(void);
> void die(void) { exit_fun(1); }
> int main(void) { printf("hello!\n"); die(); printf("world!\n"); }

Right. What I'm guessing is that it sees the noreturn on die(), but then doesn't actually look inside die to confirm that the noreturn is upheld. You could test that with:

#include <stdlib.h> void __declspec(noreturn) die(void); void die(void) { } int main(void) { die(); }

If it doesn't complain, then I am right. If it does, then it is something magic with the function pointer (presumably it decides that the function pointer could exit, so it stops the analysis and gives your code the benefit of the doubt).

Show 6 quoted lines
> First of all, MSVC is not the only compiler that behaves this way. In
> fact, GCC the only compiler I've found that behaves this way (but I
> must admit, I only tested 4 different compilers, one of which (Comeau)
> does not support noreturn at all AFAICT). That behavior might be
> crappy, but it's not "MSVC's crappy noreturn handling" - it's
> "non-GCC's crappy noreturn handling" :P
Well, OK, I'll accept that. ;)
Show 6 quoted lines
> The arguments against each solution I see are these:
> - abort() gives a run-time error instead of a compile-time warning, so
> breakage is trickier to detect (on GCC, which seems to be the target
> compiler for the vast majority of git-developers).
> - NORETURN_PTR might be bit big of a hammer for a small problem, as it
> "pollutes" the whole git source-tree instead of just usage.c.

I don't know that NORETURN_PTR pollutes the whole source-tree. At least no more than NORETURN does. The only functions that will need it are these two function pointers.

But I think your analysis is generally correct. It's not going to make a big difference which is chosen.

-Peff
Previous: Erik Faye-LundNext: Erik Faye-Lund
Message 8 of 17 in “remove NORETURN from function pointers”
  1. 2/2 remove NORETURN from function pointersErik Faye-Lund, Sep 14, 2009
  2. Jeff KingSep 14, 2009
  3. Erik Faye-LundSep 14, 2009
  4. Erik Faye-LundSep 14, 2009
  5. Jeff KingSep 14, 2009
  6. Jeff KingSep 14, 2009
  7. Erik Faye-LundSep 14, 2009
  8. Jeff KingSep 14, 2009
  9. Erik Faye-LundSep 14, 2009
  10. Johannes SixtSep 14, 2009
  11. Erik Faye-LundSep 14, 2009
  12. Johannes SixtSep 14, 2009
  13. Erik Faye-LundSep 14, 2009
  14. Johannes SixtSep 14, 2009
  15. Junio C HamanoSep 22, 2009
  16. Erik Faye-LundSep 25, 2009
  17. Erik Faye-LundSep 30, 2009

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.