📄 bug-136564.c
字号:
/* bug-136564.c loop induction*/#include <testfwk.h>volatile unsigned char p;unsigned char i_result[3];voidfoo (void){ unsigned char i; unsigned char u; static unsigned char c = '?'; u = 0; while (1) { i = 0; switch (u) { case 0: /* this BBlock _case_0_0: - changes i - jumps to the successor "_swBrk_0" */ p = 0; i = 42; /* fixed: Absent in "main.asm" */ break; case 1: /* the while loop: - inducts i - has the exit block "_swBrk_0" sdcc inserts a new BBlock "loopExitLbl" before "_swBrk_0". "loopExitLbl" becomes the new successor for the exit blocks of the while loop. In "loopExitLbl" i can be restored without interference from "_swBrk_0". */ while (c != 'x' && i < 9 ) i++; break; default: p = 2; i = 24; /* fixed: Absent in "main.asm" */ } p = i; i_result[u] = i; if (u >= 2) return; u++; }}int _strncmp ( char * first, char * last, unsigned count ){ while (--count && *first && *first == *last) { first++; last++; } return( *first - *last );}voidtestInducion(void){ foo(); ASSERT(i_result[0] == 42); ASSERT(i_result[1] == 9); ASSERT(i_result[2] == 24); ASSERT(_strncmp ("SDCC is great", "SDCC is buggy", sizeof("SDCC is" )) == 0); ASSERT(_strncmp ("SDCC is great", "SDCC is buggy", sizeof("SDCC is ")) != 0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -