I'm re-sending this because it was bumped off the list by spam. Compiling:-
**************************************************************** // ARRAY_BUG.C demonstrates a compiler bug unsigned char transducer_type; long output_scale; void show_array_bug( int limit, int gain, int p_off, int q_off ) { static const long std_gain[4] = { 0L, 1L, 2L, 3L }; output_scale = ((long)limit * std_gain[transducer_type]); } **************************************************************** With:- $ msp430-gcc -mmcu=msp430x149 -O2 -S array_bug.c Produces:- **************************************************************** .file "array_bug.c" .arch msp430x149 /* Hardware multiplier registers: */ __MPY=0x130 __MPYS=0x132 __MAC=0x134 __MACS=0x136 __OP2=0x138 __RESLO=0x13a __RESHI=0x13c __SUMEXT=0x13e .text .p2align 1,0 .type std_gain.0,@object .size std_gain.0,16 std_gain.0: .long 0 .long 1 .long 2 .long 3 .p2align 1,0 .global show_array_bug .type show_array_bug,@function /*********************** * Function `show_array_bug' ***********************/ show_array_bug: /* prologue: frame size = 0 */ .L__FrameSize_show_array_bug=0x0 .L__FrameOffset_show_array_bug=0x0 /* prologue end (size=0) */ mov r15, r14 mov r14, r15 rla r15 subc r15, r15 inv r15 rla r14 rlc r15 rla r14 rlc r15 rla r14 rlc r15 rla r14 rlc r15 rla r14 rlc r15 mov r14, &output_scale mov r15, &output_scale+2 ret /* epilogue: not required */ /* function show_array_bug size 20 (19) */ .Lfe1: .size show_array_bug,.Lfe1-show_array_bug /********* End of function ******/ .comm transducer_type,1 .comm output_scale,4,2 /********************************************************************* * File array_bug.c: code size: 20 words (0x14) * incl. words in prologues: 0, epilogues: 1 *********************************************************************/ **************************************************************** Those unused parameters have a big effect on the code produced. In the real function from which this is excerpted, they are all used, of course. -- Rick Jenkins <r...@hartmantech.com> Hartman Technica http://www.hartmantech.com Phone +1 (403) 230-1987 voice & fax 221 35 Avenue. N.E., Calgary, Alberta, Canada T2E 2K5