{"thread":{"id":"21099","subject":"[PATCH 1/2] increase portability of NORETURN declarations","startedAt":"2009-09-30T18:05:49Z","lastAt":"2009-10-02T00:43:25Z","messageCount":5,"participants":["Erik Faye-Lund","Jeff King"],"isPatch":true,"patchVersion":1,"patchTotal":2},"messages":[{"id":"124035","messageId":"1254333950-2440-1-git-send-email-kusmabite@gmail.com","threadId":"21099","inReplyTo":null,"subject":"[PATCH 1/2] increase portability of NORETURN declarations","fromName":"Erik Faye-Lund","fromEmail":"kusmabite@googlemail.com","sentAt":"2009-09-30T18:05:49Z","receivedAt":"2009-09-30T18:05:49Z","isPatch":true,"sender":{"key":"kusmabite@gmail.com","avatar":"https://avatars.githubusercontent.com/u/47073?v=4"},"body":"Some compilers (including at least MSVC) supports NORETURN\non function declarations, but only before the function-name.\n\nThis patch makes it possible to define NORETURN to something\nmeaningful for those compilers.\n\nSigned-off-by: Erik Faye-Lund <kusmabite@gmail.com>\n---\n git-compat-util.h |    8 ++++----\n index-pack.c      |    4 ++--\n usage.c           |    6 +++---\n 3 files changed, 9 insertions(+), 9 deletions(-)\n\ndiff --git a/git-compat-util.h b/git-compat-util.h\nindex 9f941e4..33dd4f3 100644\n--- a/git-compat-util.h\n+++ b/git-compat-util.h\n@@ -177,13 +177,13 @@ extern char *gitbasename(char *);\n #endif\n \n /* General helper functions */\n-extern void usage(const char *err) NORETURN;\n-extern void die(const char *err, ...) NORETURN __attribute__((format (printf, 1, 2)));\n-extern void die_errno(const char *err, ...) NORETURN __attribute__((format (printf, 1, 2)));\n+extern NORETURN void usage(const char *err);\n+extern NORETURN void die(const char *err, ...) __attribute__((format (printf, 1, 2)));\n+extern NORETURN void die_errno(const char *err, ...) __attribute__((format (printf, 1, 2)));\n extern int error(const char *err, ...) __attribute__((format (printf, 1, 2)));\n extern void warning(const char *err, ...) __attribute__((format (printf, 1, 2)));\n \n-extern void set_die_routine(void (*routine)(const char *err, va_list params) NORETURN);\n+extern void set_die_routine(NORETURN void (*routine)(const char *err, va_list params));\n \n extern int prefixcmp(const char *str, const char *prefix);\n extern time_t tm_to_time_t(const struct tm *tm);\ndiff --git a/index-pack.c b/index-pack.c\nindex 340074f..b4f8278 100644\n--- a/index-pack.c\n+++ b/index-pack.c\n@@ -206,8 +206,8 @@ static void parse_pack_header(void)\n \tuse(sizeof(struct pack_header));\n }\n \n-static void bad_object(unsigned long offset, const char *format,\n-\t\t       ...) NORETURN __attribute__((format (printf, 2, 3)));\n+static NORETURN void bad_object(unsigned long offset, const char *format,\n+\t\t       ...) __attribute__((format (printf, 2, 3)));\n \n static void bad_object(unsigned long offset, const char *format, ...)\n {\ndiff --git a/usage.c b/usage.c\nindex b6aea45..0555ce6 100644\n--- a/usage.c\n+++ b/usage.c\n@@ -36,12 +36,12 @@ static void warn_builtin(const char *warn, va_list params)\n \n /* If we are in a dlopen()ed .so write to a global variable would segfault\n  * (ugh), so keep things static. */\n-static void (*usage_routine)(const char *err) NORETURN = usage_builtin;\n-static void (*die_routine)(const char *err, va_list params) NORETURN = die_builtin;\n+static NORETURN void (*usage_routine)(const char *err) = usage_builtin;\n+static NORETURN void (*die_routine)(const char *err, va_list params) = die_builtin;\n static void (*error_routine)(const char *err, va_list params) = error_builtin;\n static void (*warn_routine)(const char *err, va_list params) = warn_builtin;\n \n-void set_die_routine(void (*routine)(const char *err, va_list params) NORETURN)\n+void set_die_routine(NORETURN void (*routine)(const char *err, va_list params))\n {\n \tdie_routine = routine;\n }\n-- \n1.6.4.msysgit.0.17.g82372.dirty\n"},{"id":"124036","messageId":"1254333950-2440-2-git-send-email-kusmabite@gmail.com","threadId":"21099","inReplyTo":"1254333950-2440-1-git-send-email-kusmabite@gmail.com","subject":"[PATCH 2/2] add NORETURN_PTR for function pointers","fromName":"Erik Faye-Lund","fromEmail":"kusmabite@googlemail.com","sentAt":"2009-09-30T18:05:50Z","receivedAt":"2009-09-30T18:05:50Z","isPatch":true,"sender":{"key":"kusmabite@gmail.com","avatar":"https://avatars.githubusercontent.com/u/47073?v=4"},"body":"Some compilers (including at least MSVC and ARM RVDS) supports\nNORETURN on function declarations, but not on function pointers.\n\nThis patch makes it possible to define NORETURN for these compilers,\nby splitting the NORETURN macro into two - one for function\ndeclarations and one for function pointers.\n\nSigned-off-by: Erik Faye-Lund <kusmabite@gmail.com>\n---\n git-compat-util.h |    4 +++-\n usage.c           |    6 +++---\n 2 files changed, 6 insertions(+), 4 deletions(-)\n\ndiff --git a/git-compat-util.h b/git-compat-util.h\nindex 33dd4f3..ac7cc66 100644\n--- a/git-compat-util.h\n+++ b/git-compat-util.h\n@@ -169,8 +169,10 @@ extern char *gitbasename(char *);\n \n #ifdef __GNUC__\n #define NORETURN __attribute__((__noreturn__))\n+#define NORETURN_PTR __attribute__((__noreturn__))\n #else\n #define NORETURN\n+#define NORETURN_PTR\n #ifndef __attribute__\n #define __attribute__(x)\n #endif\n@@ -183,7 +185,7 @@ extern NORETURN void die_errno(const char *err, ...) __attribute__((format (prin\n extern int error(const char *err, ...) __attribute__((format (printf, 1, 2)));\n extern void warning(const char *err, ...) __attribute__((format (printf, 1, 2)));\n \n-extern void set_die_routine(NORETURN void (*routine)(const char *err, va_list params));\n+extern void set_die_routine(NORETURN_PTR void (*routine)(const char *err, va_list params));\n \n extern int prefixcmp(const char *str, const char *prefix);\n extern time_t tm_to_time_t(const struct tm *tm);\ndiff --git a/usage.c b/usage.c\nindex 0555ce6..c488f3a 100644\n--- a/usage.c\n+++ b/usage.c\n@@ -36,12 +36,12 @@ static void warn_builtin(const char *warn, va_list params)\n \n /* If we are in a dlopen()ed .so write to a global variable would segfault\n  * (ugh), so keep things static. */\n-static NORETURN void (*usage_routine)(const char *err) = usage_builtin;\n-static NORETURN void (*die_routine)(const char *err, va_list params) = die_builtin;\n+static NORETURN_PTR void (*usage_routine)(const char *err) = usage_builtin;\n+static NORETURN_PTR void (*die_routine)(const char *err, va_list params) = die_builtin;\n static void (*error_routine)(const char *err, va_list params) = error_builtin;\n static void (*warn_routine)(const char *err, va_list params) = warn_builtin;\n \n-void set_die_routine(NORETURN void (*routine)(const char *err, va_list params))\n+void set_die_routine(NORETURN_PTR void (*routine)(const char *err, va_list params))\n {\n \tdie_routine = routine;\n }\n-- \n1.6.4.msysgit.0.17.g82372.dirty\n"},{"id":"124072","messageId":"20091001081710.GC13436@coredump.intra.peff.net","threadId":"21099","inReplyTo":"1254333950-2440-2-git-send-email-kusmabite@gmail.com","subject":"Re: [PATCH 2/2] add NORETURN_PTR for function pointers","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2009-10-01T08:17:10Z","receivedAt":"2009-10-01T08:17:10Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Wed, Sep 30, 2009 at 06:05:50PM +0000, Erik Faye-Lund wrote:\n\n> Some compilers (including at least MSVC and ARM RVDS) supports\n> NORETURN on function declarations, but not on function pointers.\n> \n> This patch makes it possible to define NORETURN for these compilers,\n> by splitting the NORETURN macro into two - one for function\n> declarations and one for function pointers.\n\nThanks, this version and (your 1/2) both look sane to me. The only thing\nmissing are some Makefile knobs to tweak this, but I will assume that\nwill come as part of a later MSVC-compatibility series.\n\nShawn, this can go straight to 'next', if not 'master'. The changes\nshould be a no-op for most platforms. The only danger would be if there\nis some platform that doesn't like their NORETURN magic at the front of\nthe function declaration. But we only define it by default for __GNUC__,\nso I suspect we're safe.\n\nIn my tree as ef/msvc-noreturn.\n\n-Peff\n"},{"id":"124091","messageId":"40aa078e0910010957q4daf104cja218af3aa5424637@mail.gmail.com","threadId":"21099","inReplyTo":"20091001081710.GC13436@coredump.intra.peff.net","subject":"Re: [PATCH 2/2] add NORETURN_PTR for function pointers","fromName":"Erik Faye-Lund","fromEmail":"kusmabite@googlemail.com","sentAt":"2009-10-01T16:57:12Z","receivedAt":"2009-10-01T16:57:12Z","isPatch":true,"sender":{"key":"kusmabite@gmail.com","avatar":"https://avatars.githubusercontent.com/u/47073?v=4"},"body":"\nOn Thu, Oct 1, 2009 at 1:17 AM, Jeff King <peff@peff.net> wrote:\n> Thanks, this version and (your 1/2) both look sane to me. The only thing\n> missing are some Makefile knobs to tweak this, but I will assume that\n> will come as part of a later MSVC-compatibility series.\n\nThanks for reviewing :)\n\nI sent an additional patch to the msysgit mailing-list that defines\nNORETURN for MSVC, but I think it's better to keep it out of git.git\nfor a little while. There's no Makefile-knobs, it checks for _MSC_VER\n(similar to what's done for GCC).\n\n-- \nErik \"kusma\" Faye-Lund\nkusmabite@gmail.com\n(+47) 986 59 656\n"},{"id":"124106","messageId":"20091002004325.GA506@coredump.intra.peff.net","threadId":"21099","inReplyTo":"40aa078e0910010957q4daf104cja218af3aa5424637@mail.gmail.com","subject":"Re: [PATCH 2/2] add NORETURN_PTR for function pointers","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2009-10-02T00:43:25Z","receivedAt":"2009-10-02T00:43:25Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Thu, Oct 01, 2009 at 09:57:12AM -0700, Erik Faye-Lund wrote:\n\n> On Thu, Oct 1, 2009 at 1:17 AM, Jeff King <peff@peff.net> wrote:\n> > Thanks, this version and (your 1/2) both look sane to me. The only thing\n> > missing are some Makefile knobs to tweak this, but I will assume that\n> > will come as part of a later MSVC-compatibility series.\n> \n> Thanks for reviewing :)\n> \n> I sent an additional patch to the msysgit mailing-list that defines\n> NORETURN for MSVC, but I think it's better to keep it out of git.git\n> for a little while. There's no Makefile-knobs, it checks for _MSC_VER\n> (similar to what's done for GCC).\n\nThat sounds good. Thanks.\n\n-Peff\n"}]}