> You have been thinking of this? > #define _GL_NORETURN_FUNC _Noreturn > #define _GL_NORETURN_FUNCPTR _Noreturn __attribute__ ((__noreturn__))
This approach does not work: =============================================================================== void func1 (void) { for (;;); } _Noreturn void func2 (void) { for (;;); } __attribute__ ((__noreturn__)) void func3 (void) { for (;;); } _Noreturn __attribute__ ((__noreturn__)) void func4 (void) { for (;;); } void (*fptr11) (void) = func1; /* GCC: OK clang: OK */ void (*fptr12) (void) = func2; /* GCC: OK clang: OK */ void (*fptr13) (void) = func3; /* GCC: OK clang: OK */ void (*fptr14) (void) = func4; /* GCC: OK clang: OK */ _Noreturn void (*fptr21) (void) = func1; /* GCC: warning clang: error */ _Noreturn void (*fptr22) (void) = func2; /* GCC: warning clang: error */ _Noreturn void (*fptr23) (void) = func3; /* GCC: warning clang: error */ _Noreturn void (*fptr24) (void) = func4; /* GCC: warning clang: error */ __attribute__ ((__noreturn__)) void (*fptr31) (void) = func1; /* GCC: warning clang: warning */ __attribute__ ((__noreturn__)) void (*fptr32) (void) = func2; /* GCC: OK clang: warning */ __attribute__ ((__noreturn__)) void (*fptr33) (void) = func3; /* GCC: OK clang: OK */ __attribute__ ((__noreturn__)) void (*fptr34) (void) = func4; /* GCC: OK clang: OK */ _Noreturn __attribute__ ((__noreturn__)) void (*fptr41) (void) = func1; /* GCC: warning clang: error */ _Noreturn __attribute__ ((__noreturn__)) void (*fptr42) (void) = func2; /* GCC: warning clang: error */ _Noreturn __attribute__ ((__noreturn__)) void (*fptr43) (void) = func3; /* GCC: warning clang: error */ _Noreturn __attribute__ ((__noreturn__)) void (*fptr44) (void) = func4; /* GCC: warning clang: error */ =============================================================================== I'm pushing the new module now. Bruno