-
1. Data: 2010-05-14 12:04:02
Temat: WinAVR i bledy zalezne od optymalizacji
Od: Maciek <f...@i...pl>
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
-
2. Data: 2010-05-14 12:51:18
Temat: Re: WinAVR i bledy zalezne od optymalizacji
Od: "Maciek" <f...@i...pl>
Uzytkownik "Maciek" <f...@i...pl> napisal w wiadomosci
news:c7bf7c3c-7c6b-48b6-8db1-280fec0db4ee@h39g2000yq
n.googlegroups.com...
> 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
-
3. Data: 2010-05-14 14:03:25
Temat: Re: WinAVR i bledy zalezne od optymalizacji
Od: Arek <a...@...a.z.e.t.a.pl>
Maciek wrote:
> 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
>
> Pzdr,
> Maciek
--
Arek, arekmx|gazeta.pl
-
4. Data: 2010-05-14 14:33:15
Temat: Re: WinAVR i bledy zalezne od optymalizacji
Od: cepu69 <c...@t...pl>
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
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?
-
5. Data: 2010-05-24 10:43:23
Temat: Re: WinAVR i bledy zalezne od optymalizacji
Od: "Maciek" <f...@i...pl>
Użytkownik "cepu69" <c...@t...pl> napisał w wiadomości
news:hsjmvb$s02$1@inews.gazeta.pl...
> 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