Hello, On Sat, 29 Dec 2018, Jonathan Newman wrote:
Hi,This seems to be the issue causing SQLite compilation to fail (or at least part of it/related to it). When a function pointer is declared in a particular way, it seems that __stdcall (and presumably other attributes?) are ignored. As a result, TCC thinks the function is caller-cleanup when it is not, and the stack gets "cleaned" twice. See the full test case attached. As a quick summary, This works: ((int __stdcall (*)(int, int, int))some_stdcall_func) (2, 0, 0); And so does this: ((int(*__stdcall)(int, int, int))some_stdcall_func) (3, 0, 0); But this fails: ((int(__stdcall*)(int, int, int))some_stdcall_func) (4, 0, 0);
Aha, thanks for the investigation and testcase, that really helps. This particular problem is now fixed on trunk. Lacking win32 I can't check if it completely fixes SQLite, but at least your testcase works when cross compiled and run under wine.
Ciao, Michael. _______________________________________________ Tinycc-devel mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/tinycc-devel
