Dear Garst,

I can see that there are some friends in the list that had found a bug from
what Oleg has originally posted ( struct declararation and use ). I would
like to respectfully ask this friends what the bug is an which is the
interesting code it generates, so I ( and probably someone else ) could
learn something new. It is clear that I missed something. Can the original
Oleg's code work fine ? Why ? Thanks in advance.

Kind regards,

Roberto G. Berner
booleangene...@ciudad.com.ar
4308 3500 tel
4308 3700 fax




----- Original Message -----
From: Garst R. Reese <re...@isn.net>
To: <mspgcc-users@lists.sourceforge.net>
Sent: Thursday, January 23, 2003 3:22 AM
Subject: Re: [Mspgcc-users] Struct assignment BUG...


> Will this work?
>
>  struct x{                /* struct of type x defined */
>  int a,b,c,d;
>  };
>
>  struct x *v[2];    /* array of 2 pointers to structures of type x -
> somewhere initialized, OK ?*/
>
>  /* swap pointers, this means after call to swap(), v[0] holds the
> pointer to v[1]   and viceversa */
>  void swap(void)    {
>  struct x *tmp;    /*  this declaraction should be struct x *tmp , and
> not the variable tmp of type struct x !!! */
>   *tmp = *v[0];
>   *v[0]= *v[1];
>   *v[1]= *tmp;
>  }
>
> Garst
> >
> Luke Hoffmann wrote:
> >
> > Sorry, I'll repost this with HTML off ;-)
> >
> > Hi,
> >
> > I think Oleg has identified a real problem.
> > Lets leave the question of "is this the best way to do it" aside and
realise that "this is the best way to reproduce the problem"!
> >
> > The swap() function is not swapping pointers it is swapping the contents
of structures.
> > This is a valid operation and it produces some interesting code!
> > Clearly the code attached is wrong.
> >
> > Regards
> > Luke
> >
> >
> > -----Original Message-----
> > From: Roberto G. Berner [mailto:booleangene...@ciudad.com.ar]
> > Sent: Thursday, 23 January 2003 4:36 AM
> > To: mspgcc-users@lists.sourceforge.net
> > Subject: RE: [Mspgcc-users] Struct assignment BUG...
> >
> > Dear Oleg:
> >
> > Accept my apologies, but I think you should check this. If I am wrong,
please excuse me.
> >
> >
> > struct x{                /* struct of type x defined */
> > int a,b,c,d;
> > };
> >
> > struct x *v[2];    /* array of 2 pointers to structures of type x -
somewhere initialized, OK ?*/
> >
> > /* swap pointers, this means after call to swap(), v[0] holds the
pointer to v[1] and viceversa */
> > void swap(void)    {
> > struct x tmp;    /*  this declaraction should be struct x *tmp , and not
the variable tmp of type struct x !!! */
> >  tmp=*v[0];        /* tmp should be a pointer in order to hold pointers
properly */
> >  *v[0]=*v[1];
> >  *v[1]=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: mspgcc-users@lists.sourceforge.net
> > Sent: Wednesday, January 22, 2003 4:27 PM
> > Subject: Re: [Mspgcc-users] Struct assignment BUG...
> >
> > 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.
> >
> >
> >
>
>
> -------------------------------------------------------
> This SF.net email is sponsored by: Scholarships for Techies!
> Can't afford IT training? All 2003 ictp students receive scholarships.
> Get hands-on training in Microsoft, Cisco, Sun, Linux/UNIX, and more.
> www.ictp.com/training/sourceforge.asp
> _______________________________________________
> Mspgcc-users mailing list
> Mspgcc-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/mspgcc-users
>
>


Reply via email to