diff --git a/c.texi b/c.texi index 2c93e36..66f4837 100644 --- a/c.texi +++ b/c.texi @@ -6391,6 +6391,7 @@ aliasing that can cause the problem: struct a @{ int size; char *data; @}; struct b @{ int size; char *data; @}; struct a foo; +struct a *p = &foo; struct b *q = (struct b *) &foo; @end example @@ -6408,12 +6409,12 @@ x = p->size; @noindent allows GNU C to assume that @code{p->size} is still zero when it is -copied into @code{x}. The compiler ``knows'' that @code{q} points to -a @code{struct b} and this cannot overlap with a @code{struct a}. +copied into @code{x}. The GNU C compiler ``knows'' that @code{q} +points to a @code{struct b} and this is not supposed to overlap with a +@code{struct a}. Other compilers might also do this optimization. -Other compilers might also do this optimization. The ISO C standard -considers such code erroneous, precisely so that this optimization -will be valid. +The ISO C standard considers such code erroneous, precisely so that +this optimization will not be incorrect. @node Structure Assignment @section Structure Assignment