It may be specific to 32-bit Windows with regards to sqlite, although I'm not sure why my example would work correctly with a Linux build. Tested with 0.9.27 and latest mob. My example fails with both -m32 and -m64. sqlite does build with -m64, because WINAPI expands to nothing, and there are therefore no attributes to parse.
The macro osMultiByteToWideChar defined at sqlite-amalgamation-3240000/sqlite3.c:L40571 contains the offending cast. The actual errors reported by TCC are on different lines ("cannot use pointers here" on L41385 and some integer-from-pointer warnings). Also, I took a closer look at TODO and found that this might be a known issue: >- handle void (__attribute__() *ptr)() On Wed, 25 Jul 2018 at 11:56, Ben Bacarisse <ben.li...@bsb.me.uk> wrote: > Jonathan Newman <jonathannewman...@gmail.com> writes: > > > I happened across this issue while trying to build SQLite. I've attached > a test case. To > > summarise: > > * Start off with a function pointer, correctly assigned to a function > that has attributes, > > but cast to a void* (or indeed anything except the correct function > pointer type) > > * Cast this void* to the correct function pointer type, and call it > > * Observe that one cast+call syntax works correctly, and another results > in a > > misparse: > > * tcc thinks the type of the entire expression (cast+call) is a pointer, > instead of the > > correct return type of the called function (here, an integer). > > * gcc happily accepts both syntaxes > > * This breaks compilation of the sqlite.c amalgamation, at least on > 32-bit windows > > > > The failing syntax is perhaps unusual. It might actually be deliberately > unsupported, > > but in that case: > > * sqlite will not build without modifications > > * tcc should stop here with an error instead of erroneously treating the > expression as a > > pointer > > > > Hope someone can take a look at this. It can be worked around with some > > modifications to sqlite. > > What versions are you using (of both tcc and sqlite.c)? With > sqlite-324000 and tcc version 0.9.27 (x86_64 Linux) I get no errors, and > your test example also compiles (and runs) error-free. > > Can you cite the part of the sqlite source that causes the problem? > I could not find any similar syntax, but then "grep"ing for syntax often > does not work. > > Converting between object pointers and function pointers is not > permitted in standard C, so a test example without that would be better. > Obviously I can't investigate to see if that's an important part of the > bug because I can't see the issue to start with! > > -- > Ben. >
_______________________________________________ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel