Для поднятия общего настроения. Вот реальный пример бага компилятора. Техподдержка признала ошибку, в следуюшей версии она была исправлена. Сразу предупреждаю - история древняя. Исходник, 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)