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.
next prev 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: linkBe 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).