http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47796
--- Comment #7 from qihua.dai at intel dot com 2011-02-21 13:02:41 UTC --- Hi, I used -Wall -O2. But no warning for this situation. gcc will print strict-aliasing related warning. struct tmp1_s tmp; tmp.a = 0xc; // this code line is removed unexpected after -O2 optimization tmp.d = 0x1; // this code line is removed unexpected after -O2 optimization data = *((unsigned int *)pTmp); But, below code can fix above this warning. But this code might be removed by gcc �CO2 in the situation of this bug. struct tmp1_s tmp; unsigned int *pData; tmp.a = 0xc; // this code line is removed unexpected after -O2 optimization tmp.d = 0x1; // this code line is removed unexpected after -O2 optimization pData = (unsigned int *)pTmp; data = *pData; In addition, if cannot access bit field structure using an unsigned int, how to share different bit field structure? For example, void func(unsigned int data) data can be bit field structure tmp1_s, or tmp2_s according to bit[31] (0 is tmp1_s, 1 is tmp2_s) struct tmp1_s { unsigned int a : 12; unsigned int b : 12; unsigned int c : 7; unsigned int d : 1; } struct tmp2_s { unsigned int a : 1; unsigned int b : 12; unsigned int c : 12; unsigned int d : 6; unsigned int e : 1; } - Qihua -----Original Message----- From: jakub at gcc dot gnu.org [mailto:gcc-bugzi...@gcc.gnu.org] Sent: 2011年2月21日 16:29 To: Dai, Qihua Subject: [Bug c/47796] The code to write to a bit_field data strucuture will be removed unexpectedly with gcc 4.5.1 -O2 option http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47796 Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED CC| |jakub at gcc dot gnu.org Resolution| |INVALID --- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-02-21 08:29:03 UTC --- Undefined behavior means anything can happen, so wondering why undefined behavior doesn't always behave the same doesn't make any sense. And, both gcc 4.4.5 and 4.5.2 do warn about this with -Wstrict-aliasing=1 -O2: pr47796.c:25: warning: dereferencing type-punned pointer might break strict-aliasing rules pr47796.c:31: warning: dereferencing type-punned pointer might break strict-aliasing rules Please stop reopening this. -- Configure bugmail: http://gcc.gnu.org/bugzilla/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You reported the bug.