svn commit: r268137 - head/sys/sys
Pedro Giffuni
pfg at FreeBSD.org
Sun Jun 21 01:15:42 UTC 2015
On 06/19/15 12:23, Bruce Evans wrote:
> On Fri, 19 Jun 2015, Dimitry Andric wrote:
>
>> On 19 Jun 2015, at 17:02, Pedro Giffuni <pfg at freebsd.org> wrote:
>>>
>>>> On 19/06/2015 05:16 a.m., David Chisnall wrote:
>>>>> I only just caught this (having seen the fallout from NetBSD doing
>>>>> the same thing in a shipping release and the pain that it’s caused):
>>>>>
>>>>> __weak is a reserved keyword in Objective-C, please pick another
>>>>> name for this. This in cdefs.h makes it impossible to include any
>>>>> FreeBSD standard headers in Objective-C programs (of which we have
>>>>> a couple of hundred in ports) if they use any of the modern
>>>>> Objective-C language modes.
>> ...
>>> Closely related to this, we are redefining _Noreturn, which is a
>>> reserved keyword in C11.
>>
>> No, sys/cdefs.h has:
>>
>> 254 /*
>> 255 * Keywords added in C11.
>> 256 */
>> 257
>> 258 #if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 201112L
>> || defined(lint)
>> [...]
>> 284 #if defined(__cplusplus) && __cplusplus >= 201103L
>> 285 #define _Noreturn [[noreturn]]
>> 286 #else
>> 287 #define _Noreturn __dead2
>> 288 #endif
>> [...]
>> 320 #endif /* __STDC_VERSION__ || __STDC_VERSION__ < 201112L */
>>
>> So the whole block redefining all the _Xxx identifiers is skipped for
>> C11 and higher.
>
> I probably pointed this out incorrectly to Pedro.
>
> All uses of _Noreturn are still broken, and also ugly. __dead2 is the
> gcc-2 compatible version of the gcc-1 compatible macro __dead. It is
> syntactically different from __dead and _Noreturn. It must be placed
> after the function parameter list instead of in the function type
> declarator because old versions of gcc only accept attributes there.
> __dead and presumably _Noreturn must be placed in the function type
> declarator. This is incompatible, and also uglier.
>
I was thinking that _Noreturn can be fixed for older compilers
less disruptively.
I haven't tested the attached patch the idea is to resurrect
__dead and use it for _Noreturn.
> Correct version with ugly declarations:
>
> __dead void
> foo(void) __dead2;
>
With the patch we would use:
__Noreturn void
foo(void) _dead2;
Which is still ugly but C11-ish.
Pedro.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dead.diff
Type: text/x-patch
Size: 999 bytes
Desc: not available
URL: <http://lists.freebsd.org/pipermail/svn-src-all/attachments/20150620/dc044646/attachment.bin>
More information about the svn-src-all
mailing list