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]
Other format: [Raw text]

Re: RTL alias analysis


Ian Lance Taylor <ian@airs.com> writes:
> kaih@khms.westfalen.de (Kai Henningsen) writes:
>> void test(void)
>> {
>>         union { int i; double d; } u;
>>         int *ip;
>>         double *dp;
>>         int ii;
>>         double dd;
>> 
>>         ip = &u.i;
>>         *ip = 15;
>>         ii = *ip;
>>         dp = &u.d;
>>         *dp = 1.5;
>>         dd = *dp;
>>         printf("ii=%d dd=%f\n", ii, dd);
>> }
>> 
>> So you're saying this function is not valid?
>
> That function is valid.

I'm going to regret this, but... I don't follow.  How is Kai's testcase
different from:

int ii;
double dd;
void foo (int *ip, double *dp)
{
  *ip = 15;
  ii = *ip;
  *dp = 1.5;
  dd = *dp;
}

void test (void)
{
  union { int i; double d; } u;
  foo (&u.i, &u.d);
}

?  foo() can write *dp before reading *ip.

Richard


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