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)18 WORD 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)31 void 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