From: Jeff King <peff@peff.net>
To: Erik Faye-Lund <kusmabite@googlemail.com>
Cc: git@vger.kernel.org, Erik Faye-Lund <kusmabite@gmail.com>
Subject: Re: [PATCH 2/2] remove NORETURN from function pointers
Date: Mon, 14 Sep 2009 08:44:28 -0400 [thread overview]
Message-ID: <20090914124428.GA9394@coredump.intra.peff.net> (raw)
In-Reply-To: <40aa078e0909140532q693a7f9qc3d9b1d354cac356@mail.gmail.com>
On Mon, Sep 14, 2009 at 02:32:38PM +0200, Erik Faye-Lund wrote:
> 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).
> 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. ;)
> 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
next prev parent reply other threads:[~2009-09-14 12:44 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1252923370-5768-1-git-send-email-kusmabite@gmail.com>
2009-09-14 10:16 ` [PATCH 2/2] remove NORETURN from function pointers Erik Faye-Lund
2009-09-14 10:57 ` Jeff King
2009-09-14 11:40 ` Erik Faye-Lund
2009-09-14 11:56 ` Erik Faye-Lund
2009-09-14 12:04 ` Jeff King
2009-09-14 12:03 ` Jeff King
2009-09-14 12:32 ` Erik Faye-Lund
2009-09-14 12:44 ` Jeff King [this message]
2009-09-14 12:56 ` Erik Faye-Lund
2009-09-14 13:09 ` Johannes Sixt
2009-09-14 13:12 ` Erik Faye-Lund
2009-09-14 13:19 ` Johannes Sixt
2009-09-14 13:26 ` Erik Faye-Lund
2009-09-14 13:37 ` Johannes Sixt
2009-09-22 19:46 ` Junio C Hamano
2009-09-25 13:56 ` Erik Faye-Lund
2009-09-30 18:10 ` Erik Faye-Lund
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=20090914124428.GA9394@coredump.intra.peff.net \
--to=peff@peff.net \
--cc=git@vger.kernel.org \
--cc=kusmabite@gmail.com \
--cc=kusmabite@googlemail.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).