On Thu, 2005-08-25 at 21:24 -0700, Steve Zook wrote: > Using m68k-elf-gcc with either revision 3.3.3 or 3.4.4, I compile the > following test program (as a C++ program) at -O2 to an object file: > > > struct sA { unsigned volatile const B; > unsigned volatile C; > unsigned const D; > unsigned E; }; > void Function( sA & A ) { A.B; A.C; A.D; A.E; } > > > The object file I get looks like (edited for brevity): > > .globl _Z8FunctionR2sA > .type _Z8FunctionR2sA, @function > _Z8FunctionR2sA: > link.w %a6,#0 > move.l 8(%a6),%a0 | A, A This is a load of A.B. It's the first member of the structure, and thus, is at offset 0, and is also known as "A". I imagine if you rearrange the struct so that B and C are farther into the struct (IE add a dummy member in front, etc), you'd see the more explicit loads you are looking for. > move.l 4(%a0),%d0 | <variable>.C, <variable>.C > unlk %a6 > rts > > I was expecting that A.B and A.C would both generate loads since they are > both volatile, and that A.D and A.E would not, but only A.C loads. > > Have I misunderstood how volatile const should work, or is this a bug I > should submit? > >