[Mesa-dev] [PATCH] util: Implement assume() for clang.

Matt Turner mattst88 at gmail.com
Fri Nov 21 15:53:35 PST 2014


On Fri, Nov 21, 2014 at 3:47 PM, Jordan Justen
<jordan.l.justen at intel.com> wrote:
> On 2014-11-21 15:17:00, Matt Turner wrote:
>> ---
>>  src/util/macros.h | 12 +++++++++++-
>>  1 file changed, 11 insertions(+), 1 deletion(-)
>>
>> diff --git a/src/util/macros.h b/src/util/macros.h
>> index da5daff..b67596d 100644
>> --- a/src/util/macros.h
>> +++ b/src/util/macros.h
>> @@ -29,6 +29,10 @@
>>  #  define ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x)))
>>  #endif
>>
>> +/* For compatibility with Clang's __has_builtin() */
>> +#ifndef __has_builtin
>> +#  define __has_builtin(x) 0
>> +#endif
>>
>>  /**
>>   * __builtin_expect macros
>> @@ -85,7 +89,13 @@ do {                        \
>>   * Assume macro. Useful for expressing our assumptions to the compiler,
>>   * typically for purposes of silencing warnings.
>>   */
>> -#ifdef HAVE___BUILTIN_UNREACHABLE
>> +#if __has_builtin(__builtin_assume)
>> +#define assume(expr)             \
>> +do {                             \
>> +   assert(!"assumption failed"); \
>
> Did you mean to remove this assert?
>
> With that removed
> Reviewed-by: Jordan Justen <jordan.l.justen at intel.com>

No. Clang's documentation says that if the expression you're assuming
is false, behavior is undefined. The assertion is to help us catch
cases where that happens.


More information about the mesa-dev mailing list