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


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

So, there are some obvious aliasing problems with this code
(especially in the bignum code, where the bignum digits are
accessed either as 64-bit unsigned ints or 16-bit unsigned ints).

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, but not both, even though to get to a valid double pointer
I need to increment the int pointer.  Is this OK?

Compiled with yesterday's 3.1 with -Wall -W without any warnings.

Brad


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