Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 13 Apr 2017 14:02:19 -0700
From:      Mark Millard <markmi@dsl-only.net>
To:        svn-src-stable-11@freebsd.org, Pedro Giffuni <pfg@FreeBSD.org>
Subject:   Re: svn commit: r316779 - stable/11/sys/sys
Message-ID:  <7B482BAF-6ACA-4303-88FF-4F3E3EDFB440@dsl-only.net>

next in thread | raw e-mail | index | archive | help
> Author: pfg
> Date: Thu Apr 13 18:28:40 2017
> New Revision: 316779
> URL:=20
> https://svnweb.freebsd.org/changeset/base/316779
>=20
>=20
> Log:
>   Temporarily revert r315602.
>   Bring back the definition for the GCC __nonnull() attribute.
>  =20
>   Old versions of GCC, including the version installed the latest =
11-stable
>   snapshot with pkg(8), still carry the old attributes.
>  =20
>   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.
>=20
> Modified:
>   stable/11/sys/sys/cdefs.h
> Directory Properties:
>   stable/11/   (props changed)
>=20
> Modified: stable/11/sys/sys/cdefs.h
> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
> --- 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
> =20
> +#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=20

might be better for maintaining compatibility with existing
older sources that reference __nonnull and/or __nonnull_all .

Of course I could be wrong about why the changes were made
in the first place or in other details about the alternatives.

=3D=3D=3D
Mark Millard
markmi at dsl-only.net




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?7B482BAF-6ACA-4303-88FF-4F3E3EDFB440>