[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: new module 'noreturn'
From: |
Bruno Haible |
Subject: |
Re: new module 'noreturn' |
Date: |
Sat, 29 Apr 2017 00:21:23 +0200 |
User-agent: |
KMail/5.1.3 (Linux/4.4.0-75-generic; KDE/5.18.0; x86_64; ; ) |
> 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