[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[avr-gcc-list] An old but unfixed bug
From: |
Alexander Popov |
Subject: |
[avr-gcc-list] An old but unfixed bug |
Date: |
Wed, 22 Aug 2001 00:31:57 +0300 |
Hello,
Here I send a warning for an old bug which is still not fixed. It is a
general
GCC bug, not AVR specific.
When we have :
unsigned char *p;
p=(unsigned char*)SOME_ADDR;
do {
// do something
} while(p++<(unsigned char *)0xffff);
The while loop is totaly skipped and the body is executed only once!
This is even more annoying than optimizing an idle loop by decrementing
by 625 instead of 1.
Best regards,
Alexander Popov
bug.c
Description: Binary data
**** int main(void) {
.stabn 68,0,8,.LM1-main
.LM1:
/* prologue: frame size=3 */
ldi r28,lo8(__stack - 3)
ldi r29,hi8(__stack - 3)
out __SP_H__,r29
out __SP_L__,r28
/* prologue end (size=4) */
.LBB2:
**** volatile unsigned char *p;
**** volatile unsigned char i;
****
**** i=0;
.stabn 68,0,13,.LM2-main
.LM2:
std Y+3,__zero_reg__
**** p=(unsigned char *)(RAMEND+1);
.stabn 68,0,14,.LM3-main
.LM3:
ldi r24,lo8(608)
ldi r25,hi8(608)
std Y+1,r24
std Y+2,r25
.L15:
**** do {
**** i++;
.stabn 68,0,16,.LM4-main
.LM4:
ldd r24,Y+3
subi r24,lo8(-(1))
std Y+3,r24
**** } while(p++<(unsigned char *)0xffff);
.stabn 68,0,18,.LM5-main
.LM5:
ldd r24,Y+1
ldd r25,Y+2
adiw r24,1
std Y+1,r24
std Y+2,r25
sbiw r24,0
brlo .L15
nop
****
**** while(42) {
.stabn 68,0,20,.LM6-main
.LM6:
.L19:
rjmp .L19
**** }
**** int main(void) {
.stabn 68,0,8,.LM1-main
.LM1:
/* prologue: frame size=1 */
ldi r28,lo8(__stack - 1)
ldi r29,hi8(__stack - 1)
out __SP_H__,r29
out __SP_L__,r28
/* prologue end (size=4) */
**** volatile unsigned char *p;
**** volatile unsigned char i;
****
**** i=0;
.stabn 68,0,13,.LM2-main
.LM2:
.LBB2:
std Y+1,__zero_reg__
**** p=(unsigned char *)(RAMEND+1);
**** do {
**** i++;
.stabn 68,0,16,.LM3-main
.LM3:
ldd r18,Y+1
subi r18,lo8(-(1))
std Y+1,r18
**** } while(p++<(unsigned char *)0xffff);
****
**** while(42) {
.stabn 68,0,20,.LM4-main
.LM4:
.L21:
rjmp .L21
- [avr-gcc-list] An old but unfixed bug,
Alexander Popov <=