public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* aliasing between internal zero-length-arrays and other members
@ 2018-06-04 23:39 Martin Sebor
  2018-06-05 11:42 ` Richard Biener
  0 siblings, 1 reply; 3+ messages in thread
From: Martin Sebor @ 2018-06-04 23:39 UTC (permalink / raw)
  To: GCC Mailing List

GCC silently (without -Wpedantic) accepts declarations of zero
length arrays that are followed by other members in the same
struct, such as in:

   struct A { char a, b[0], c; };

Is it intended that accesses to elements of such arrays that
alias other members be well-defined?

In my tests, GCC assumes that neither read nor write accesses
to elements of internal zero-length arrays alias other members,
so assuming those aren't bugs I wonder if the documentation
should be updated to make that clear and a warning added for
such declarations (and perhaps also accesses).

For example, the test in the following function is eliminated,
implying that GCC assumes that the access to p->b does not modify
p->c, even though with i set to 0 it would:

   void f (struct A *p, int i)
   {
     int x = p->c;
     p->b[i] = 1;
     if (x != p->c)
       __builtin_abort ();
   }

Martin

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-06-05 11:42 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-04 23:39 aliasing between internal zero-length-arrays and other members Martin Sebor
2018-06-05 11:42 ` Richard Biener
2018-06-05 12:54   ` Jakub Jelinek

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).