From: Alejandro Colomar <alx+linux-man@kernel.org>
To: Martin Uecker <uecker@tugraz.at>
Cc: Christopher Bazley <chris.bazley.wg14@gmail.com>,
"Michael Kerrisk (man7.org)" <mtk@man7.org>,
linux-man@vger.kernel.org,
Michael Kerrisk <mtk.manpages@gmail.com>,
Sam James <sam@gentoo.org>, Carlos O'Donell <carlos@redhat.com>,
"Joseph S. Myers" <josmyers@redhat.com>,
corbet@lwn.net
Subject: Re: [PATCH] man/: SYNOPSIS: Remove GNU forward-declarations of parameters for lengths of array parameters
Date: Sun, 25 Oct 2026 08:38:55 +0100 [thread overview]
Message-ID: <at2vv1isjbPZ6-34@debian> (raw)
In-Reply-To: <dd9ca27e6b4c227c08cd707aab9b0b5d495c203c.camel@tugraz.at>
[-- Attachment #1: Type: text/plain, Size: 4556 bytes --]
Hi Martin,
> Date: 2026-10-25 08:22:23+0100
> From: Martin Uecker <uecker@tugraz.at>
>
> Am Sonntag, dem 25.10.2026 um 07:59 +0100 schrieb Alejandro Colomar:
> > Hi Martin,
> >
> > > Date: 2026-10-24 20:11:10+0200
> > > From: Martin Uecker <uecker@tugraz.at>
> > >
[...]
> > > [static ...] implies that the pointer is not null, this is
> > > a standard compliant way to express this (it implies a bit
> > > more as nonnull, but compilers do not support more). Still,
> > > it gives you a real practical security benefit.
> >
> > I know you can get usefulness out of it, but the fact that you must
> > express a bound and that it doesn't mean what everyone would expect it
> > to mean makes it a broken feature, unless and until we fix the second
> > bullet by making [static n] mean the same as [[gnu::nonnull]] [n], which
> > is n3801 <https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3801.txt>.
>
> I know. Is this on the agenda?
No; it has wording issues pointed out by Joseph, and I don't have the
time or energy to address them at the moment. See [SC22WG14.36403] in
the mailing list.
Feel free to take over the paper if you have a good idea for those.
I plan to come back to it, but not this year.
[...]
> > > > > > The committee was clearly confused when they added this feature.
> > > > > > It was around the time when 'restrict' was added, which is another
> > > > > > historical mistake of the committee. In general, every feature they
> > > > > > added thinking of optimizations (and that includes these two) has
> > > > > > resulted in a mistake.
> > >
> > > It was not a mistake, it was a different set of priorities
> >
> > It was a mistake. They thought it would provide room for optimizations,
> > but nobody checked whether it was actually useful in the real world.
> > This seems to me a clear example of a design looking for users, which is
> > precisely what the C Committee should *not* do.
>
> I would assume it came from cray and they had real world
> use case for this at that time.
What is 'cray'?
[...]
> > > I think the idea of limiting access to the rest of the array did
> > > not occur to them, as this feature was only for optimization.
> >
> > And that's what I call a mistake; a big one.
> >
> > > > And indeed, I agree. This seems a case of bad design, wishing that it
> > > > might eventually be optimizable, while it wasn't and still isn't, and
> > > > also while ignoring the safety issues caused by it. We should just
> > > > pretend that the feature doesn't exist.
> > >
> > > It would potentially be useful for optimization, but I think there
> > > was a chicken-and-egg problem. Nobody used [static] and then
> > > people worked on instead optimizations more useful for existing code,
> > > so [static] also never become useful for programmers.
> >
> > That's the right approach.
> >
> > > Much later it become useful to express non-null pointers.
> >
> > It still hasn't. It will once we get rid of the bound. That is, it
> > will be useful when one can do [static] or [static *]. And even then,
> > the fact that it can't be used on function pointers makes it a bad patch
> > in the language. We need a feature that is consistent.
>
> Yes, but we do not even have a proposal and [static 1] exists today.
Actually, we do have one: n3803.
<https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3803.txt>
The wording on this one is good. I think I forgot some trivial
duplication of the diff for both the non-abstract and the abstract
declarators, but I can fix that when I arrive home, so we could have it
in time for the next meeting.
> >
> > And we also have the issue that it changes the meaning of the bound.
> > It's just terrible.
>
> The bound in [1] has no meaning in parameters,
This is not true. ISO C is just toilet paper in this regard.
It has a meaning in SDCC and GCC, and every programmer that ever wrote
[1] assigned a meaning to it. Moreover, I'm using [1] myself to express
pointers to exactly 1 element.
> so [static 1] changes
> the meaning only in a sense that that it has a stricter meaning
> that is still only a subset of what we want.
This is just not true. The standard is meaningless when it clashes with
reality and common sense. As Capt. Barbossa would say, "the [standard]
is more what you'd call "guidelines" than actual rules. Welcome aboard
the Black Pearl, Miss Turner!"
Cheers,
Alex
--
<https://www.alejandro-colomar.es>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2026-10-25 7:39 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-22 16:44 [PATCH] man/: SYNOPSIS: Remove GNU forward-declarations of parameters for lengths of array parameters Alejandro Colomar
2026-10-22 17:11 ` Martin Uecker
2026-10-22 20:01 ` Alejandro Colomar
2026-10-22 20:27 ` Alejandro Colomar
2026-10-22 17:37 ` Christopher Bazley
[not found] ` <CAEHU8x9jET+vcrR0NpDz6t57egQG8TZqx5XtV52srH9ZRvdxSQ@mail.gmail.com>
2026-10-22 19:54 ` Alejandro Colomar
2026-10-23 11:53 ` Michael Kerrisk (man7.org)
2026-10-23 12:42 ` Alejandro Colomar
2026-10-23 15:51 ` Christopher Bazley
2026-10-24 12:45 ` Michael Kerrisk (man7.org)
2026-10-24 13:38 ` Alejandro Colomar
2026-10-24 16:16 ` Christopher Bazley
2026-10-24 16:37 ` Alejandro Colomar
2026-10-24 18:11 ` Martin Uecker
2026-10-25 6:59 ` Alejandro Colomar
2026-10-25 7:22 ` Martin Uecker
2026-10-25 7:38 ` Alejandro Colomar [this message]
2026-10-25 8:29 ` G. Branden Robinson
2026-10-25 8:40 ` Martin Uecker
2026-10-25 8:57 ` Alejandro Colomar
2026-10-25 9:05 ` Martin Uecker
2026-10-23 12:11 ` Alejandro Colomar
2026-10-22 22:03 ` Mark Harris
2026-10-23 9:43 ` Alejandro Colomar
2026-10-23 19:32 ` Mark Harris
2026-10-23 20:06 ` Alejandro Colomar
2026-10-24 7:53 ` Martin Uecker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=at2vv1isjbPZ6-34@debian \
--to=alx+linux-man@kernel.org \
--cc=carlos@redhat.com \
--cc=chris.bazley.wg14@gmail.com \
--cc=corbet@lwn.net \
--cc=josmyers@redhat.com \
--cc=linux-man@vger.kernel.org \
--cc=mtk.manpages@gmail.com \
--cc=mtk@man7.org \
--cc=sam@gentoo.org \
--cc=uecker@tugraz.at \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox