Paul Eggert wrote:
> -# define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) 0
> +# define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) \
> + ((void) (struct { void (*prepare_func) (void); \
> + void (*parent_func) (void); \
> + void (*child_func) (void); }) \
> + {PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC}, 0)
I have a hard time understanding this definition, because it's not well
indented.
> +# define gl_thread_exit(RETVAL) ((int) {RETVAL}, (void) 0)
The first part of this compound statement is not of type (void),
therefore it may trigger a gcc warning, right?
I'm therefore applying this follow-up.
2026-04-28 Bruno Haible <[email protected]>
thread: Improve no-op macros.
* lib/glthread/thread.h (glthread_atfork, glthread_create,
glthread_sigmask, glthread_join): Improve indentation.
(gl_thread_exit): Simplify.
diff --git a/lib/glthread/thread.h b/lib/glthread/thread.h
index ad872f172b..f830657669 100644
--- a/lib/glthread/thread.h
+++ b/lib/glthread/thread.h
@@ -118,7 +118,8 @@ extern _Noreturn void gl_thread_exit (void *return_value);
((void) (struct { void (*prepare_func) (void); \
void (*parent_func) (void); \
void (*child_func) (void); }) \
- {PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC}, 0)
+ { PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC }, \
+ 0)
# ifdef __cplusplus
}
@@ -248,7 +249,8 @@ extern const gl_thread_t gl_null_thread;
((void) (struct { void (*prepare_func) (void); \
void (*parent_func) (void); \
void (*child_func) (void); }) \
- {PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC}, 0)
+ { PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC }, \
+ 0)
# endif
# ifdef __cplusplus
@@ -278,7 +280,8 @@ typedef glwthread_thread_t gl_thread_t;
# define glthread_sigmask(HOW, SET, OSET) \
/* unsupported */ \
((void) (struct { int how; sigset_t const *set; sigset_t *oset; }) \
- {HOW, SET, OSET}, 0)
+ { HOW, SET, OSET }, \
+ 0)
# define glthread_join(THREAD, RETVALP) \
glwthread_thread_join (THREAD, RETVALP)
# define gl_thread_self() \
@@ -291,7 +294,8 @@ typedef glwthread_thread_t gl_thread_t;
((void) (struct { void (*prepare_func) (void); \
void (*parent_func) (void); \
void (*child_func) (void); }) \
- {PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC}, 0)
+ { PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC }, \
+ 0)
# ifdef __cplusplus
}
@@ -310,22 +314,27 @@ typedef int gl_thread_t;
((void) (struct { gl_thread_t *threadp; \
void *(*func) (void *); \
void *arg; }) \
- {THREADP, FUNC, ARG}, ENOSYS)
+ { THREADP, FUNC, ARG }, \
+ ENOSYS)
# define glthread_sigmask(HOW, SET, OSET) \
((void) (struct { int how; sigset_t const *set; sigset_t *oset; }) \
- {HOW, SET, OSET}, 0)
+ { HOW, SET, OSET }, \
+ 0)
# define glthread_join(THREAD, RETVALP) \
((void) (struct { gl_thread_t thread; void **retvalp; }) \
- {THREAD, RETVALP}, 0)
+ { THREAD, RETVALP }, \
+ 0)
# define gl_thread_self() 0
# define gl_thread_self_pointer() \
((void *) gl_thread_self ())
-# define gl_thread_exit(RETVAL) ((int) {RETVAL}, (void) 0)
+# define gl_thread_exit(RETVAL) \
+ ((void) (int) { RETVAL })
# define glthread_atfork(PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC) \
((void) (struct { void (*prepare_func) (void); \
void (*parent_func) (void); \
void (*child_func) (void); }) \
- {PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC}, 0)
+ { PREPARE_FUNC, PARENT_FUNC, CHILD_FUNC }, \
+ 0)
#endif