wood@DG-RTP.DG.COM (Tom Wood) (02/10/90)
With the 1.36.93 version of GCC and this input file, I get a bad
alignment error:
as: error (jackson-align.s:14): Odd address
Here's the source:
extern char *reg_names[1];
char *hello= "hi";
char *reg_names[] = { "fp31", };
Here's the sun output:
#NO_APP
gcc_compiled.:
.globl _hello
.data
LC0:
.ascii "hi\0"
.even
_hello:
.long LC0
.globl _reg_names
LC1:
.ascii "fp31\0"
_reg_names:
.long LC1
Notice that there is no invocation of ASM_OUTPUT_ALIGN before the label
_reg_names. The relevant code in varasm.c (around line 549) is:
/* Output the alignment of this data. */
for (i = 0; DECL_ALIGN (decl) >= BITS_PER_UNIT << (i + 1); i++);
if (i > 0)
ASM_OUTPUT_ALIGN (asm_out_file, i);
/* Output the name(s) of this data. */
ASM_OUTPUT_LABEL (asm_out_file, name);
In this case, DECL_ALIGN (decl) is 1, but if you leave out the array
bounds in the extern declaration it is properly aligned and everything
goes OK. I think something's going wrong in grokdeclarator\c-decl.c
around about the call to build_decl for the variable.
Film at 11.
--
Tom Wood