volatile const structure members in C++

Steve Zook Steve@Zook.com
Fri Aug 26 04:25:00 GMT 2005

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
	link.w %a6,#0
	move.l 8(%a6),%a0	| A, A
	move.l 4(%a0),%d0	| <variable>.C, <variable>.C
	unlk %a6

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?

More information about the Gcc-help mailing list