RTV forum PL | NewsGroups PL

Błędy związane z aliasowaniem przy kompilacji z WinAVR: zrozumienie problemu z optymalizacją

WinAVR i bledy zalezne od optymalizacji

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Błędy związane z aliasowaniem przy kompilacji z WinAVR: zrozumienie problemu z optymalizacją

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

elektroda NewsGroups Forum Index - Elektronika Polska - Błędy związane z aliasowaniem przy kompilacji z WinAVR: zrozumienie problemu z optymalizacją

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map