bug-gnulib
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]