[th/gcc4] apps fixing guide #2 - aliasing violations.

Tomasz Narloch eyev w poczta.fm
Sob, 6 Maj 2006, 03:04:36 CEST


Grzegorz Konopko wrote:
> [...]
> /************************************************************************/
> short f(short *sptr, long *lptr)
> {
>         short x = *sptr;
>         *lptr = 0;
>         return *sptr + x;
>
> }
>
> short fail()
> {
>         union
>         {
>                 short s[2];
>                 long l;
>         } u;
>         u.s[0] = 4711;
>         return f(&u.s[0], &u.l);
> }
>
> int main ()
> {
>         printf("%d\n",fail());
>
>         return 0;
> }
> /************************************************************************/
>
> [...]
>   
Nie orienruje sie w optymalizowaniu kodu z -O2 itp, ale
dla ciekawosci przetestowalem ten programik i u mnie (athlon) zauwazylem
ciekawe wyniki:
jesli funkcje f napiszemy tak (dodamy printf() ):
/***********************************************************************/
short f(short *sptr, long *lptr)
{
        short x = *sptr;
        //printf("wersja(4711): %p\n", &x);
        //printf("wersja(9422): %p\n", sptr);

        *lptr = 0;
        //printf("wersja(0):  %p\n", sptr);
        return *sptr + x;
}
/**********************************************************************/
to wzaleznosci jaki komentarz printf-a odkomentuje to po kompilacji z
-O2 program zwraca inny wynik:)
To dopiero jest sztuczka:))))))

Pozdrawiam TOmek





----------------------------------------------------------------------
Poznaj Stefana! Zmien komunikator! >>> http://link.interia.pl/f1924



Więcej informacji o liście dyskusyjnej pld-devel-pl