Dear Roberto, The swap function exchanges the contents of the two structs, pointed by elements of the array v, so there a significant BUG.
I have omitted the initialization section for simplicity (I have found this BUG in a real program, which is very large). Anyway the stack pointer should point to the same location at the function exit and entry (unless it is explicitly changed, using asm statement for example). Thanks, Oleg. ----- Original Message ----- From: Roberto G. Berner To: mspgcc-users@lists.sourceforge.net Sent: Wednesday, January 22, 2003 6:25 PM Subject: RE: [Mspgcc-users] Struct assignment BUG... Dear Oleg: I think that there is no bug. Should I suggest trying ... struct x *tmp; Kind regards, Roberto G. Berner booleangene...@ciudad.com.ar ven...@increible.homelinux.com 4308 3500 tel 4308 3700 fax 15 5122 6095 cel ----- Original Message ----- From: Oleg Skydan To: MSP430 GCC Sent: Wednesday, January 22, 2003 12:12 PM Subject: [Mspgcc-users] Struct assignment BUG... Hello, All ! I found a significant BUG when using struct assignment. Here is the sample: struct x{ int a,b,c,d; }; struct x *v[2]; void swap(void) { struct x tmp; tmp=*v[0]; *v[0]=*v[1]; *v[1]=tmp; } And here is GCC's listing (with -O option): /*********************** * Function `swap' ***********************/ swap: /* prologue: frame size = 8 */ .L__FrameSize_swap=0x8 .L__FrameOffset_swap=0x8 sub #8, r1 ; 8, fpn 0 /* prologue end (size=1) */ mov &v, r15 mov @r15+, @r1 mov @r15+, 2(r1) mov @r15+, 4(r1) mov @r15+, 6(r1) mov &v+2, r14 mov @r14+, 0(r15) mov @r14+, 2(r15) mov @r14+, 4(r15) mov @r14+, 6(r15) mov &v+2, r15 mov @r1+, 0(r15) ;We should not change the stack pointer here ! mov @r1+, 2(r15) mov @r1+, 4(r15) mov @r1+, 6(r15) /* epilogue: frame size=8 */ add #8, r1 ;After this command the stack pointer points to the illegal location ! ret /* epilogue end (size=2) */ /* function swap size 33 (30) */ I use win32 version (from 10.12.2002). Thanks, Oleg.