* device/lib/pic16/libc/stdio/printf_small.c,
* device/lib/pic16/libc/stdio/printf_timy.c: pop int from stack for
char arguments, as char varargs are cast to int by the caller,
hopefully fixes #
1604915 (other device libraries are still affected)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4511
4a8a32a2-be11-0410-ad9d-
d568d2c75423
+2006-12-10 Raphael Neider <rneider AT web.de>
+
+ * device/lib/pic16/libc/stdio/vfprintf.c,
+ * device/lib/pic16/libc/stdio/printf_small.c,
+ * device/lib/pic16/libc/stdio/printf_timy.c: pop int from stack for
+ char arguments, as char varargs are cast to int by the caller,
+ hopefully fixes #1604915 (other device libraries are still affected)
+
2006-12-10 Erik Petrich <epetrich AT ivorytower.norman.ok.us>
* src/mcs51/ralloc.c (packRegsForAssign),
* src/hc08/ralloc.c (packRegsForAssign): fixed bug #1605880
2006-12-10 Erik Petrich <epetrich AT ivorytower.norman.ok.us>
* src/mcs51/ralloc.c (packRegsForAssign),
* src/hc08/ralloc.c (packRegsForAssign): fixed bug #1605880
} else {
if(flong)val = va_arg(ap, long);
else
} else {
if(flong)val = va_arg(ap, long);
else
- if(fchar)val = va_arg(ap, char);
+ if(fchar)val = (char)va_arg(ap, int); // FIXME: SDCC casts char arguments into ints
else {
val = va_arg(ap, int);
}
else {
val = va_arg(ap, int);
}
} else {
if(ISLONG)val = va_arg(ap, long);
else
} else {
if(ISLONG)val = va_arg(ap, long);
else
- if(ISCHAR)val = va_arg(ap, char);
- else {
+ if(ISCHAR) {
+ val = (unsigned char)va_arg(ap, int); // FIXME: SDCC casts char arguments into ints
+ if (!HAVESIGN) val = (char)val; // FIXME cont'd: sign-extend if required
+ } else {
#endif
}
else if(fchar) {
#endif
}
else if(fchar) {
- val = va_arg(ap, char);
+ val = (unsigned char)va_arg(ap, int); // FIXME: SDCC passes 1-byte char varargs as 2-byte ints...
+ if (!nosign) val = (char) val; // (FIXME cont'd) sign extend if required
#if _DEBUG
io_long(val);
#endif
#if _DEBUG
io_long(val);
#endif