add NORETURN_PTR for function pointers
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> Signed-off-by: Jeff King <peff@peff.net>
Erik Faye-Lund committed
Sep 30, 2009 at 18:05 UTC
18660bc96ec0419cc096a53998d3197f2b905e8a
2 files changed
+6
-4
git-compat-util.h
+3
-1
@@ -176,8 +176,10 @@ extern char *gitbasename(char *);
176
177
#ifdef __GNUC__
178
#define NORETURN __attribute__((__noreturn__))
179
+#define NORETURN_PTR __attribute__((__noreturn__))
180
#else
181
#define NORETURN
182
+#define NORETURN_PTR
183
#ifndef __attribute__
184
#define __attribute__(x)
185
#endif
@@ -192,7 +194,7 @@ extern NORETURN void die_errno(const char *err, ...) __attribute__((format (prin
194
extern int error(const char *err, ...) __attribute__((format (printf, 1, 2)));
195
extern void warning(const char *err, ...) __attribute__((format (printf, 1, 2)));
196
195
-extern void set_die_routine(NORETURN void (*routine)(const char *err, va_list params));
197
+extern void set_die_routine(NORETURN_PTR void (*routine)(const char *err, va_list params));
198
199
extern int prefixcmp(const char *str, const char *prefix);
200
extern time_t tm_to_time_t(const struct tm *tm);
usage.c
+3
-3
@@ -36,12 +36,12 @@ static void warn_builtin(const char *warn, va_list params)
36
37
/* If we are in a dlopen()ed .so write to a global variable would segfault
38
* (ugh), so keep things static. */
39
-static NORETURN void (*usage_routine)(const char *err) = usage_builtin;
40
-static NORETURN void (*die_routine)(const char *err, va_list params) = die_builtin;
39
+static NORETURN_PTR void (*usage_routine)(const char *err) = usage_builtin;
40
+static NORETURN_PTR void (*die_routine)(const char *err, va_list params) = die_builtin;
41
static void (*error_routine)(const char *err, va_list params) = error_builtin;
42
static void (*warn_routine)(const char *err, va_list params) = warn_builtin;
43
44
-void set_die_routine(NORETURN void (*routine)(const char *err, va_list params))
44
+void set_die_routine(NORETURN_PTR void (*routine)(const char *err, va_list params))
45
{
46
die_routine = routine;
47
}