All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alejandro Colomar <alx.manpages@gmail.com>
To: Martin Uecker <uecker@tugraz.at>, Joseph Myers <joseph@codesourcery.com>
Cc: Ingo Schwarze <schwarze@usta.de>,
	JeanHeyd Meneide <wg14@soasis.org>,
	linux-man@vger.kernel.org, gcc@gcc.gnu.org
Subject: Re: [PATCH] Various pages: SYNOPSIS: Use VLA syntax in function parameters
Date: Sun, 13 Nov 2022 17:34:07 +0100	[thread overview]
Message-ID: <d0fed7ea-a60e-7524-a05c-679b77570dcb@gmail.com> (raw)
In-Reply-To: <786bdaaf-cfa1-e26a-f14f-a6d4bc71b5bd@gmail.com>


[-- Attachment #1.1: Type: text/plain, Size: 4893 bytes --]



On 11/13/22 17:31, Alejandro Colomar wrote:
> 
> 
> On 11/13/22 17:28, Alejandro Colomar wrote:
>> SYNOPSIS:
>>
>> unary-operator:  . identifier
>>
>>
>> DESCRIPTION:
>>
>> -  It is not an lvalue.
>>
>>     -  This means sizeof() and _Lengthof() cannot be applied to them.
> 
> Sorry, the above is a thinko.
> 
> I wanted to say that, like sizeof() and _Lengthof(), you can't assign to it.
> 
>>     -  This prevents ambiguity with a designator in an initializer-list within 
>> a nested braced-initializer.
>>
>> -  The type of a .identifier is always an incomplete type.

Or rather, more easily prohibit explicitly using typeof(), sizeof(), and 
_Lengthof() to it.

>>
>>     -  This prevents circular dependencies involving sizeof() or _Lengthof().
>>
>> -  Shadowing rules apply.
>>
>>     -  This prevents ambiguity.
>>
>>
>> EXAMPLES:
>>
>>
>> -  Valid examples (libc):
>>
>>         int
>>         strncmp(const char s1[.n],
>>                 const char s2[.n],
>>                 size_t n);
>>
>>         int
>>         cacheflush(void addr[.nbytes],
>>                    int nbytes,
>>                    int cache);
>>
>>         long
>>         mbind(void addr[.len],
>>               unsigned long len,
>>               int mode,
>>               const unsigned long nodemask[(.maxnode + ULONG_WIDTH ‐ 1)
>>                                            / ULONG_WIDTH],
>>               unsigned long maxnode, unsigned int flags);
>>
>>         void *
>>         bsearch(const void key[.size],
>>                 const void base[.size * .nmemb],
>>                 size_t nmemb,
>>                 size_t size,
>>                 int (*compar)(const void [.size], const void [.size]));
>>
>> -  Valid examples (my own):
>>
>>         void
>>         ustr2str(char dst[restrict .len + 1],
>>                  const char src[restrict .len],
>>                  size_t len);
>>
>>         char *
>>         stpecpy(char dst[.end - .dst + 1],
>>                 char *restrict src,
>>                 char end[1]);
>>
>> -  Valid examples (from this thread):
>>
>>     -
>>         struct s { int a; };
>>         void f(int a, int b[((struct s) { .a = 1 }).a]);
>>
>>         Explanation:
>>         -  Because of shadowing rules, .a=1 refers to the struct member.
>>            -  Also, if .a referred to the parameter, it would be an rvalue, so 
>> it wouldn't be valid to assign to it.
>>         -  (...).a refers to the struct member too, since otherwise an rvalue 
>> is not expected there.
>>
>>     -
>>         void foo(struct bar { int x; char c[.x] } a, int x);
>>
>>         Explanation:
>>         -  Because of shadowing rules, [.x] refers to the struct member.
>>
>>     -
>>         struct bar { int y; };
>>         void foo(char p[((struct bar){ .y = .x }).y], int x);
>>
>>         Explanation:
>>         -  .x unambiguously refers to the parameter.
>>
>> -  Undefined behavior:
>>
>>     -
>>         struct bar { int y; };
>>         void foo(char p[((struct bar){ .y = .y }).y], int y);
>>
>>         Explanation:
>>         -  Because of shadowing rules, =.y refers to the struct member.
>>         -  .y=.y means initialize the member with itself (uninitialized use).
>>         -  (...).y refers to the struct member, since otherwise an rvalue is 
>> not expected there.
>>
>> -  Constraint violations:
>>
>>     -
>>         void foo(char (*a)[sizeof *.b], char (*b)[sizeof *.a]);
>>
>>         Explanation:
>>         -  sizeof(*.b): Cannot get size of incomplete type.
>>         -  sizeof(*.a): Cannot get size of incomplete type.
>>
>>     -
>>         void f(size_t s, int a[sizeof(1) = 1]);
>>
>>         Explanation:
>>         -  Cannot assign to rvalue.
>>
>>     -
>>         void f(size_t s, int a[.s = 1]);
>>
>>         Explanation:
>>         -  Cannot assign to rvalue.
>>
>>     -
>>         void f(size_t s, int a[sizeof(.s)]);
>>
>>         Explanation:
>>         -  sizeof(.s): Cannot get size of incomplete type.
>>
>>
>> Does this idea make sense to you?
>>
>>
>> Cheers,
>> Alex
> 

-- 
<http://www.alejandro-colomar.es/>

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2022-11-13 16:34 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-26 21:07 [PATCH] Various pages: SYNOPSIS: Use VLA syntax in function parameters Alejandro Colomar
2022-08-27 11:10 ` Ingo Schwarze
2022-08-27 12:15   ` Alejandro Colomar
2022-08-27 13:08     ` Ingo Schwarze
2022-08-27 18:38       ` Alejandro Colomar
2022-08-28 11:24         ` Alejandro Colomar
     [not found]           ` <CACqA6+mfaj6Viw+LVOG=nE350gQhCwVKXRzycVru5Oi4EJzgTg@mail.gmail.com>
2022-09-02 21:02             ` Alejandro Colomar
2022-09-02 21:57               ` Alejandro Colomar
2022-09-03 12:47                 ` Martin Uecker
2022-09-03 13:29                   ` Ingo Schwarze
2022-09-03 15:08                     ` Alejandro Colomar
2022-09-03 13:41                   ` Alejandro Colomar
2022-09-03 14:35                     ` Martin Uecker
2022-09-03 14:59                       ` Alejandro Colomar
2022-09-03 15:31                         ` Martin Uecker
2022-09-03 20:02                           ` Alejandro Colomar
2022-09-05 14:31                             ` Alejandro Colomar
2022-11-10  0:06                           ` Alejandro Colomar
2022-11-10  0:09                             ` Alejandro Colomar
2022-11-10  1:33                             ` Joseph Myers
2022-11-10  1:39                               ` Joseph Myers
2022-11-10  6:21                                 ` Martin Uecker
2022-11-10 10:09                                   ` Alejandro Colomar
2022-11-10 23:19                                   ` Joseph Myers
2022-11-10 23:28                                     ` Alejandro Colomar
2022-11-11 19:52                                     ` Martin Uecker
2022-11-12  1:09                                       ` Joseph Myers
2022-11-12  7:24                                         ` Martin Uecker
2022-11-12 12:34                                     ` Alejandro Colomar
2022-11-12 12:46                                       ` Alejandro Colomar
2022-11-12 13:03                                       ` Joseph Myers
2022-11-12 13:40                                         ` Alejandro Colomar
2022-11-12 13:58                                           ` Alejandro Colomar
2022-11-12 14:54                                           ` Joseph Myers
2022-11-12 15:35                                             ` Alejandro Colomar
2022-11-12 17:02                                               ` Joseph Myers
2022-11-12 17:08                                                 ` Alejandro Colomar
2022-11-12 15:56                                             ` Martin Uecker
2022-11-13 13:19                                               ` Alejandro Colomar
2022-11-13 13:33                                                 ` Alejandro Colomar
2022-11-13 14:02                                                   ` Alejandro Colomar
2022-11-13 14:58                                                     ` Martin Uecker
2022-11-13 15:15                                                       ` Alejandro Colomar
2022-11-13 15:32                                                         ` Martin Uecker
2022-11-13 16:25                                                           ` Alejandro Colomar
2022-11-13 16:28                                                         ` Alejandro Colomar
2022-11-13 16:31                                                           ` Alejandro Colomar
2022-11-13 16:34                                                             ` Alejandro Colomar [this message]
2022-11-13 16:56                                                               ` Alejandro Colomar
2022-11-13 19:05                                                                 ` Alejandro Colomar
2022-11-14 18:13                                                           ` Joseph Myers
2022-11-28 22:59                                                             ` Alex Colomar
2022-11-28 23:18                                                       ` Alex Colomar
2022-11-29  0:05                                                         ` Joseph Myers
2022-11-29 14:58                                                         ` Michael Matz
2022-11-29 15:17                                                           ` Uecker, Martin
2022-11-29 15:44                                                             ` Michael Matz
2022-11-29 16:58                                                               ` Uecker, Martin
2022-11-29 17:28                                                                 ` Alex Colomar
2022-11-29 16:49                                                           ` Joseph Myers
2022-11-29 16:53                                                             ` Jonathan Wakely
2022-11-29 17:00                                                               ` Martin Uecker
2022-11-29 17:19                                                                 ` Alex Colomar
2022-11-29 17:29                                                                   ` Alex Colomar
2022-12-03 21:03                                                                     ` Alejandro Colomar
2022-12-03 21:13                                                                       ` Andrew Pinski
2022-12-03 21:15                                                                       ` Martin Uecker
2022-12-03 21:18                                                                         ` Alejandro Colomar
2022-12-06  2:08                                                                       ` Joseph Myers
2022-11-14 17:52                                                 ` Joseph Myers
2022-11-14 17:57                                                   ` Alejandro Colomar
2022-11-14 18:26                                                     ` Joseph Myers
2022-11-28 23:02                                                       ` Alex Colomar
2022-11-10  9:40                             ` G. Branden Robinson
2022-11-10 10:59                               ` Alejandro Colomar
2022-11-10 17:47                                 ` Alejandro Colomar
2022-11-10 18:04                                   ` MR macro 4th argument (was: [PATCH] Various pages: SYNOPSIS: Use VLA syntax in function parameters) Alejandro Colomar
2022-11-10 18:11                                     ` Alejandro Colomar
2022-11-10 18:20                                       ` Alejandro Colomar
2022-11-10 19:37                                     ` Alejandro Colomar
2022-11-10 20:41                                       ` Alejandro Colomar
2022-11-10 22:55                                     ` G. Branden Robinson
2022-11-10 23:55                                       ` Alejandro Colomar
2022-11-11  4:44                                         ` G. Branden Robinson
2022-11-10 22:25                                 ` [PATCH] Various pages: SYNOPSIS: Use VLA syntax in function parameters G. Branden Robinson

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=d0fed7ea-a60e-7524-a05c-679b77570dcb@gmail.com \
    --to=alx.manpages@gmail.com \
    --cc=gcc@gcc.gnu.org \
    --cc=joseph@codesourcery.com \
    --cc=linux-man@vger.kernel.org \
    --cc=schwarze@usta.de \
    --cc=uecker@tugraz.at \
    --cc=wg14@soasis.org \
    /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.