Skip to content

Commit 18660bc

Browse files
kusmapeff
authored andcommitted
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 <[email protected]> Signed-off-by: Jeff King <[email protected]>
1 parent a4f3131 commit 18660bc

File tree

2 files changed

+6
-4
lines changed

2 files changed

+6
-4
lines changed

git-compat-util.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,10 @@ extern char *gitbasename(char *);
176176

177177
#ifdef __GNUC__
178178
#define NORETURN __attribute__((__noreturn__))
179+
#define NORETURN_PTR __attribute__((__noreturn__))
179180
#else
180181
#define NORETURN
182+
#define NORETURN_PTR
181183
#ifndef __attribute__
182184
#define __attribute__(x)
183185
#endif
@@ -192,7 +194,7 @@ extern NORETURN void die_errno(const char *err, ...) __attribute__((format (prin
192194
extern int error(const char *err, ...) __attribute__((format (printf, 1, 2)));
193195
extern void warning(const char *err, ...) __attribute__((format (printf, 1, 2)));
194196

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));
196198

197199
extern int prefixcmp(const char *str, const char *prefix);
198200
extern time_t tm_to_time_t(const struct tm *tm);

usage.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,12 @@ static void warn_builtin(const char *warn, va_list params)
3636

3737
/* If we are in a dlopen()ed .so write to a global variable would segfault
3838
* (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;
4141
static void (*error_routine)(const char *err, va_list params) = error_builtin;
4242
static void (*warn_routine)(const char *err, va_list params) = warn_builtin;
4343

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))
4545
{
4646
die_routine = routine;
4747
}

0 commit comments

Comments
 (0)