[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