[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Tinycc-devel] minor patches + standard compliant inline functions
From: |
Michael Matz |
Subject: |
Re: [Tinycc-devel] minor patches + standard compliant inline functions |
Date: |
Mon, 17 Jun 2019 16:34:42 +0000 (UTC) |
User-agent: |
Alpine 2.21 (LSU 202 2017-01-01) |
Hi,
On Mon, 17 Jun 2019, Christian Jullien wrote:
> Your patch gives many new warnings when I do a reproducible tcc build on
Aha! That is the reason why that warning was conditional on !VT_INLINE
(which in the abstract doesn't make sense and I removed that). Gnah, so
this is all a bit between a rock and a hard place. The mingw headers do
this:
PVOID GetFiberData(void);
__CRT_INLINE PVOID GetFiberData(void) {}
The mingw headers are (and _mingw.h before the patch was) written with
gnu-inline behaviour in mind, so __CRT_INLINE is "extern inline
__attribute__((gnu-inline))", and that's then okay.
Now with C99 inline behaviour __CRT_INLINE has to be "static inline", but
can't be, and there are actually no valid choices for it anymore:
* it can't be "extern inline", because that emits a global instantiation
of all these inlines, creating multiple def errors when e.g. linking
together two .c files that include windows.h
* it can't be "inline" (without extern or static), because in C99 inline
semantics there _must_ be an external definition somewhere in a program,
when the respective function is used (and the definition in the header
would not be one); that could potentially be visible when taking the
address of such function. But mingw isn't written in a way to provide
such external definition, and we can't change this with only header
hackery.
* it can't be "static inline", because that's simply not allowed given
the above declaration (actually this shouldn't be just a warning but a
hard error).
So, ..., hmmm. Gnah! But I said that already.
I don't see another way than to add back an implementation for the
gnu-inline behaviour and activate it via an attribute. If noone has an
better idea I'm going to work on that :-/
> But, more annoying it now terminates with:
>
> ./include/winapi/winnt.h:1141: error: 'ExChange' undeclared
Uhh, that's a nice one. There are two decls for the function in question:
__CRT_INLINE PVOID InterlockedCompareExchangePointer(
PVOID volatile *Destination,PVOID ExChange,PVOID Comperand) {}
(the definition) and then later from winbase.h:
PVOID _InterlockedCompareExchangePointer(
PVOID volatile *Destination,PVOID Exchange,PVOID Comperand);
Spot the difference! ;-) It's wrong of TCC to take the names from the
non-definition, I've fixed this in mob. I've also added back the hack of
ignoring the warning when inline is given until gnu-inline is implemented
again.
Ciao,
Michael.
- [Tinycc-devel] minor patches + standard compliant inline functions, Petr Skočík, 2019/06/11
- Re: [Tinycc-devel] minor patches + standard compliant inline functions, Christian Jullien, 2019/06/12
- Re: [Tinycc-devel] minor patches + standard compliant inline functions, Christian Jullien, 2019/06/12
- Re: [Tinycc-devel] minor patches + standard compliant inline functions, Christian Jullien, 2019/06/12
- Re: [Tinycc-devel] minor patches + standard compliant inline functions, Petr Skočík, 2019/06/12
- Re: [Tinycc-devel] minor patches + standard compliant inline functions, Christian Jullien, 2019/06/12
- Re: [Tinycc-devel] minor patches + standard compliant inline functions, Petr Skočík, 2019/06/12
- Re: [Tinycc-devel] minor patches + standard compliant inline functions, Christian Jullien, 2019/06/12
Re: [Tinycc-devel] minor patches + standard compliant inline functions, Michael Matz, 2019/06/16