This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: char alignment on ARM


Inder wrote:
Hi All
I have similar question as for arm
http://gcc.gnu.org/ml/gcc/2007-01/msg00691.html
consider the following program.
e.g..
----------------- align.c -----------------
int main()
{
int bc;
char a[6];
int ac;

bc = 0xffffffff;
/* fill with zeros. */
a[0] = 0x00;
a[1] = 0x01;
a[2] = 0x02;
a[3] = 0x03;
a[4] = 0x04;
a[5] = 0x05;
ac=0xeeeeeeee;
make(a);
}
void make(char* a)
{
*(unsigned long*)a = 0x12345678;
}

Is the compiler doing a right thing or is it a bug??

Your code is not Standard C.


If you want to treat the same memory locations as
different data types, use a union:

  union {
    long l;
    char c[4];
  } a;

  a.l = 0x12345678;
  a.c[0] = 0x01;

--
Michael Eager	 eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]