finding strict aliasing problems
Brad Lucier
lucier@math.purdue.edu
Tue May 1 15:57:00 GMT 2001
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
More information about the Gcc
mailing list