From: Joseph Myers <josmyers@redhat.com>
To: Alejandro Colomar <alx@kernel.org>
Cc: libc-alpha@sourceware.org, uecker@tugraz.at, gcc@gcc.gnu.org,
Paul Eggert <eggert@cs.ucla.edu>,
linux-man@vger.kernel.org, xry111@xry111.site, jakub@redhat.com,
lh_mouse@126.com, jwakely.gcc@gmail.com,
Richard.Earnshaw@arm.com, sam@gentoo.org,
ben.boeckel@kitware.com, heiko.eissfeldt@siemens.com,
dmalcolm@redhat.com
Subject: Re: n3294 - The restrict function attribute as a replacement of the restrict qualifier
Date: Fri, 26 Jul 2024 16:24:14 +0000 (UTC) [thread overview]
Message-ID: <ca2e8de-b5e5-45f1-8184-7d67c6e4cb8@redhat.com> (raw)
In-Reply-To: <2zazxwbvnjd5vqqqz66fpqdpzqnwjujwxeltz5rhu7camgsdmg@vvbalwgwmek3>
[-- Attachment #1: Type: text/plain, Size: 3092 bytes --]
On Wed, 10 Jul 2024, Alejandro Colomar via Gcc wrote:
> 6.7.13.x The restrict function attribute
> Constraints
> The restrict attribute shall be applied to a function.
>
> A 1‐based index can be specified in an attribute argument
> clause, to associate the attribute with the corresponding
> parameter of the function, which must be of a pointer type.
It's more appropriate to say "shall", and you need a requirement for the
pointer to be a pointer to a complete object type (it makes no sense with
function pointers, or void). That is, something like "If an attribute
argument clause is present, it shall have the form:
( constant-expression )
The constant expression shall be an integer constant expression with
positive value. It shall be the index, counting starting from 1, of a
function parameter whose type is a pointer to a complete object type.".
(That might not quite be sufficient - there are the usual questions of
exactly *when* the type needs to be complete, if it's completed part way
through the function definition, but the standard already doesn't tend to
specify such things very precisely.)
> (Optional.) The argument attribute clause may be omitted,
> which is equivalent to specifying the attribute once for
> each parameter that is a pointer.
For each parameter that is a pointer to a complete object type, or should
there be a constraint violation in this case if some are pointers to such
types and some are pointers to other types?
> If the number of elements is specified with array notation
> (or a compiler‐specific attribute), the array object to be
> considered for aliasing is a sub‐object of the original ar‐
> ray object, limited by the number of elements specifiedr
> [1].
This is semantically problematic in the absence of something like N2906
(different declarations could use different numbers of elements), and even
N2906 wouldn't help for the VLA case.
> [1] For the following prototype:
>
> [[restrict(1)]] [[restrict(2)]]
> void f(size_t n, int a[n], const int b[n]);
That declaration currently means
void f(size_t n, int a[*], const int b[*]);
(that is, the expression giving a VLA size is ignored). It's equivalent
to e.g.
void f(size_t n, int a[n + foo()], const int b[n + bar()]);
where because the size expressions are never evaluated and there's no time
defined for evaluation, it's far from clear what anything talking about
them giving an array size would even mean.
I know that "noalias" was included in some C89 drafts but removed from the
final standard after objections. Maybe someone who was around then could
explain what "noalias" was, what the problems with it were and how it
differs from "restrict", so we can make sure that any new proposals in
this area don't suffer from whatever the perceived deficiencies of
"noalias" were?
--
Joseph S. Myers
josmyers@redhat.com
next prev parent reply other threads:[~2024-07-26 16:24 UTC|newest]
Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20240705130249.14116-2-alx@kernel.org>
[not found] ` <38982a470643f766747b0ca06b27ca859a87b101.camel@xry111.site>
2024-07-05 14:37 ` [PATCH v1] Remove 'restrict' from 'nptr' in strtol(3)-like functions Alejandro Colomar
2024-07-05 15:02 ` Martin Uecker
2024-07-05 15:23 ` Alejandro Colomar
2024-07-05 15:34 ` Martin Uecker
2024-07-05 15:53 ` Alejandro Colomar
2024-07-05 16:01 ` Xi Ruoyao
2024-07-05 16:17 ` Xi Ruoyao
2024-07-05 16:24 ` Jonathan Wakely
2024-07-05 16:30 ` Martin Uecker
2024-07-05 19:28 ` Alejandro Colomar
2024-07-05 19:38 ` Jonathan Wakely
2024-07-05 19:47 ` Alejandro Colomar
2024-07-05 19:52 ` Jonathan Wakely
2024-07-05 20:11 ` Alejandro Colomar
2024-07-05 20:15 ` Emanuele Torre
2024-07-05 20:31 ` Ben Boeckel
2024-07-05 20:25 ` Martin Uecker
2024-07-05 20:28 ` Jonathan Wakely
2024-07-05 20:41 ` Alejandro Colomar
2024-07-05 20:55 ` Alejandro Colomar
2024-07-05 21:39 ` Jonathan Wakely
2024-07-05 22:02 ` Alejandro Colomar
2024-07-05 22:04 ` Alejandro Colomar
2024-07-06 2:24 ` Xi Ruoyao
2024-07-06 2:39 ` Xi Ruoyao
2024-07-06 5:51 ` [[gnu::null_terminated_string_arg(1)]] on strtol(1) (was: [PATCH v1] Remove 'restrict' from 'nptr' in strtol(3)-like) functions Alejandro Colomar
2024-07-06 6:10 ` [PATCH v1] Remove 'restrict' from 'nptr' in strtol(3)-like functions Alejandro Colomar
2024-07-06 6:11 ` Alejandro Colomar
2024-07-05 16:32 ` Sam James
2024-07-05 16:02 ` Martin Uecker
2024-07-05 16:11 ` Jonathan Wakely
2024-07-05 16:21 ` Richard Earnshaw (lists)
2024-07-05 15:54 ` LIU Hao
2024-07-05 15:55 ` Xi Ruoyao
2024-07-05 16:32 ` Alejandro Colomar
2024-07-05 17:32 ` Alejandro Colomar
2024-07-05 19:41 ` [WG14] Request for document number; strtol restrictness Alejandro Colomar
2024-07-07 15:46 ` Daniel Plakosh
2024-07-09 19:00 ` Alejandro Colomar
2024-07-09 20:04 ` Daniel Plakosh
2024-07-07 1:58 ` WG14 paper for removing restrict from nptr in strtol(3) Alejandro Colomar
2024-07-07 7:15 ` Martin Uecker
2024-07-07 11:07 ` Alejandro Colomar
2024-07-07 12:21 ` Martin Uecker
2024-07-07 13:10 ` Alejandro Colomar
2024-07-07 10:42 ` Paul Eggert
2024-07-07 12:42 ` Alejandro Colomar
2024-07-07 17:30 ` Paul Eggert
2024-07-07 22:52 ` Alejandro Colomar
2024-07-09 12:09 ` Paul Eggert
2024-07-09 17:36 ` Alejandro Colomar
2024-07-08 14:30 ` David Malcolm
2024-07-08 15:01 ` Alejandro Colomar
2024-07-08 16:05 ` Martin Uecker
2024-07-08 20:17 ` Alejandro Colomar
2024-07-09 5:58 ` Martin Uecker
2024-07-09 9:26 ` Alejandro Colomar
2024-07-08 22:48 ` David Malcolm
2024-07-09 9:07 ` Alejandro Colomar
2024-07-09 9:18 ` Jakub Jelinek
2024-07-09 10:28 ` Alejandro Colomar
2024-07-09 11:28 ` Alejandro Colomar
2024-07-09 22:42 ` n3294 - The restrict function attribute as a replacement of the restrict qualifier Alejandro Colomar
2024-07-26 16:24 ` Joseph Myers [this message]
2024-07-26 16:35 ` G. Branden Robinson
2024-07-26 19:53 ` Alejandro Colomar
2024-07-26 18:50 ` Paul Eggert
2024-07-26 20:11 ` Alejandro Colomar
2024-07-26 20:30 ` Joseph Myers
2024-07-26 21:14 ` Alejandro Colomar
2024-07-26 21:22 ` Joseph Myers
2024-07-26 21:49 ` Alejandro Colomar
2024-07-26 22:03 ` Martin Uecker
2024-07-26 22:26 ` Alejandro Colomar
2024-07-26 22:59 ` Martin Uecker
2024-07-27 8:44 ` Alejandro Colomar
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=ca2e8de-b5e5-45f1-8184-7d67c6e4cb8@redhat.com \
--to=josmyers@redhat.com \
--cc=Richard.Earnshaw@arm.com \
--cc=alx@kernel.org \
--cc=ben.boeckel@kitware.com \
--cc=dmalcolm@redhat.com \
--cc=eggert@cs.ucla.edu \
--cc=gcc@gcc.gnu.org \
--cc=heiko.eissfeldt@siemens.com \
--cc=jakub@redhat.com \
--cc=jwakely.gcc@gmail.com \
--cc=lh_mouse@126.com \
--cc=libc-alpha@sourceware.org \
--cc=linux-man@vger.kernel.org \
--cc=sam@gentoo.org \
--cc=uecker@tugraz.at \
--cc=xry111@xry111.site \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.