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

[PATCH 2/2] add NORETURN_PTR for function pointers

From
Erik Faye-Lund <kusmabite@googlemail.com>
Date
Sep 30, 2009, 18:05 UTC
Message-ID
<1254333950-2440-2-git-send-email-kusmabite@gmail.com>
In-Reply-To
<1254333950-2440-1-git-send-email-kusmabite@gmail.com>

Some compilers (including at least MSVC and ARM RVDS) supports NORETURN on function declarations, but not on function pointers.

This patch makes it possible to define NORETURN for these compilers, by splitting the NORETURN macro into two - one for function declarations and one for function pointers.

Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
---
 git-compat-util.h |    4 +++-
 usage.c           |    6 +++---
 2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/git-compat-util.h b/git-compat-util.h
index 33dd4f3..ac7cc66 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -169,8 +169,10 @@ extern char *gitbasename(char *);
 
 #ifdef __GNUC__
 #define NORETURN __attribute__((__noreturn__))
+#define NORETURN_PTR __attribute__((__noreturn__))
 #else
 #define NORETURN
+#define NORETURN_PTR
 #ifndef __attribute__
 #define __attribute__(x)
 #endif
@@ -183,7 +185,7 @@ extern NORETURN void die_errno(const char *err, ...) __attribute__((format (prin
 extern int error(const char *err, ...) __attribute__((format (printf, 1, 2)));
 extern void warning(const char *err, ...) __attribute__((format (printf, 1, 2)));
 
-extern void set_die_routine(NORETURN void (*routine)(const char *err, va_list params));
+extern void set_die_routine(NORETURN_PTR void (*routine)(const char *err, va_list params));
 
 extern int prefixcmp(const char *str, const char *prefix);
 extern time_t tm_to_time_t(const struct tm *tm);
diff --git a/usage.c b/usage.c
index 0555ce6..c488f3a 100644
--- a/usage.c
+++ b/usage.c
@@ -36,12 +36,12 @@ static void warn_builtin(const char *warn, va_list params)
 
 /* If we are in a dlopen()ed .so write to a global variable would segfault
  * (ugh), so keep things static. */
-static NORETURN void (*usage_routine)(const char *err) = usage_builtin;
-static NORETURN void (*die_routine)(const char *err, va_list params) = die_builtin;
+static NORETURN_PTR void (*usage_routine)(const char *err) = usage_builtin;
+static NORETURN_PTR void (*die_routine)(const char *err, va_list params) = die_builtin;
 static void (*error_routine)(const char *err, va_list params) = error_builtin;
 static void (*warn_routine)(const char *err, va_list params) = warn_builtin;
 
-void set_die_routine(NORETURN void (*routine)(const char *err, va_list params))
+void set_die_routine(NORETURN_PTR void (*routine)(const char *err, va_list params))
 {
 	die_routine = routine;
 }
-- 
1.6.4.msysgit.0.17.g82372.dirty
Previous: Erik Faye-LundNext: Jeff King
Message 2 of 5 in “increase portability of NORETURN declarations”
  1. 1/2 increase portability of NORETURN declarationsErik Faye-Lund, Sep 30, 2009
  2. 2/2 add NORETURN_PTR for function pointersErik Faye-Lund, Sep 30, 2009
  3. Jeff KingOct 1, 2009
  4. Erik Faye-LundOct 1, 2009
  5. Jeff KingOct 2, 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.