svn commit: r228330 - in head: include sys/sys

Andreas Tobler andreast at FreeBSD.org
Sun Dec 11 21:12:09 UTC 2011


On 08.12.11 21:40, Andreas Tobler wrote:
> On 07.12.11 22:17, David Chisnall wrote:
>> Author: theraven
>> Date: Wed Dec  7 21:17:50 2011
>> New Revision: 228330
>> URL: http://svn.freebsd.org/changeset/base/228330
>>
>> Log:
>>     As per das@'s suggestion, s/__noreturn/_Noreturn/, since the latter is an
>>     identifier reserved for the implementation in C99 and earlier so there is
>>     no sensible reason for introducing yet another reserved identifier when we
>>     could just use the one C1x uses.
>>
>>     Approved by:	brooks (mentor)
>
>> Modified: head/sys/sys/cdefs.h
>> ==============================================================================
>> --- head/sys/sys/cdefs.h	Wed Dec  7 21:02:35 2011	(r228329)
>> +++ head/sys/sys/cdefs.h	Wed Dec  7 21:17:50 2011	(r228330)
>> @@ -220,13 +220,13 @@
>>
>>
>>    #if defined(__cplusplus)&&   __cplusplus>= 201103L
>> -#define	__noreturn		[[noreturn]]
>> +#define	_Noreturn		[[noreturn]]
>>    #elif defined(__STDC_VERSION__)&&   __STDC_VERSION__>   201000L
>> -#define	__noreturn		_Noreturn
>> +/* Do nothing - _Noreturn is a keyword */
>>    #elif defined(__GNUC__)
>> -#define	__noreturn		__attribute__((__noreturn__))
>> +#define	_Noreturn		__attribute__((__noreturn__))
>
> This and the previous commit broke bootstrapping gcc.
> The problem is this:
> /export/devel/build/gcc/head/objdir/./gcc/include-fixed/stdlib.h:96:1:
> error: expected unqualified-id before '[' token
>
> Line in question is: _Noreturn void	 abort(void);
> Where _Noreturn gets expanded to [[noreturn]]
>
> I helped myself with adding the below. Well. No clue if it is correct.
> But at least I can continue building gcc trunk.

As far as I understand, GCC does not support this attribute [[noreturn]] 
yet. But it defines both, __cplusplus and __cplusplus=201103L. On 
gcc-4.7 __cplusplus=201103L is the default when we build libstdc++.

So I think we have to extend the check as below or we can reorder the 
defines that GNUC is before the __cplusplus &&  __cplusplus>= 201103L.

I'd appreciate any comments on this.

Thanks,
Andreas

> Index: cdefs.h
> ===================================================================
> --- cdefs.h	(revision 228352)
> +++ cdefs.h	(working copy)
> @@ -219,7 +219,7 @@
>    #endif
>
>
> -#if defined(__cplusplus)&&  __cplusplus>= 201103L
> +#if defined(__cplusplus)&&  __cplusplus>= 201103L&&  !defined(__GNUC__)
>    #define	_Noreturn		[[noreturn]]
>    #elif defined(__STDC_VERSION__)&&  __STDC_VERSION__>  201000L
>    /* Do nothing - _Noreturn is a keyword */



More information about the svn-src-head mailing list