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

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



On 21/04/2016 13:25, Pedro Giffuni wrote:
>
>
> 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."
>

Replying to myself with the better description[1]:

"__builtin_unreachable is used to indicate that a specific point in the 
program cannot be reached, even if the compiler might otherwise think it 
can. This is useful to improve optimization and eliminates certain 
warnings. "

Pedro.

[1]
http://clang.llvm.org/docs/LanguageExtensions.html#builtin-functions


More information about the svn-src-all mailing list