From: SourceForge.net <no...@so...> - 2003-03-19 12:13:47
|
Bugs item #706240, was opened at 2003-03-19 13:26 You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=706240&group_id=599 Category: msc51(8051) target Group: None Status: Open Resolution: None Priority: 5 Submitted By: Jarek Zych (zych) Assigned to: Nobody/Anonymous (nobody) Summary: Not all local variables stored over func call Initial Comment: SDCC : mcs51/gbz80/z80/avr/ds390/pic14/TININative/xa51 2.3.4 (Mar 18 2003) (MINGW32) In "testfunction" when calling "i=getchfunction()"; only register allocated by variable "n" is push-poped ;test.c:15: i=getchfunction(); ; genCall push ar2 lcall _getchfunction mov a,dpl pop ar2 ; genAssign My workaround is to initialize variable b0 to any value. In that case push-pop are generated to variables "n" and "b0" and everything works fine. =========================================== unsigned char xxxxx; unsigned char getchfunction(void); void testfunction(void) { unsigned char n=0; unsigned char b0; for(;;) { unsigned char i; i=getchfunction(); // <<< BUG >>> if(i & 0x80) { if(i&0xf0== 0x83) { n=1; b0=i; } else n=0; } else if(n==1) { xxxxx=i+b0; // <<< b0 value is invalid>>> break; } } } ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=706240&group_id=599 |
From: SourceForge.net <no...@so...> - 2003-03-19 13:02:26
|
Bugs item #706240, was opened at 2003-03-19 13:26 You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=706240&group_id=599 >Category: Live range problems Group: None Status: Open Resolution: None Priority: 5 Submitted By: Jarek Zych (zych) Assigned to: Nobody/Anonymous (nobody) Summary: Not all local variables stored over func call Initial Comment: SDCC : mcs51/gbz80/z80/avr/ds390/pic14/TININative/xa51 2.3.4 (Mar 18 2003) (MINGW32) In "testfunction" when calling "i=getchfunction()"; only register allocated by variable "n" is push-poped ;test.c:15: i=getchfunction(); ; genCall push ar2 lcall _getchfunction mov a,dpl pop ar2 ; genAssign My workaround is to initialize variable b0 to any value. In that case push-pop are generated to variables "n" and "b0" and everything works fine. =========================================== unsigned char xxxxx; unsigned char getchfunction(void); void testfunction(void) { unsigned char n=0; unsigned char b0; for(;;) { unsigned char i; i=getchfunction(); // <<< BUG >>> if(i & 0x80) { if(i&0xf0== 0x83) { n=1; b0=i; } else n=0; } else if(n==1) { xxxxx=i+b0; // <<< b0 value is invalid>>> break; } } } ---------------------------------------------------------------------- >Comment By: Bernhard Held (bernhardheld) Date: 2003-03-19 14:15 Message: Logged In: YES user_id=203539 Ok, there is a bug in SDCC. But your source is bugy too, and it doesn't even expose the bug: > if(i&0xf0== 0x83) will hardly do what you want, it's always false. Then b0 is never assigned a value, n is always 0, and at the end b0 is never ever used. Replacing the line above with: if ((i & 0xf0) == 0x83) exposes however the bug! Bernhard ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=706240&group_id=599 |
From: SourceForge.net <no...@so...> - 2003-03-19 14:23:37
|
Bugs item #706240, was opened at 2003-03-19 04:26 You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=706240&group_id=599 Category: Live range problems Group: None Status: Open Resolution: None Priority: 5 Submitted By: Jarek Zych (zych) Assigned to: Nobody/Anonymous (nobody) Summary: Not all local variables stored over func call Initial Comment: SDCC : mcs51/gbz80/z80/avr/ds390/pic14/TININative/xa51 2.3.4 (Mar 18 2003) (MINGW32) In "testfunction" when calling "i=getchfunction()"; only register allocated by variable "n" is push-poped ;test.c:15: i=getchfunction(); ; genCall push ar2 lcall _getchfunction mov a,dpl pop ar2 ; genAssign My workaround is to initialize variable b0 to any value. In that case push-pop are generated to variables "n" and "b0" and everything works fine. =========================================== unsigned char xxxxx; unsigned char getchfunction(void); void testfunction(void) { unsigned char n=0; unsigned char b0; for(;;) { unsigned char i; i=getchfunction(); // <<< BUG >>> if(i & 0x80) { if(i&0xf0== 0x83) { n=1; b0=i; } else n=0; } else if(n==1) { xxxxx=i+b0; // <<< b0 value is invalid>>> break; } } } ---------------------------------------------------------------------- Comment By: Nobody/Anonymous (nobody) Date: 2003-03-19 06:35 Message: Logged In: NO Well ... I tried to shorten my program as much as possible to expose the bug clearly. As a result my example wasn't correct! Sorry!!! Fine that You still coud see the problem. ---------------------------------------------------------------------- Comment By: Bernhard Held (bernhardheld) Date: 2003-03-19 05:15 Message: Logged In: YES user_id=203539 Ok, there is a bug in SDCC. But your source is bugy too, and it doesn't even expose the bug: > if(i&0xf0== 0x83) will hardly do what you want, it's always false. Then b0 is never assigned a value, n is always 0, and at the end b0 is never ever used. Replacing the line above with: if ((i & 0xf0) == 0x83) exposes however the bug! Bernhard ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=706240&group_id=599 |
From: SourceForge.net <no...@so...> - 2003-12-16 17:47:45
|
Bugs item #706240, was opened at 2003-03-19 06:26 Message generated for change (Comment added) made by epetrich You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=706240&group_id=599 Category: Live range problems >Group: fixed >Status: Closed >Resolution: Fixed Priority: 5 Submitted By: Jarek Zych (zych) Assigned to: Nobody/Anonymous (nobody) Summary: Not all local variables stored over func call Initial Comment: SDCC : mcs51/gbz80/z80/avr/ds390/pic14/TININative/xa51 2.3.4 (Mar 18 2003) (MINGW32) In "testfunction" when calling "i=getchfunction()"; only register allocated by variable "n" is push-poped ;test.c:15: i=getchfunction(); ; genCall push ar2 lcall _getchfunction mov a,dpl pop ar2 ; genAssign My workaround is to initialize variable b0 to any value. In that case push-pop are generated to variables "n" and "b0" and everything works fine. =========================================== unsigned char xxxxx; unsigned char getchfunction(void); void testfunction(void) { unsigned char n=0; unsigned char b0; for(;;) { unsigned char i; i=getchfunction(); // <<< BUG >>> if(i & 0x80) { if(i&0xf0== 0x83) { n=1; b0=i; } else n=0; } else if(n==1) { xxxxx=i+b0; // <<< b0 value is invalid>>> break; } } } ---------------------------------------------------------------------- >Comment By: Erik Petrich (epetrich) Date: 2003-12-16 11:47 Message: Logged In: YES user_id=635249 I have verified that the new live range code (specifcally, Klaus's 2003/10/28 cvs commit) has fixed this bug. ---------------------------------------------------------------------- Comment By: Nobody/Anonymous (nobody) Date: 2003-03-19 08:35 Message: Logged In: NO Well ... I tried to shorten my program as much as possible to expose the bug clearly. As a result my example wasn't correct! Sorry!!! Fine that You still coud see the problem. ---------------------------------------------------------------------- Comment By: Bernhard Held (bernhardheld) Date: 2003-03-19 07:15 Message: Logged In: YES user_id=203539 Ok, there is a bug in SDCC. But your source is bugy too, and it doesn't even expose the bug: > if(i&0xf0== 0x83) will hardly do what you want, it's always false. Then b0 is never assigned a value, n is always 0, and at the end b0 is never ever used. Replacing the line above with: if ((i & 0xf0) == 0x83) exposes however the bug! Bernhard ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=706240&group_id=599 |