Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 24 Jun 2024 09:41:04 -0600
From:      Warner Losh <imp@bsdimp.com>
To:        Pedro Giffuni <pfg@freebsd.org>
Cc:        "src-committers@freebsd.org" <src-committers@freebsd.org>,  "dev-commits-src-all@freebsd.org" <dev-commits-src-all@freebsd.org>,  "dev-commits-src-main@freebsd.org" <dev-commits-src-main@freebsd.org>, Warner Losh <imp@freebsd.org>
Subject:   Re: git: d5c01e1124ff - main - cdefs.h: Remove pre gcc 5.0 support
Message-ID:  <CANCZdfpjPUeCk4rfiAq5_zisG0yKWfMbMBM-0v3JrCqAQK1NkQ@mail.gmail.com>
In-Reply-To: <62379069.705510.1719242645494@mail.yahoo.com>
References:  <202406210241.45L2fQZA057110@gitrepo.freebsd.org> <111875645.165697.1719082066518@mail.yahoo.com> <CANCZdfornovuQ4zJMxBqbgdEO7rZu9pF1LyoyKRiuadCyKi02w@mail.gmail.com> <62379069.705510.1719242645494@mail.yahoo.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--00000000000090863b061ba49c5f
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Mon, Jun 24, 2024 at 9:25=E2=80=AFAM Pedro Giffuni <pfg@freebsd.org> wro=
te:

> I do welcome the cleanup, of course, just I would have defined GCC 4.2 as
> the breaking point instead of 5.0.
>

The breaking point is headed to gcc9 and clang11. There's no compelling
FreeBSD project use case where people need to compile FreeBSD programs with
compilers older than that. Though the difference matters mostly to
compiling FreeBSD itself (which doesn't work with gcc older than 12 or 13
or clang older than a couple of releases. The delta for the system headers
is approximately 0 for all these changes, though, since most of the
#defines are for FreeBSD itself, not our headers.


> Due basically to the licensing issues, GCC 4.2 became a natural reference
> for GCC versions.  At some point there were vendors actually shipping
> FreeBSD with GCC 4.2, and it was not a huge cost to keep GCC versions
> above 4.2 properly discriminated.
>

True... But that's ancient history at this point...


> But then you are right that it doesn't really matter that much. At least
> the alloc_size attributes are only defined for the FORTIFY_SOURCE in some
> linux libc implementation that I looked at. We define them unconditionall=
y
> but I don't recall them being useful.
>

We use them in a few dozen places in the tree, but the only visible ones to
system headers are for malloc, calloc and realloc. Keeping the fringe
definitions wasn't too useful, but if they turn out to be less than fringe,
I'll cope. Most of the odd edge cases we had, though, were poorly
documented and/or had the versions wrong because of transient bugs in gcc.
:(. It's time to start over.

Of course, sys/cdefs.h could also benefit from some reorg, and a man page,
but one thing at a time.

Warner

Indeed. But none of the ones that I removed are affected by this quirk
> since they are true for clang all versions.
>
> Warner
>
> On Sat, Jun 22, 2024 at 12:47=E2=80=AFPM Pedro Giffuni <pfg@freebsd.org> =
wrote:
>
> It was long ago when I last touched this but FWIW ...
>
> clang used to report itself as GCC 4.2 and kept it's GCC extension suppor=
t
> level consistent with that version so these version numbers were relevant=
.
>
> Pedro.
>
> On Thursday, June 20, 2024 at 09:41:34 PM GMT-5, Warner Losh <
> imp@freebsd.org> wrote:
>
>
> The branch main has been updated by imp:
>
> URL:
> https://cgit.FreeBSD.org/src/commit/?id=3Dd5c01e1124ffa4adb2513e7e8d708d7=
072dbfc75
>
> commit d5c01e1124ffa4adb2513e7e8d708d7072dbfc75
> Author:    Warner Losh <imp@FreeBSD.org>
> AuthorDate: 2024-06-20 23:03:15 +0000
> Commit:    Warner Losh <imp@FreeBSD.org>
> CommitDate: 2024-06-21 02:41:09 +0000
>
>     cdefs.h: Remove pre gcc 5.0 support
>
>     Reviewed by:            brooks
>     Differential Revision:  https://reviews.freebsd.org/D45656
>     Sponsored by:          Netflix
> ---
> sys/sys/cdefs.h | 54 ----------------------------------------------------=
--
> 1 file changed, 54 deletions(-)
>
> diff --git a/sys/sys/cdefs.h b/sys/sys/cdefs.h
> index a6ecdca5d8b9..43d179b82020 100644
> --- a/sys/sys/cdefs.h
> +++ b/sys/sys/cdefs.h
> @@ -164,18 +164,9 @@
> #define    __aligned(x)    __attribute__((__aligned__(x)))
> #define    __section(x)    __attribute__((__section__(x)))
> #define    __writeonly    __unused
> -#if __GNUC_PREREQ__(4, 3) || __has_attribute(__alloc_size__)
> #define    __alloc_size(x)    __attribute__((__alloc_size__(x)))
> #define    __alloc_size2(n, x)    __attribute__((__alloc_size__(n, x)))
> -#else
> -#define    __alloc_size(x)
> -#define    __alloc_size2(n, x)
> -#endif
> -#if __GNUC_PREREQ__(4, 9) || __has_attribute(__alloc_align__)
> #define    __alloc_align(x)    __attribute__((__alloc_align__(x)))
> -#else
> -#define    __alloc_align(x)
> -#endif
>
> /*
>   * Keywords added in C11.
> @@ -199,15 +190,6 @@
> #define    _Alignof(x)        __alignof(x)
> #endif
>
> -#if !defined(__cplusplus) && !__has_extension(c_atomic) && \
> -    !__has_extension(cxx_atomic) && !__GNUC_PREREQ__(4, 7)
> -/*
> - * No native support for _Atomic(). Place object in structure to prevent
> - * most forms of direct non-atomic access.
> - */
> -#define    _Atomic(T)        struct { T volatile __val; }
> -#endif
> -
> #if defined(__cplusplus) && __cplusplus >=3D 201103L
> #define    _Noreturn        [[noreturn]]
> #else
> @@ -218,15 +200,6 @@
> #if (defined(__cplusplus) && __cplusplus >=3D 201103L) || \
>     __has_extension(cxx_static_assert)
> #define    _Static_assert(x, y)    static_assert(x, y)
> -#elif __GNUC_PREREQ__(4,6) && !defined(__cplusplus)
> -/* Nothing, gcc 4.6 and higher has _Static_assert built-in */
> -#elif defined(__COUNTER__)
> -#define    _Static_assert(x, y)    __Static_assert(x, __COUNTER__)
> -#define    __Static_assert(x, y)    ___Static_assert(x, y)
> -#define    ___Static_assert(x, y)    typedef char __assert_ ## y[(x) ? 1
> : -1] \
> -                __unused
> -#else
> -#define    _Static_assert(x, y)    struct __hack
> #endif
> #endif
>
> @@ -276,7 +249,6 @@
>   * void bar(int myArray[__min_size(10)]);
>   */
> #if !defined(__cplusplus) && \
> -    (defined(__clang__) || __GNUC_PREREQ__(4, 6)) && \
>     (!defined(__STDC_VERSION__) || (__STDC_VERSION__ >=3D 199901))
> #define __min_size(x)    static (x)
> #else
> @@ -302,17 +274,9 @@
> #define    __result_use_or_ignore_check
> #endif /* !__clang__ */
>
> -#if __GNUC_PREREQ__(4, 1)
> #define    __returns_twice    __attribute__((__returns_twice__))
> -#else
> -#define    __returns_twice
> -#endif
>
> -#if __GNUC_PREREQ__(4, 6) || __has_builtin(__builtin_unreachable)
> #define    __unreachable()    __builtin_unreachable()
> -#else
> -#define    __unreachable()    ((void)0)
> -#endif
>
> #if !defined(__STRICT_ANSI__) || __STDC_VERSION__ >=3D 199901
> #define    __LONG_LONG_SUPPORTED
> @@ -353,33 +317,15 @@
> #define    __predict_true(exp)    __builtin_expect((exp), 1)
> #define    __predict_false(exp)    __builtin_expect((exp), 0)
>
> -#if __GNUC_PREREQ__(4, 0)
> #define    __null_sentinel    __attribute__((__sentinel__))
> #define    __exported    __attribute__((__visibility__("default")))
> #define    __hidden    __attribute__((__visibility__("hidden")))
> -#else
> -#define    __null_sentinel
> -#define    __exported
> -#define    __hidden
> -#endif
>
> /*
>   * We define this here since <stddef.h>, <sys/queue.h>, and <sys/types.h=
>
>   * require it.
>   */
> -#if __GNUC_PREREQ__(4, 1)
> #define    __offsetof(type, field)    __builtin_offsetof(type, field)
> -#else
> -#ifndef __cplusplus
> -#define    __offsetof(type, field) \
> -    ((__size_t)(__uintptr_t)((const volatile void *)&((type *)0)->field)=
)
> -#else
> -#define    __offsetof(type, field)                    \
> -  (__offsetof__ (reinterpret_cast <__size_t>            \
> -                (&reinterpret_cast <const volatile char &>    \
> -                  (static_cast<type *> (0)->field))))
> -#endif
> -#endif
> #define    __rangeof(type, start, end) \
>     (__offsetof(type, end) - __offsetof(type, start))
>
>

--00000000000090863b061ba49c5f
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><br></div><br><div class=3D"gmail_quote">=
<div dir=3D"ltr" class=3D"gmail_attr">On Mon, Jun 24, 2024 at 9:25=E2=80=AF=
AM Pedro Giffuni &lt;<a href=3D"mailto:pfg@freebsd.org">pfg@freebsd.org</a>=
&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px =
0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div=
><div style=3D"font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-=
serif;font-size:16px"><div></div>
        <div dir=3D"ltr"><div><div dir=3D"ltr" style=3D"color:rgb(0,0,0);fo=
nt-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-size:1=
6px;outline:none"><span style=3D"outline:none">I do welcome the cleanup, of=
 course, just I would have defined GCC 4.2 as the breaking point instead of=
 5.0.</span></div></div></div></div></div></blockquote><div><br></div><div>=
The breaking point is headed to gcc9 and clang11. There&#39;s no compelling=
 FreeBSD project use case where people need to compile FreeBSD programs wit=
h compilers older than that. Though the difference matters mostly to compil=
ing FreeBSD itself (which doesn&#39;t work with gcc older than 12 or 13 or =
clang older than a couple of releases. The delta for the system headers is =
approximately 0 for all these changes, though, since most of the #defines a=
re for FreeBSD itself, not our headers.</div><div>=C2=A0</div><blockquote c=
lass=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px soli=
d rgb(204,204,204);padding-left:1ex"><div><div style=3D"font-family:&quot;H=
elvetica Neue&quot;,Helvetica,Arial,sans-serif;font-size:16px"><div dir=3D"=
ltr">Due basically to the licensing issues, GCC 4.2 became a natural refere=
nce for GCC versions.=C2=A0 At some point there were vendors actually shipp=
ing FreeBSD with GCC 4.2, and i<span><span style=3D"color:rgb(0,0,0);font-f=
amily:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-size:16px"=
>t was not a huge cost to keep GCC versions above 4.2 properly discriminate=
d.</span></span></div></div></div></blockquote><div><br></div><div>True... =
But that&#39;s ancient history at this point...</div><div>=C2=A0</div><bloc=
kquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:=
1px solid rgb(204,204,204);padding-left:1ex"><div><div style=3D"font-family=
:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-size:16px"><div=
 dir=3D"ltr"><span><span style=3D"color:rgb(0,0,0);font-family:&quot;Helvet=
ica Neue&quot;,Helvetica,Arial,sans-serif;font-size:16px">But then you are =
right that it doesn&#39;t really matter that much. At least the alloc_size =
attributes are only defined for the FORTIFY_SOURCE in some linux libc imple=
mentation that I looked at. We define them unconditionally but I don&#39;t =
recall them being useful.</span></span></div></div></div></blockquote><div>=
<br></div><div>We use them in a few dozen places in the tree, but the only =
visible ones to system headers are for malloc, calloc and realloc. Keeping =
the fringe definitions wasn&#39;t too useful, but if they turn out to be le=
ss than fringe, I&#39;ll cope. Most of the odd edge cases we had, though, w=
ere poorly documented and/or had the versions wrong because of transient bu=
gs in gcc. :(. It&#39;s time to start over.</div><div><br></div><div>Of cou=
rse, sys/cdefs.h could also benefit from some reorg, and a man page, but on=
e thing at a time.</div><div><br></div><div>Warner</div><div><br></div><blo=
ckquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left=
:1px solid rgb(204,204,204);padding-left:1ex"><div style=3D"font-family:&qu=
ot;Helvetica Neue&quot;,Helvetica,Arial,sans-serif;font-size:16px"><div dir=
=3D"ltr"><span><div dir=3D"ltr"><span style=3D"color:rgb(38,40,42);font-siz=
e:13px">Indeed. But none of the ones that I removed are affected by this qu=
irk since they are true for clang all versions.</span><br></div></span></di=
v></div><div id=3D"m_-4572619034193268714ydp834b9de9yahoo_quoted_9244353655=
"><div style=3D"font-family:&quot;Helvetica Neue&quot;,Helvetica,Arial,sans=
-serif;font-size:13px;color:rgb(38,40,42)"><div><div id=3D"m_-4572619034193=
268714ydp834b9de9yiv0721428442"><div dir=3D"ltr"><div><br clear=3D"none"></=
div><div>Warner</div></div><br clear=3D"none"><div id=3D"m_-457261903419326=
8714ydp834b9de9yiv0721428442yqt79096"><div><div dir=3D"ltr">On Sat, Jun 22,=
 2024 at 12:47=E2=80=AFPM Pedro Giffuni &lt;<a shape=3D"rect" href=3D"mailt=
o:pfg@freebsd.org" rel=3D"nofollow" target=3D"_blank">pfg@freebsd.org</a>&g=
t; wrote:<br clear=3D"none"></div><blockquote style=3D"margin:0px 0px 0px 0=
.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div sty=
le=3D"font-family:Helvetica,Arial,sans-serif;font-size:16px"><div></div>
        <div dir=3D"ltr">It was long ago when I last touched this but FWIW =
...<br clear=3D"none"></div><div dir=3D"ltr"><br clear=3D"none"></div><div =
dir=3D"ltr">clang used to report itself as GCC 4.2 and kept it&#39;s GCC ex=
tension support level consistent with that version so these version numbers=
 were relevant.</div><div dir=3D"ltr"><br clear=3D"none"></div><div dir=3D"=
ltr">Pedro.</div><div><br clear=3D"none"></div>
       =20
        </div><div id=3D"m_-4572619034193268714ydp834b9de9yiv0721428442m_16=
0829819354664847ydp3058622eyahoo_quoted_9708121018">
            <div style=3D"font-family:Helvetica,Arial,sans-serif;font-size:=
13px;color:rgb(38,40,42)">
               =20
                <div>
                        On Thursday, June 20, 2024 at 09:41:34 PM GMT-5, Wa=
rner Losh &lt;<a shape=3D"rect" href=3D"mailto:imp@freebsd.org" rel=3D"nofo=
llow" target=3D"_blank">imp@freebsd.org</a>&gt; wrote:
                    </div>
                    <div><br clear=3D"none"></div>
                    <div><br clear=3D"none"></div>
               =20
               =20
                <div><div dir=3D"ltr">The branch main has been updated by i=
mp:<br clear=3D"none"></div><div dir=3D"ltr"><br clear=3D"none"></div><div =
dir=3D"ltr">URL: <a shape=3D"rect" href=3D"https://cgit.FreeBSD.org/src/com=
mit/?id=3Dd5c01e1124ffa4adb2513e7e8d708d7072dbfc75" rel=3D"nofollow" target=
=3D"_blank">https://cgit.FreeBSD.org/src/commit/?id=3Dd5c01e1124ffa4adb2513=
e7e8d708d7072dbfc75</a><br clear=3D"none"></div><div dir=3D"ltr"><br clear=
=3D"none"></div><div dir=3D"ltr">commit d5c01e1124ffa4adb2513e7e8d708d7072d=
bfc75<br clear=3D"none"></div><div dir=3D"ltr">Author:=C2=A0 =C2=A0  Warner=
 Losh &lt;<a shape=3D"rect" href=3D"mailto:imp@FreeBSD.org" rel=3D"nofollow=
" target=3D"_blank">imp@FreeBSD.org</a>&gt;<br clear=3D"none"></div><div di=
r=3D"ltr">AuthorDate: 2024-06-20 23:03:15 +0000<br clear=3D"none"></div><di=
v dir=3D"ltr">Commit:=C2=A0 =C2=A0  Warner Losh &lt;<a shape=3D"rect" href=
=3D"mailto:imp@FreeBSD.org" rel=3D"nofollow" target=3D"_blank">imp@FreeBSD.=
org</a>&gt;<br clear=3D"none"></div><div dir=3D"ltr">CommitDate: 2024-06-21=
 02:41:09 +0000<br clear=3D"none"></div><div dir=3D"ltr"><br clear=3D"none"=
></div><div dir=3D"ltr">=C2=A0 =C2=A0 cdefs.h: Remove pre gcc 5.0 support<b=
r clear=3D"none"></div><div dir=3D"ltr">=C2=A0 =C2=A0 <br clear=3D"none"></=
div><div dir=3D"ltr">=C2=A0 =C2=A0 Reviewed by:=C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 brooks<br clear=3D"none"></div><div dir=3D"ltr">=C2=A0 =C2=A0=
 Differential Revision:=C2=A0 <a shape=3D"rect" href=3D"https://reviews.fre=
ebsd.org/D45656" rel=3D"nofollow" target=3D"_blank">https://reviews.freebsd=
.org/D45656</a><br clear=3D"none"></div><div dir=3D"ltr">=C2=A0 =C2=A0 Spon=
sored by:=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0  Netflix<br clear=3D"none"></di=
v><div dir=3D"ltr">---<br clear=3D"none"></div><div dir=3D"ltr"> sys/sys/cd=
efs.h | 54 ------------------------------------------------------<br clear=
=3D"none"></div><div dir=3D"ltr"> 1 file changed, 54 deletions(-)<br clear=
=3D"none"></div><div dir=3D"ltr"><br clear=3D"none"></div><div dir=3D"ltr">=
diff --git a/sys/sys/cdefs.h b/sys/sys/cdefs.h<br clear=3D"none"></div><div=
 dir=3D"ltr">index a6ecdca5d8b9..43d179b82020 100644<br clear=3D"none"></di=
v><div dir=3D"ltr">--- a/sys/sys/cdefs.h<br clear=3D"none"></div><div dir=
=3D"ltr">+++ b/sys/sys/cdefs.h<br clear=3D"none"></div><div dir=3D"ltr">@@ =
-164,18 +164,9 @@<br clear=3D"none"></div><div dir=3D"ltr"> #define=C2=A0=
=C2=A0=C2=A0 __aligned(x)=C2=A0=C2=A0=C2=A0 __attribute__((__aligned__(x)))=
<br clear=3D"none"></div><div dir=3D"ltr"> #define=C2=A0=C2=A0=C2=A0 __sect=
ion(x)=C2=A0=C2=A0=C2=A0 __attribute__((__section__(x)))<br clear=3D"none">=
</div><div dir=3D"ltr"> #define=C2=A0=C2=A0=C2=A0 __writeonly=C2=A0=C2=A0=
=C2=A0 __unused<br clear=3D"none"></div><div dir=3D"ltr">-#if __GNUC_PREREQ=
__(4, 3) || __has_attribute(__alloc_size__)<br clear=3D"none"></div><div di=
r=3D"ltr"> #define=C2=A0=C2=A0=C2=A0 __alloc_size(x)=C2=A0=C2=A0=C2=A0 __at=
tribute__((__alloc_size__(x)))<br clear=3D"none"></div><div dir=3D"ltr"> #d=
efine=C2=A0=C2=A0=C2=A0 __alloc_size2(n, x)=C2=A0=C2=A0=C2=A0 __attribute__=
((__alloc_size__(n, x)))<br clear=3D"none"></div><div dir=3D"ltr">-#else<br=
 clear=3D"none"></div><div dir=3D"ltr">-#define=C2=A0=C2=A0=C2=A0 __alloc_s=
ize(x)<br clear=3D"none"></div><div dir=3D"ltr">-#define=C2=A0=C2=A0=C2=A0 =
__alloc_size2(n, x)<br clear=3D"none"></div><div dir=3D"ltr">-#endif<br cle=
ar=3D"none"></div><div dir=3D"ltr">-#if __GNUC_PREREQ__(4, 9) || __has_attr=
ibute(__alloc_align__)<br clear=3D"none"></div><div dir=3D"ltr"> #define=C2=
=A0=C2=A0=C2=A0 __alloc_align(x)=C2=A0=C2=A0=C2=A0 __attribute__((__alloc_a=
lign__(x)))<br clear=3D"none"></div><div dir=3D"ltr">-#else<br clear=3D"non=
e"></div><div dir=3D"ltr">-#define=C2=A0=C2=A0=C2=A0 __alloc_align(x)<br cl=
ear=3D"none"></div><div dir=3D"ltr">-#endif<br clear=3D"none"></div><div di=
r=3D"ltr"> <br clear=3D"none"></div><div dir=3D"ltr"> /*<br clear=3D"none">=
</div><div dir=3D"ltr">=C2=A0 * Keywords added in C11.<br clear=3D"none"></=
div><div dir=3D"ltr">@@ -199,15 +190,6 @@<br clear=3D"none"></div><div dir=
=3D"ltr"> #define=C2=A0=C2=A0=C2=A0 _Alignof(x)=C2=A0=C2=A0=C2=A0 =C2=A0=C2=
=A0=C2=A0 __alignof(x)<br clear=3D"none"></div><div dir=3D"ltr"> #endif<br =
clear=3D"none"></div><div dir=3D"ltr"> <br clear=3D"none"></div><div dir=3D=
"ltr">-#if !defined(__cplusplus) &amp;&amp; !__has_extension(c_atomic) &amp=
;&amp; \<br clear=3D"none"></div><div dir=3D"ltr">-=C2=A0=C2=A0=C2=A0 !__ha=
s_extension(cxx_atomic) &amp;&amp; !__GNUC_PREREQ__(4, 7)<br clear=3D"none"=
></div><div dir=3D"ltr">-/*<br clear=3D"none"></div><div dir=3D"ltr">- * No=
 native support for _Atomic(). Place object in structure to prevent<br clea=
r=3D"none"></div><div dir=3D"ltr">- * most forms of direct non-atomic acces=
s.<br clear=3D"none"></div><div dir=3D"ltr">- */<br clear=3D"none"></div><d=
iv dir=3D"ltr">-#define=C2=A0=C2=A0=C2=A0 _Atomic(T)=C2=A0=C2=A0=C2=A0 =C2=
=A0=C2=A0=C2=A0 struct { T volatile __val; }<br clear=3D"none"></div><div d=
ir=3D"ltr">-#endif<br clear=3D"none"></div><div dir=3D"ltr">-<br clear=3D"n=
one"></div><div dir=3D"ltr"> #if defined(__cplusplus) &amp;&amp; __cplusplu=
s &gt;=3D 201103L<br clear=3D"none"></div><div dir=3D"ltr"> #define=C2=A0=
=C2=A0=C2=A0 _Noreturn=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 [[noreturn]]<br=
 clear=3D"none"></div><div dir=3D"ltr"> #else<br clear=3D"none"></div><div =
dir=3D"ltr">@@ -218,15 +200,6 @@<br clear=3D"none"></div><div dir=3D"ltr"> =
#if (defined(__cplusplus) &amp;&amp; __cplusplus &gt;=3D 201103L) || \<br c=
lear=3D"none"></div><div dir=3D"ltr">=C2=A0 =C2=A0  __has_extension(cxx_sta=
tic_assert)<br clear=3D"none"></div><div dir=3D"ltr"> #define=C2=A0=C2=A0=
=C2=A0 _Static_assert(x, y)=C2=A0=C2=A0=C2=A0 static_assert(x, y)<br clear=
=3D"none"></div><div dir=3D"ltr">-#elif __GNUC_PREREQ__(4,6) &amp;&amp; !de=
fined(__cplusplus)<br clear=3D"none"></div><div dir=3D"ltr">-/* Nothing, gc=
c 4.6 and higher has _Static_assert built-in */<br clear=3D"none"></div><di=
v dir=3D"ltr">-#elif defined(__COUNTER__)<br clear=3D"none"></div><div dir=
=3D"ltr">-#define=C2=A0=C2=A0=C2=A0 _Static_assert(x, y)=C2=A0=C2=A0=C2=A0 =
__Static_assert(x, __COUNTER__)<br clear=3D"none"></div><div dir=3D"ltr">-#=
define=C2=A0=C2=A0=C2=A0 __Static_assert(x, y)=C2=A0=C2=A0=C2=A0 ___Static_=
assert(x, y)<br clear=3D"none"></div><div dir=3D"ltr">-#define=C2=A0=C2=A0=
=C2=A0 ___Static_assert(x, y)=C2=A0=C2=A0=C2=A0 typedef char __assert_ ## y=
[(x) ? 1 : -1] \<br clear=3D"none"></div><div dir=3D"ltr">-=C2=A0=C2=A0=C2=
=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 __unused<br cl=
ear=3D"none"></div><div dir=3D"ltr">-#else<br clear=3D"none"></div><div dir=
=3D"ltr">-#define=C2=A0=C2=A0=C2=A0 _Static_assert(x, y)=C2=A0=C2=A0=C2=A0 =
struct __hack<br clear=3D"none"></div><div dir=3D"ltr"> #endif<br clear=3D"=
none"></div><div dir=3D"ltr"> #endif<br clear=3D"none"></div><div dir=3D"lt=
r"> <br clear=3D"none"></div><div dir=3D"ltr">@@ -276,7 +249,6 @@<br clear=
=3D"none"></div><div dir=3D"ltr">=C2=A0 * void bar(int myArray[__min_size(1=
0)]);<br clear=3D"none"></div><div dir=3D"ltr">=C2=A0 */<br clear=3D"none">=
</div><div dir=3D"ltr"> #if !defined(__cplusplus) &amp;&amp; \<br clear=3D"=
none"></div><div dir=3D"ltr">-=C2=A0 =C2=A0 (defined(__clang__) || __GNUC_P=
REREQ__(4, 6)) &amp;&amp; \<br clear=3D"none"></div><div dir=3D"ltr">=C2=A0=
 =C2=A0  (!defined(__STDC_VERSION__) || (__STDC_VERSION__ &gt;=3D 199901))<=
br clear=3D"none"></div><div dir=3D"ltr"> #define __min_size(x)=C2=A0=C2=A0=
=C2=A0 static (x)<br clear=3D"none"></div><div dir=3D"ltr"> #else<br clear=
=3D"none"></div><div dir=3D"ltr">@@ -302,17 +274,9 @@<br clear=3D"none"></d=
iv><div dir=3D"ltr"> #define=C2=A0=C2=A0=C2=A0 __result_use_or_ignore_check=
<br clear=3D"none"></div><div dir=3D"ltr"> #endif /* !__clang__ */<br clear=
=3D"none"></div><div dir=3D"ltr"> <br clear=3D"none"></div><div dir=3D"ltr"=
>-#if __GNUC_PREREQ__(4, 1)<br clear=3D"none"></div><div dir=3D"ltr"> #defi=
ne=C2=A0=C2=A0=C2=A0 __returns_twice=C2=A0=C2=A0=C2=A0 __attribute__((__ret=
urns_twice__))<br clear=3D"none"></div><div dir=3D"ltr">-#else<br clear=3D"=
none"></div><div dir=3D"ltr">-#define=C2=A0=C2=A0=C2=A0 __returns_twice<br =
clear=3D"none"></div><div dir=3D"ltr">-#endif<br clear=3D"none"></div><div =
dir=3D"ltr"> <br clear=3D"none"></div><div dir=3D"ltr">-#if __GNUC_PREREQ__=
(4, 6) || __has_builtin(__builtin_unreachable)<br clear=3D"none"></div><div=
 dir=3D"ltr"> #define=C2=A0=C2=A0=C2=A0 __unreachable()=C2=A0=C2=A0=C2=A0 _=
_builtin_unreachable()<br clear=3D"none"></div><div dir=3D"ltr">-#else<br c=
lear=3D"none"></div><div dir=3D"ltr">-#define=C2=A0=C2=A0=C2=A0 __unreachab=
le()=C2=A0=C2=A0=C2=A0 ((void)0)<br clear=3D"none"></div><div dir=3D"ltr">-=
#endif<br clear=3D"none"></div><div dir=3D"ltr"> <br clear=3D"none"></div><=
div dir=3D"ltr"> #if !defined(__STRICT_ANSI__) || __STDC_VERSION__ &gt;=3D =
199901<br clear=3D"none"></div><div dir=3D"ltr"> #define=C2=A0=C2=A0=C2=A0 =
__LONG_LONG_SUPPORTED<br clear=3D"none"></div><div dir=3D"ltr">@@ -353,33 +=
317,15 @@<br clear=3D"none"></div><div dir=3D"ltr"> #define=C2=A0=C2=A0=C2=
=A0 __predict_true(exp)=C2=A0 =C2=A0  __builtin_expect((exp), 1)<br clear=
=3D"none"></div><div dir=3D"ltr"> #define=C2=A0=C2=A0=C2=A0 __predict_false=
(exp)=C2=A0 =C2=A0 __builtin_expect((exp), 0)<br clear=3D"none"></div><div =
dir=3D"ltr"> <br clear=3D"none"></div><div dir=3D"ltr">-#if __GNUC_PREREQ__=
(4, 0)<br clear=3D"none"></div><div dir=3D"ltr"> #define=C2=A0=C2=A0=C2=A0 =
__null_sentinel=C2=A0=C2=A0=C2=A0 __attribute__((__sentinel__))<br clear=3D=
"none"></div><div dir=3D"ltr"> #define=C2=A0=C2=A0=C2=A0 __exported=C2=A0=
=C2=A0=C2=A0 __attribute__((__visibility__(&quot;default&quot;)))<br clear=
=3D"none"></div><div dir=3D"ltr"> #define=C2=A0=C2=A0=C2=A0 __hidden=C2=A0=
=C2=A0=C2=A0 __attribute__((__visibility__(&quot;hidden&quot;)))<br clear=
=3D"none"></div><div dir=3D"ltr">-#else<br clear=3D"none"></div><div dir=3D=
"ltr">-#define=C2=A0=C2=A0=C2=A0 __null_sentinel<br clear=3D"none"></div><d=
iv dir=3D"ltr">-#define=C2=A0=C2=A0=C2=A0 __exported<br clear=3D"none"></di=
v><div dir=3D"ltr">-#define=C2=A0=C2=A0=C2=A0 __hidden<br clear=3D"none"></=
div><div dir=3D"ltr">-#endif<br clear=3D"none"></div><div dir=3D"ltr"> <br =
clear=3D"none"></div><div dir=3D"ltr"> /*<br clear=3D"none"></div><div dir=
=3D"ltr">=C2=A0 * We define this here since &lt;stddef.h&gt;, &lt;sys/queue=
.h&gt;, and &lt;sys/types.h&gt;<br clear=3D"none"></div><div dir=3D"ltr">=
=C2=A0 * require it.<br clear=3D"none"></div><div dir=3D"ltr">=C2=A0 */<br =
clear=3D"none"></div><div dir=3D"ltr">-#if __GNUC_PREREQ__(4, 1)<br clear=
=3D"none"></div><div dir=3D"ltr"> #define=C2=A0=C2=A0=C2=A0 __offsetof(type=
, field)=C2=A0=C2=A0=C2=A0  __builtin_offsetof(type, field)<br clear=3D"non=
e"></div><div dir=3D"ltr">-#else<br clear=3D"none"></div><div dir=3D"ltr">-=
#ifndef __cplusplus<br clear=3D"none"></div><div dir=3D"ltr">-#define=C2=A0=
=C2=A0=C2=A0 __offsetof(type, field) \<br clear=3D"none"></div><div dir=3D"=
ltr">-=C2=A0=C2=A0=C2=A0 ((__size_t)(__uintptr_t)((const volatile void *)&a=
mp;((type *)0)-&gt;field))<br clear=3D"none"></div><div dir=3D"ltr">-#else<=
br clear=3D"none"></div><div dir=3D"ltr">-#define=C2=A0=C2=A0=C2=A0 __offse=
tof(type, field)=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =
=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 \<br clear=3D"none"></div><div dir=3D=
"ltr">-=C2=A0 (__offsetof__ (reinterpret_cast &lt;__size_t&gt;=C2=A0=C2=A0=
=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 \<br clear=3D"none"></div><div=
 dir=3D"ltr">-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0  (&am=
p;reinterpret_cast &lt;const volatile char &amp;&gt;=C2=A0=C2=A0=C2=A0 \<br=
 clear=3D"none"></div><div dir=3D"ltr">-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 (static_cast&lt;type *&gt; (0)-&gt;field))))<br=
 clear=3D"none"></div><div dir=3D"ltr">-#endif<br clear=3D"none"></div><div=
 dir=3D"ltr">-#endif<br clear=3D"none"></div><div dir=3D"ltr"> #define=C2=
=A0=C2=A0=C2=A0 __rangeof(type, start, end) \<br clear=3D"none"></div><div =
dir=3D"ltr"> =C2=A0=C2=A0=C2=A0 (__offsetof(type, end) - __offsetof(type, s=
tart))<br clear=3D"none"></div><div dir=3D"ltr"> <br clear=3D"none"></div><=
/div>
            </div>
        </div></div></blockquote></div></div>
</div></div>
            </div>
        </div></blockquote></div></div>

--00000000000090863b061ba49c5f--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfpjPUeCk4rfiAq5_zisG0yKWfMbMBM-0v3JrCqAQK1NkQ>