No bug here. The warning says it all: the size of void  
is zero. gptr++ advances the pointer by 1*sizeof(void) 
which is still zero.

If you think you can be smart and use parentheses to 
tell the compiler it's a char*, forget it, you can't 
either. A cast value is no so-called lvalue and as such 
cannot have anything assigned to it nor can it be 
incremented.

What you need is a properly typed copy of the pointer.

char *charptr = (char *)gptr;
*charptr++ = 'A';

> Hi, All!
> Here is a little chunk of code.
> 
> /* --------------- */
> void some_func(void * gptr) {
>       *((char *)gptr++) = 'A';
> }
> /* --------------- */
> 
> [EMAIL PROTECTED] sdcc-ptr++]$ uname -o
> GNU/Linux
> [EMAIL PROTECTED] sdcc-ptr++]$ sdcc -mmcs51 -c --std-sdcc99 sdcc-ptr++-test.c
> sdcc-ptr++-test.c:2: warning 178: size of void is zero
> [EMAIL PROTECTED] sdcc-ptr++]$ c99 -c sdcc-ptr++-test.c
> [EMAIL PROTECTED] sdcc-ptr++]$
> 
> It's looks like a bug, because gcc compiles it well. Code is not generated
> for increment:
> ;------------------------------------------------------------
> ;Allocation info for local variables in function 'some_proc'
> ;------------------------------------------------------------
> ;gptr                      Allocated to registers r2 r3 r4
> ;------------------------------------------------------------
> ;sdcc-ptr++-test.c:1: void some_proc(void * gptr) {
> ;       -----------------------------------------
> ;        function some_proc
> ;       -----------------------------------------
> _some_proc:
>         ar2 = 0x02
>         ar3 = 0x03
>         ar4 = 0x04
>         ar5 = 0x05
>         ar6 = 0x06
>         ar7 = 0x07
>         ar0 = 0x00
>         ar1 = 0x01
> ;     genReceive
> ;sdcc-ptr++-test.c:2: *((char *)gptr++) = 'A';
> ;     genPointerSet
> ;     genGenPointerSet
>         mov     r2,dpl
>         mov     r3,dph
>         mov     r4,b
> ;       Peephole 238.d  removed 3 redundant moves
>         mov     a,#0x41
> ;       Peephole 253.b  replaced lcall/ret with ljmp
>         ljmp    __gptrput
>         .area CSEG    (CODE)
>         .area XINIT   (CODE)
> 
> Thank you!
> 
> -------------------------------------------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share your
> opinions on IT & business topics through brief surveys - and earn cash
> http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
> _______________________________________________
> Sdcc-user mailing list
> Sdcc-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/sdcc-user
> 



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to