svn commit: r298412 - head/sys/ofed/drivers/infiniband/core

Pedro Giffuni pfg at FreeBSD.org
Thu Apr 21 18:25:56 UTC 2016



On 21/04/2016 13:12, Hans Petter Selasky wrote:
> On 04/21/16 19:59, Pedro Giffuni wrote:
>>
>>
>> On 21/04/2016 12:52, Juli Mallett wrote:
>>> On Thu, Apr 21, 2016 at 10:22 AM, Hans Petter Selasky
>>> <hps at selasky.org> wrote:
>>>> On 04/21/16 19:12, Ngie Cooper wrote:
>
> Hi,
>
>>> Then there should be an assertion or something else of that sort (I
>>> forget if we have a __builtin_unreachable()-alike macro in the kernel;
>>> the lint(1)y NOTREACHED isn't as nice as actual code) so that it is
>>> apparent to a human that this case cannot be reached.  The presence of
>>> a do-nothing default case is not typically indicative of unreachable
>>> code.
>>
>> We do have __unreachable() in cdefs.h
>>
>> It should work with both GCC and clang.
>>
>> Pedro.
>>
>
> I don't see anyone using __unreachable() yet in the kernel. Do you 
> recommend it over a KASSERT() ?
>

It's a rather recent addition (I added it after checking NetBSD's cdefs).

It is meant mostly for the compiler/static analyzers.

 From the clang documentation:
"The __builtin_unreachable() builtin has completely undefined behavior. 
Since it has undefined behavior, it is a statement that it is never 
reached and the optimizer can take advantage of this to produce better 
code. This builtin takes no arguments and produces a void result."

There was some discussion before it was introduced about turning
it into an assertion, but I recall it was not possible.

hth,

Pedro.


More information about the svn-src-head mailing list