Imported Upstream version 2.9.0
[debian/cc1111] / support / regression / tests / bug-524195.c
1 /* Problem with inverting constants
2  */
3 #include <testfwk.h>
4
5 enum 
6   {
7     USEDFLAG = 1
8   };
9
10 typedef struct _HeapEntry HeapEntry;
11 typedef unsigned int UINT;
12
13 struct _HeapEntry
14 {
15   HeapEntry *pPrev;
16   HeapEntry *pNext;
17   UINT uSize;
18 };
19
20 static UINT _getSize1(HeapEntry *pEnt)
21 {
22   return pEnt->uSize & ~USEDFLAG;
23 }
24
25 static UINT _getSize2(HeapEntry *pEnt)
26 {
27   return pEnt->uSize & ~1;
28 }
29
30 static UINT _getSize3(HeapEntry *pEnt)
31 {
32   return pEnt->uSize & 0xFFFE;
33 }
34
35 static void
36 testMask(void)
37 {
38   HeapEntry ent;
39   ent.uSize = 123;
40
41   ASSERT(_getSize1(&ent) == 122);
42   ASSERT(_getSize2(&ent) == 122);
43   ASSERT(_getSize3(&ent) == 122);
44
45   ent.uSize = 0x1234;
46   ASSERT(_getSize1(&ent) == 0x1234);
47   ASSERT(_getSize2(&ent) == 0x1234);
48   ASSERT(_getSize3(&ent) == 0x1234);
49 }