svn commit: r268137 - head/sys/sys
Pedro Giffuni
pfg at FreeBSD.org
Sun Jun 21 18:43:32 UTC 2015
On 06/21/15 11:48, Bruce Evans wrote:
> On Sun, 21 Jun 2015, Pedro Giffuni wrote:
>
>> On 06/21/15 10:41, Bruce Evans wrote:
>>> On Sun, 21 Jun 2015, Pedro Giffuni wrote:
>>>
>>>> On 06/21/15 01:09, Bruce Evans wrote:
>>>>> On Sat, 20 Jun 2015, Pedro Giffuni wrote:
>>>> * ...
>>>>>> With the patch we would use:
>>>>>>
>>>>>> __Noreturn void
>>>>>> foo(void) _dead2;
>>>>>>
>>>>>> Which is still ugly but C11-ish.
>>>>>
>>>>> That asks for the same problems as defining __weak.
>>>>>
>>>>> Why not just don't use _Noreturn? It is an unimprovement on the gcc
>>>>> attribute. The attribute works at the beginning or end, while
>>>>> Noreturn
>>>>> only works at the end.
>>>>
>>>> As I see it, newer (C11) software is likely to use _Noreturn in their
>>>> headers
>>>
>>> We can define _Noreturn to support this (but possibly shouldn't).
>>>
>>> The newer software many be pure C11. Then it doesn't need any
>>> definition,
>>> and just doesn't compile with non-C11 compilers.
>>
>> Well, the fact this we just do this in the tree and no one has
>> bothered to
>> "clean" the situation for older compilers just indicates that no one
>> *cares*
>> about older compilers.
>
> No, we don't do this with older compilers, except for for a couple of
> pre-C90 cases. We are careful to only define names in our namespace,
> e.g., __signed but not the C90 keyword 'signed'. This is still fragile.
> __signed is a keyword for gcc, and it is confusing that some of our use
> of it require it to have the gcc meaning. __signed is in the
> implementation
> namespace so we don't own it completely. This is what is now causing
> problems
> with defining __weak.
>
We have plenty of C++-style comments and C99 initializers in the tree.
We also use gcc constructor and destructor attributes. We can pretend
we are supporting a lot of stuff, including the intel C compiler, which
AFAICT was hacked to produce FreeBSD binaries but was never really
native, but the truth is 100% portability has never been there.
We just support what ever compiler was used to build FreeBSD at the time.
> The situation with older compilers has not been cleaned because it either
> works or is not used. Since it did work with older compilers when it was
> written, the only way it can not still work is because of "cleaning" it
> combined with null testing and null use so that bugs in the "cleaning"
> are not detected.
>
>>> If we defined _Noreturn, it would be to use it in non-C11 software,
>>> like
>>> we do in stdlib.h. This is a fragile compatibility hack so it should
>>> be avoided if possible. We can easily avoid it in our own headers by
>>> not changing anything. Just use the old declaration, with __dead2
>>> placed
>>> at the end. Any reasonable implementation of __attribute__() must
>>> be able
>>> to support any new attribute that a new standard might add.
>>
>> The thing is, why bother with gnuisms at all?
>
> There is no other way to declare necessary attributes that
> __attribute__(()).
> Not even __attribute__() like I wrote above -- that is just a syntax
> error
> since it is missing parentheses. __attribute__(()) is now a de-facto
> standard for gnuish compilers, but it is not in any C standard and has
> little chance of working with Microsoft compilers. It must be wrapped
> in a #define like we do.
>
I mean really old gnuisms. We accommodate just fine for gcc 4.x and
clang drew the line in gcc-4.2. Anything before that we should just
deprecate, Anything after that we can work out relatively easy.
>> I am personally OK with making it easier for everyone to use more
>> modern constructs but I am not going out of my way to support
>> gcc-1 or gcc-2.
>
> From there, it is only a small step to not supporting any compiler
> except the current version of gcc (not even clang).
>
I agree it would not be impossible to support older compilers and
leave space for bare standard ones, but perhaps it would be more
realistic to draw a line somewhere and have a list of supported
compilers.
And if some FreeBSD consumers need a specific compiler it would
be great to have them involved in the project.
Pedro.
More information about the svn-src-head
mailing list