From: Erik Faye-Lund Date: Mon, 14 Sep 2009 12:32:38 GMT Subject: Re: [PATCH 2/2] remove NORETURN from function pointers Message-ID: <40aa078e0909140532q693a7f9qc3d9b1d354cac356@mail.gmail.com> In-Reply-To: <20090914120311.GA17172@sigill.intra.peff.net> 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 #include 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"); } On Mon, Sep 14, 2009 at 2:03 PM, Jeff King wrote: > I think I am fine doing it either way. The NORETURN_PTR thing is a bit > more elegant to me, but that is maybe just my gcc snobiness. We > shouldn't have to change our code to accomodate MSVC's crappy noreturn > handling. ;) 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 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. Anyway, I don't care much what solution we pick. Either should work, and if someone has strong preference, I'm OK with it. -- Erik "kusma" Faye-Lund kusmabite@gmail.com (+47) 986 59 656