public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "pascal_cuoq at hotmail dot com" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c/109956] GCC reserves 9 bytes for struct s { int a; char b; char t[]; } x = {1, 2, 3};
Date: Fri, 26 May 2023 12:03:59 +0000	[thread overview]
Message-ID: <bug-109956-4-daUsqSsNBG@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-109956-4@http.gcc.gnu.org/bugzilla/>

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109956

--- Comment #13 from Pascal Cuoq <pascal_cuoq at hotmail dot com> ---
@Martin

I completely agree with comment 12, however about the last paragraph, I would
like to point out that for purposes of memcpy'ing to or from such a struct with
initialized FAM, it is enough to recommend that programmers use the simple
formula “offsetof(struct foo, t) + n * sizeof(char)” (or “offsetof(struct foo,
t[n])”. The part that is not copied is the part that they did not intend to use
when they chose the initializer of the FAM, and that they cannot portably use
because of the padding that may or may not exist for a different target
architecture.

So since:

First, GCC currently does not always reserve enough room to allow “memcpy(…, …,
sizeof(struct foo) + n * sizeof(char))”, and 

second, using the time-proven formula as argument of malloc technically does
not always allocate enough space to make it valid to access p->t[n-1] according
to the strict interpretation of the words “it behaves as if that member were
replaced with the longest array (with the same element type) that would not
make the structure larger than the object being accessed”,

we might as well start recommending that C programmers use “offsetof(struct
foo, t) + n * sizeof(char)” as argument of memcpy, and either clarify the
meaning of the words “it behaves as if…” in the C standard or prepare for a
very unpleasant discussion when we have to tell them the formula they have to
use as argument of malloc.

  parent reply	other threads:[~2023-05-26 12:04 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-24 16:09 [Bug c/109956] New: " pascal_cuoq at hotmail dot com
2023-05-24 16:20 ` [Bug c/109956] " pinskia at gcc dot gnu.org
2023-05-24 16:28 ` muecker at gwdg dot de
2023-05-24 18:30 ` pascal_cuoq at hotmail dot com
2023-05-24 19:18 ` muecker at gwdg dot de
2023-05-24 20:25 ` muecker at gwdg dot de
2023-05-24 21:50 ` joseph at codesourcery dot com
2023-05-24 21:55 ` joseph at codesourcery dot com
2023-05-25  5:23 ` amonakov at gcc dot gnu.org
2023-05-25  5:29 ` muecker at gwdg dot de
2023-05-25  5:30 ` pinskia at gcc dot gnu.org
2023-05-25  7:53 ` rguenth at gcc dot gnu.org
2023-05-25 16:42 ` muecker at gwdg dot de
2023-05-26 12:03 ` pascal_cuoq at hotmail dot com [this message]
2023-05-26 16:24 ` muecker at gwdg dot de
2023-08-08 14:57 ` muecker at gwdg dot de
2024-03-14 20:17 ` pinskia at gcc dot gnu.org

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=bug-109956-4-daUsqSsNBG@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).