From 96f58a2bc347e24ac72a28c26c1d3b37da4e08ee Mon Sep 17 00:00:00 2001 From: michaelh Date: Fri, 1 Mar 2002 05:00:06 +0000 Subject: [PATCH] * Added. git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1957 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- support/regression/tests/bug-524195.c | 49 +++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 support/regression/tests/bug-524195.c diff --git a/support/regression/tests/bug-524195.c b/support/regression/tests/bug-524195.c new file mode 100644 index 00000000..8ebb2648 --- /dev/null +++ b/support/regression/tests/bug-524195.c @@ -0,0 +1,49 @@ +/* Problem with inverting constants + */ +#include + +enum + { + USEDFLAG = 1 + }; + +typedef struct _HeapEntry HeapEntry; +typedef unsigned int UINT; + +struct _HeapEntry +{ + HeapEntry *pPrev; + HeapEntry *pNext; + UINT uSize; +}; + +static UINT _getSize1(HeapEntry *pEnt) +{ + return pEnt->uSize & ~USEDFLAG; +} + +static UINT _getSize2(HeapEntry *pEnt) +{ + return pEnt->uSize & ~1; +} + +static UINT _getSize3(HeapEntry *pEnt) +{ + return pEnt->uSize & 0xFFFE; +} + +static void +testMask(void) +{ + HeapEntry ent; + ent.uSize = 123; + + ASSERT(_getSize1(&ent) == 122); + ASSERT(_getSize2(&ent) == 122); + ASSERT(_getSize3(&ent) == 122); + + ent.uSize = 0x1234; + ASSERT(_getSize1(&ent) == 0x1234); + ASSERT(_getSize2(&ent) == 0x1234); + ASSERT(_getSize3(&ent) == 0x1234); +} -- 2.30.2