All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.