summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
bcffce0)
* support/regression/tests/bug-
1493710.c: added
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4195
4a8a32a2-be11-0410-ad9d-
d568d2c75423
+2006-05-27 Bernhard Held <bernhard AT bernhardheld.de>
+
+ * src/SDCCcse.c (findPointerSet): fixed bug #1493710
+ * support/regression/tests/bug-1493710.c: added
+
2006-05-27 Borut Razem <borut.razem AT siol.net>
* support/regression/fwk/lib/testfwk.c: define array in _printn() as
2006-05-27 Borut Razem <borut.razem AT siol.net>
* support/regression/fwk/lib/testfwk.c: define array in _printn() as
+#ifdef RANGEHUNT
+ printf ("replaceAllSymBySym\n\t");
+ printOperand (from, stdout);
+ printf ("\nwith\t");
+ printOperand (to, stdout);
+ printf ("\n");
+#endif
for (lic = ic; lic; lic = lic->next)
{
int siaddr;
for (lic = ic; lic; lic = lic->next)
{
int siaddr;
getSize (operandType (IC_RIGHT (cdp->diCode))) ==
getSize (operandType (rop)))
{
getSize (operandType (IC_RIGHT (cdp->diCode))) ==
getSize (operandType (rop)))
{
+ if (IS_SPEC (operandType (IC_RIGHT (cdp->diCode))) &&
+ SPEC_USIGN (operandType (IC_RIGHT (cdp->diCode))) !=
+ SPEC_USIGN (operandType (rop)))
+ {
+ /* bug #1493710
+ Reminder for Bernhard: check of signedness
+ could be unnecessary together with 'checkSign', if
+ signedness of operation is stored in ic */
+ return 0;
+ }
*opp = IC_RIGHT (cdp->diCode);
return 1;
}
*opp = IC_RIGHT (cdp->diCode);
return 1;
}
--- /dev/null
+/*
+ bug-1493710.c
+
+ cse
+ findPointerSet with signed/unsigned operands
+*/
+
+#include <testfwk.h>
+
+struct
+ {
+ unsigned char a;
+ } st = { 0xff };
+
+signed char c = -1;
+
+unsigned char f (void)
+{
+ st.a += c;
+ return st.a > 8;
+}
+
+void
+testFindPointerSet(void)
+{
+ ASSERT(f() == 1);
+}