This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: finding strict aliasing problems


> From: Brad Lucier <lucier@math.purdue.edu>
> Date: Tue, 1 May 2001 17:55:04 -0500 (EST)

> One thing I do *not* want to do is start a repeat of
> the 1999 discussion.

> But is this a problem?

> #include <stdlib.h>
> #include <stdio.h>

> void
> foo (long int x)
> {
>   printf("%d %f\n", *((int *) x), *(double *) (((int *) x) + 1));
> }


> int
> main()
> {
>   long int x = (long int) malloc (sizeof(int)+sizeof(double));
>   *(int *)x = 1;
>   *(double *) (((int *) x) + 1) = 2.0;
>   foo(x);
>   return 1;
> }

> Here, each word of memory is accessed either as double or int.  Is
> this OK?

Yes, the code is fine.  Now, it is not fine to hit the double at +1 on
an int pointer.  You'd have to hit an int on a +1 of a double pointer
for that to work.  If your system manages the +1 to be a +2 when it
matter...  then you're ok.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]