Imported Upstream version 2.9.0
[debian/cc1111] / support / regression / tests / bug-221100.c
1 /* bug-221100.c
2
3    If test_index is char, loses high bit when indexes table
4    workaround is to use [(unsigned int) test_index]
5  */
6 #include <testfwk.h>
7
8 #define ARRAY_SIZE  130
9
10 #ifdef SDCC_pic16
11 /* not enough pic16 data space, so put the array into the code memory */
12 code static unsigned int
13 testArray[ARRAY_SIZE] = {
14     0,   1,   2,   3,   4,   5,   6,   7,   8,   9,
15    10,  11,  12,  13,  14,  15,  16,  17,  18,  19,
16    20,  21,  22,  23,  24,  25,  26,  27,  28,  29,
17    30,  31,  32,  33,  34,  35,  36,  37,  38,  39,
18    40,  41,  42,  43,  44,  45,  46,  47,  48,  49,
19    50,  51,  52,  53,  54,  55,  56,  57,  58,  59,
20    60,  61,  62,  63,  64,  65,  66,  67,  68,  69,
21    70,  71,  72,  73,  74,  75,  76,  77,  78,  79,
22    80,  81,  82,  83,  84,  85,  86,  87,  88,  89,
23    90,  91,  92,  93,  94,  95,  96,  97,  98,  99,
24   100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
25   110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
26   120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
27 };
28 #else
29 xdata static unsigned int
30 testArray[ARRAY_SIZE];
31 #endif
32
33
34 static unsigned int test_int;
35 static unsigned char test_index;
36
37 static void
38 fetch(void)
39 {
40   test_int = testArray [test_index];
41 }
42
43 static void
44 testUnsignedCharIndex(void)
45 {
46 #ifndef SDCC_pic16
47   int i;
48   for (i = 0; i < 130; i++) {
49     testArray[i] = i;
50   }
51 #endif
52
53   test_index = 5;
54   fetch();
55   ASSERT(test_int == 5);
56
57   test_index = 129;
58   fetch();
59   ASSERT(test_int == 129);
60 }