svn commit: r316779 - stable/11/sys/sys

Pedro Giffuni pfg at FreeBSD.org
Fri Apr 14 05:37:29 UTC 2017


Hello;

> On Apr 13, 2017, at 16:02, Mark Millard <markmi at dsl-only.net> wrote:
> 
>> Author: pfg
>> Date: Thu Apr 13 18:28:40 2017
>> New Revision: 316779
>> URL: 
>> https://svnweb.freebsd.org/changeset/base/316779
>> 
>> 
>> Log:
>>  Temporarily revert r315602.
>>  Bring back the definition for the GCC __nonnull() attribute.
>> 
>>  Old versions of GCC, including the version installed the latest 11-stable
>>  snapshot with pkg(8), still carry the old attributes.
>> 
>>  The issue is easily fixed by rebuilding GCC but there is no need to cause
>>  havoc in our user base. The definition by itself is harmless but it should
>>  be removed again in the near future.
>> 
>> Modified:
>>  stable/11/sys/sys/cdefs.h
>> Directory Properties:
>>  stable/11/   (props changed)
>> 
>> Modified: stable/11/sys/sys/cdefs.h
>> ==============================================================================
>> --- stable/11/sys/sys/cdefs.h	Thu Apr 13 18:13:10 2017	(r316778)
>> +++ stable/11/sys/sys/cdefs.h	Thu Apr 13 18:28:40 2017	(r316779)
>> @@ -376,6 +376,14 @@
>> #define	__noinline
>> #endif
>> 
>> +#if __GNUC_PREREQ__(3, 3)
>> +#define	__nonnull(x)	__attribute__((__nonnull__(x)))
>> +#define	__nonnull_all	__attribute__((__nonnull__))
>> +#else
>> +#define	__nonnull(x)
>> +#define	__nonnull_all
>> +#endif
>> +
>> #if __GNUC_PREREQ__(3, 4)
>> #define	__fastcall	__attribute__((__fastcall__))
>> #define	__result_use_check	__attribute__((__warn_unused_result__))
> 
> 
> My understanding was that __attribute__((__nonnull__(x))) and
> __attribute__((__nonnull__)) were causing some problems
> because of optimization consequences (code removal). The goal
> of converting to the new technique (involving lack of
> __nonnull and lack of __nonnull_all ) was to still have
> warning notices but without such removal of code if I
> understand right.
> 
> If avoiding code removal was the intent behind the removal
> of __nonnull (and __nonnull_all) use (and use of  the
> __nonull__ attributes) then just having the two lines:
> 
> +#define	__nonnull(x)
> +#define	__nonnull_all 
> 
> might be better for maintaining compatibility with existing
> older sources that reference __nonnull and/or __nonnull_all .
> 

Leaving empty definitions would have been indeed acceptable
but I prefer to  either openly drop support for an attribute or label
it deprecated but still operational for a while than to lie.

We previously removed all occurrences of the __nonnull() attribute
from FreeBSD headers though so the change should really just be
a no-op, in particular to clang users which stand for all user base
and most ports.

Pedro.



More information about the svn-src-stable-11 mailing list