1 /* 2 bug-2448.c 3 */ 4 5 #include <testfwk.h> 6 7 typedef unsigned char BYTE; 8 typedef unsigned int WORD; 9 10 volatile BYTE MYDAT[8]; 11 12 #define MAKEWORD(msb, lsb) (((WORD) (msb) << 8) | (lsb)) 13 14 #define SETUP_VALUE() MAKEWORD (MYDAT[3], MYDAT[2]) 15 #define SETUP_INDEX() MAKEWORD (MYDAT[5], MYDAT[4]) 16 #define SETUP_LENGTH() MAKEWORD (MYDAT[7], MYDAT[6]) 17 badfunc(BYTE cmd)18WORD badfunc (BYTE cmd) 19 { 20 WORD val = SETUP_VALUE(); 21 WORD idx = SETUP_INDEX(); 22 WORD len = SETUP_LENGTH(); 23 volatile WORD r = val + idx + len; 24 25 if (cmd == 0) 26 return len; 27 else 28 return 0; 29 } 30 testBug(void)31void testBug (void) 32 { 33 MYDAT[2] = 10; // val 34 MYDAT[3] = 0; 35 MYDAT[4] = 11; // idx 36 MYDAT[5] = 0; 37 MYDAT[6] = 12; // len 38 MYDAT[7] = 0; 39 40 ASSERT (badfunc (0) == 12); 41 ASSERT (badfunc (1) == 0); 42 } 43