I have a small testcase:
--------------
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
int
main(void)
{
struct tst_struct { uint64_t cnt; } *tst =
(struct tst_struct *) malloc (sizeof (struct tst_struct));
tst->cnt = 42;
printf ("%" PRIu64 " %" PRIu64 "\n", tst->cnt, (uint64_t) (tst->cnt /
1.0));
return 0;
}
----------------
when I compile this with tcc and run it I get a core dump. The problem
is that the stack is overwritten.
I have a fix.
------------------------
--- a/tccgen.c 2019-10-22 19:52:48.761977245 +0200
+++ b/tccgen.c 2019-10-22 22:08:08.465825842 +0200
@@ -1203,7 +1203,7 @@ ST_FUNC void save_reg_upstack(int r, int
}
#endif
/* special long long case */
- if ((p->r2 & VT_VALMASK) < VT_CONST) {
+ if (PTR_SIZE == 4 && (p->r2 & VT_VALMASK) < VT_CONST) {
sv.c.i += PTR_SIZE;
store(p->r2, &sv);
}
---------------------
But am not sure if this is the correct fix. The code generator is quite
complex.
Herman
_______________________________________________
Tinycc-devel mailing list
Tinycc-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/tinycc-devel