+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
} 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 {
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 {
val = va_arg(ap, int);
}
#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