Maciek
Guest
Fri May 14, 2010 2:04 pm
Czesc,
mam taki oto fragment kodu kompilowany w WinAVR-20100110:
//////////////////////////////////////////
struct _TestStruct
{
unsigned Flag :1;
};
unsigned char TestByte;
int TestInt;
TestByte = ((struct _TestStruct *)&TestInt)->Flag;
///////////////////////////////////////////
Po skompilowaniu z optymalizacja -O0, -O1 wszystko jest ok. Natomiast
po skompilowaniu z optymalizacja -O1, -O2, -O3, -Os,
kompilator wypisuje blad: "dereferencing type-punned pointer will
break strict-aliasing rules".
O co w tym chodzi?
Pzdr,
Maciek
Arek
Guest
Fri May 14, 2010 2:04 pm
Maciek wrote:
Quote:
Po skompilowaniu z optymalizacja -O0, -O1 wszystko jest ok. Natomiast
po skompilowaniu z optymalizacja -O1, -O2, -O3, -Os,
kompilator wypisuje blad: "dereferencing type-punned pointer will
break strict-aliasing rules".
O co w tym chodzi?
http://cellperformance.beyond3d.com/articles/2006/06/understanding-strict-
aliasing.html
Quote:
Pzdr,
Maciek
--
Arek, arekmx|gazeta.pl
Maciek
Guest
Fri May 14, 2010 2:04 pm
Uzytkownik "Maciek" <fornes@interia.pl> napisal w wiadomosci
news:c7bf7c3c-7c6b-48b6-8db1-280fec0db4ee@h39g2000yqn.googlegroups.com...
Quote:
Czesc,
mam taki oto fragment kodu kompilowany w WinAVR-20100110:
//////////////////////////////////////////
struct _TestStruct
{
unsigned Flag :1;
};
unsigned char TestByte;
int TestInt;
TestByte = ((struct _TestStruct *)&TestInt)->Flag;
///////////////////////////////////////////
Po skompilowaniu z optymalizacja -O0, -O1 wszystko jest ok. Natomiast
po skompilowaniu z optymalizacja -O1, -O2, -O3, -Os,
kompilator wypisuje blad: "dereferencing type-punned pointer will
break strict-aliasing rules".
Dodam tylko, ze gdy zmienna TestInt jest typu 'char' - blad sie nie pojawia.
Blad dotyczy oczywiscie linii, w ktorej wartosc bitu Flag jest przepisywana
do zmiennej TestByte.
Maciek
cepu69
Guest
Fri May 14, 2010 2:33 pm
Maciek wrote:
Quote:
//////////////////////////////////////////
struct _TestStruct
{
unsigned Flag :1;
};
unsigned char TestByte;
int TestInt;
TestByte = ((struct _TestStruct *)&TestInt)->Flag;
///////////////////////////////////////////
Po skompilowaniu z optymalizacja -O0, -O1 wszystko jest ok. Natomiast
po skompilowaniu z optymalizacja -O1, -O2, -O3, -Os,
kompilator wypisuje blad: "dereferencing type-punned pointer will
break strict-aliasing rules".
O co w tym chodzi?
http://mail.opensolaris.org/pipermail/tools-gcc/2005-August/000047.html
czego? gcc -Wall -O2 -g strict_aliasing.c -o strict_aliasing
strict_aliasing.c: In function ?main?:
strict_aliasing.c:13: warning: dereferencing type-punned pointer will break
strict-aliasing rules
czego? ./strict_aliasing
Testbyte 0, Testint 1
czego? gcc -Wall -O1 -g strict_aliasing.c -o strict_aliasing
czego? ./strict_aliasing
Testbyte 1, Testint 1
Zadanie domowe : Dowiedziec sie czym rozni sie kod wynikowy przy uzyciu
optymalizacji -O1 a -O2?
Maciek
Guest
Mon May 24, 2010 10:43 am
Użytkownik "cepu69" <cepu69@tlen.pl> napisał w wiadomości
news:hsjmvb$s02$1@inews.gazeta.pl...
Quote:
Maciek wrote:
//////////////////////////////////////////
struct _TestStruct
{
unsigned Flag :1;
};
unsigned char TestByte;
int TestInt;
TestByte = ((struct _TestStruct *)&TestInt)->Flag;
///////////////////////////////////////////
Po skompilowaniu z optymalizacja -O0, -O1 wszystko jest ok. Natomiast
po skompilowaniu z optymalizacja -O1, -O2, -O3, -Os,
kompilator wypisuje blad: "dereferencing type-punned pointer will
break strict-aliasing rules".
O co w tym chodzi?
http://mail.opensolaris.org/pipermail/tools-gcc/2005-August/000047.html
Dzięki. Już wszytko jasne.
Pzdr,
Maciek