+2004-01-06 Bernhard Held <bernhard@bernhardheld.de>
+
+ * src/SDCCval.c (valShift): changed from 16 to 32 bit shift count
+ * support/valdiag/tests/overflow.c: added
+
2004-01-06 Jesus Calvino-Fraga <jesusc@ece.ubc.ca>
* as/mcs51/lkmain.c: stack must be after data when option -Y is not used
* src/common.h: added ifndef/define/endif macros
around the header file.
Bug reported from Jesus Calvino-Fraga
-
+
2004-01-06 Bernhard Held <bernhard@bernhardheld.de>
* sdcc.spec: updated
if (SPEC_USIGN (val->type))
{
SPEC_CVAL (val->type).v_ulong = lr ?
- (TYPE_UDWORD) floatFromVal (lval) << (TYPE_UWORD) floatFromVal (rval) : \
- (TYPE_UDWORD) floatFromVal (lval) >> (TYPE_UWORD) floatFromVal (rval);
+ (TYPE_UDWORD) floatFromVal (lval) << (TYPE_UDWORD) floatFromVal (rval) : \
+ (TYPE_UDWORD) floatFromVal (lval) >> (TYPE_UDWORD) floatFromVal (rval);
}
else
{
SPEC_CVAL (val->type).v_long = lr ?
- (TYPE_DWORD) floatFromVal (lval) << (TYPE_UWORD) floatFromVal (rval) : \
- (TYPE_DWORD) floatFromVal (lval) >> (TYPE_UWORD) floatFromVal (rval);
+ (TYPE_DWORD) floatFromVal (lval) << (TYPE_UDWORD) floatFromVal (rval) : \
+ (TYPE_DWORD) floatFromVal (lval) >> (TYPE_UDWORD) floatFromVal (rval);
}
}
else
if (SPEC_USIGN (val->type))
{
SPEC_CVAL (val->type).v_uint = lr ?
- (TYPE_UWORD) floatFromVal (lval) << (TYPE_UWORD) floatFromVal (rval) : \
- (TYPE_UWORD) floatFromVal (lval) >> (TYPE_UWORD) floatFromVal (rval);
+ (TYPE_UWORD) floatFromVal (lval) << (TYPE_UDWORD) floatFromVal (rval) : \
+ (TYPE_UWORD) floatFromVal (lval) >> (TYPE_UDWORD) floatFromVal (rval);
}
else
{
SPEC_CVAL (val->type).v_int = lr ?
- (TYPE_WORD) floatFromVal (lval) << (TYPE_UWORD) floatFromVal (rval) : \
- (TYPE_WORD) floatFromVal (lval) >> (TYPE_UWORD) floatFromVal (rval);
+ (TYPE_WORD) floatFromVal (lval) << (TYPE_UDWORD) floatFromVal (rval) : \
+ (TYPE_WORD) floatFromVal (lval) >> (TYPE_UDWORD) floatFromVal (rval);
}
}
return cheapestVal (val);
--- /dev/null
+volatile int i;
+
+#ifdef TEST0
+void foo(void)
+{
+ i = 10000 * 10000; /* WARNING(SDCC) */
+ i = 0x4000 * 0x4000; /* WARNING(SDCC) */
+}
+#endif
+
+#ifdef TEST1
+void foo(void)
+{
+ i = 1 << 10; /* WARNING(SDCC) */
+ i = 1u << 10;
+ i = 1u << 18; /* WARNING(SDCC) */
+ i = 1L << 31;
+ i = 1L << 32; /* WARNING(SDCC) */
+}
+#endif
+