Для поднятия общего настроения. Вот реальный пример бага компилятора. Техподдержка признала ошибку, в следуюшей версии она была исправлена. Сразу предупреждаю - история древняя. Исходник, Keil C51:
#define C1 ((char code *)0x1FF4)
extern char idata B1[128];
void Bug(void)
{
char idata *s;
char code *p;
s = B1;
p = C1;
do
{
*s = *p;
p++;
s++;
} while (p != C1 + 4);
}
Листинг (обратите внимание на команду CJNE DPH,#01FH,?C0003)
C51 COMPILER V6.10 BUG 12/26/2000 10:59:48 PAGE 1 C51 COMPILER V6.10, COMPILATION OF MODULE BUG OBJECT MODULE PLACED IN .\Obj\Bug.obj COMPILER INVOKED BY: C:\KEIL610A\C51\BIN\C51.EXE .\Bug.c ROM(COMPACT) OPTIMIZE(9,SIZE) REGFILE(.\Obj\mk.ORC) BROWSE ORDE -R NOINTPROMOTE MODA2 DEBUG OBJECTEXTEND CODE PRINT(.\List\Bug.lst) OBJECT(.\Obj\Bug.obj) stmt level source 1 #define C1 ((char code *)0x1FF4) 2 extern char idata B1[128]; 3 4 void Bug(void) 5 { 6 1 char idata *s; 7 1 char code *p; 8 1 9 1 s = B1; 10 1 p = C1; 11 1 do 12 1 { 13 2 *s = *p; 14 2 p++; 15 2 s++; 16 2 } while (p != C1 + 4); 17 1 } 18 C51 COMPILER V6.10 BUG 12/26/2000 10:59:48 PAGE 2 ASSEMBLY LISTING OF GENERATED OBJECT CODE ; FUNCTION Bug (BEGIN) ; SOURCE LINE # 4 ; SOURCE LINE # 5 ; SOURCE LINE # 9 ;---- Variable 's' assigned to Register 'R0' ---- 0000 7800 E MOV R0,#LOW B1 ; SOURCE LINE # 10 ;---- Variable 'p' assigned to Register 'DPTR' ---- 0002 901FF4 MOV DPTR,#01FF4H 0005 ?C0003: ; SOURCE LINE # 12 ; SOURCE LINE # 13 0005 E4 CLR A 0006 93 MOVC A,@A+DPTR 0007 F6 MOV @R0,A ; SOURCE LINE # 14 0008 A3 INC DPTR ; SOURCE LINE # 15 0009 08 INC R0 ; SOURCE LINE # 16 000A B81FF8 CJNE DPH,#01FH,?C0003 000D B8F8F5 CJNE DPL,#0F8H,?C0003 ; SOURCE LINE # 17 0010 22 RET ; FUNCTION Bug (END) MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 17 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = ---- ---- IDATA SIZE = ---- ---- BIT SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
-
- А я вот на такой баг натолкнулся при попытке изменить data alignment вложенных структур. rezident(1063 знак., 28.03.2013 16:59 - 17:05)
- Получить Internal error просто при некорректном использовании кавычек. Vladimir Ljaschko(189 знак., 28.03.2013 17:50 - 18:35)
- А я вот на такой баг натолкнулся при попытке изменить data alignment вложенных структур. rezident(1063 знак., 28.03.2013 16:59 - 17:05)