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