Re: [Mingw-w64-public] Patch WS2 Inline Functions

2021-07-12 Thread Martin Storsjö

Hi Jonathan,

On Tue, 13 Jul 2021, Jonathan Marler wrote:


The problem here appears to be the inclusion of
`__attribute__((__gnu_inline__))` which is what
tells the compiler NEVER to emit the function definition.  Removing this
attribute allows the compiler
to emit the function which allows its address to be taken, and prevents
linker errors if the compiler
decides not to inline a call to it.

Note that this applies to multiple functions in the ws2 header files.

Signed-off-by: Jonathan Marler 
---
mingw-w64-headers/crt/_mingw.h.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mingw-w64-headers/crt/_mingw.h.in b/mingw-w64-headers/crt/_
mingw.h.in
index b7fb99f42..002079910 100644
--- a/mingw-w64-headers/crt/_mingw.h.in
+++ b/mingw-w64-headers/crt/_mingw.h.in
@@ -87,7 +87,7 @@ limitations in handling dllimport attribute.  */
# define __CRT_INLINE __inline
#else
# if ((__MINGW_GNUC_PREREQ(4, 3) || defined(__clang__)) &&
__STDC_VERSION__ >= 199901L)
-#  define __CRT_INLINE extern inline __attribute__((__gnu_inline__))
+#  define __CRT_INLINE extern inline
# else
#  define __CRT_INLINE extern __inline__
# endif
--
2.25.4


Your analysis is certainly correct, but I think this particular fix 
affects more cases than really needed - __CRT_INLINE is used in lots of 
places, and I think many (or at least some) of them are such where an 
external definition actually exists, and the behaviour of only taking the 
address of the external definition, and inlining only when the compiler 
thinks it's worthwhile, is the desired one.


We've got a couple other defines for inline functions, I think __mingw_ovr 
might be one that is for inline functions where there doesn't exist any 
non-inline definition elsewhere. So it might be safer (or at least less 
disruptive) to just change individual functions, where we've checked that 
there's no corresponding external definition, to use that instead of flat 
out changing the macro affecting all of them.


// Martin



___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


[Mingw-w64-public] Patch WS2 Inline Functions

2021-07-12 Thread Jonathan Marler
>From 2a06367f7c63d5782ae51af162d68ed2e783e389 Mon Sep 17 00:00:00 2001
From: Jonathan Marler 
Date: Tue, 13 Jul 2021 00:01:03 -0600
Subject: [PATCH] Remove __attribute__((__gnu_inline__)) to allow compiler to
 emit functions

The following example works with MSVC but will fail using the mingw headers:

#include 
int main(int argc, char **argv) {
return (int)&IN6_IS_ADDR_UNSPECIFIED;
}

The reason for this is because MinGW is defining this
`IN6_IS_ADDR_UNSPECIFIED` function with
`extern inline __attribute__((__gnu_inline__))`. A function defined with
these attributes will
NEVER be emitted.  This means you cannot take the address of the function
and if the compiler does not inline a call to it, then you'll get a linker
error.

In the Windows SDK in ws2ipdef.h, this function uses the `__inline`
attribute

https://docs.microsoft.com/en-us/cpp/cpp/inline-functions-cpp?view=msvc-160

> This keyword tells the compiler that inline expansion is preferred.
However, the compiler
> can create a separate instance of the function (instantiate) and create
standard calling
> linkages instead of inserting the code inline.  Two cases where this
behavior can happen are:
> * Recursive Functions
> * Functions that are referred to through a pointer elsewhere in the
translation unit.

Note that this function is not defined in any .lib or .dll file in the
Windows sdk and/or runtime,
so the only way to be able to take the address of it from the example above
is if the compiler
is able to emit the function, or if it's defined elsewhere.

The problem here appears to be the inclusion of
`__attribute__((__gnu_inline__))` which is what
tells the compiler NEVER to emit the function definition.  Removing this
attribute allows the compiler
to emit the function which allows its address to be taken, and prevents
linker errors if the compiler
decides not to inline a call to it.

Note that this applies to multiple functions in the ws2 header files.

Signed-off-by: Jonathan Marler 
---
 mingw-w64-headers/crt/_mingw.h.in | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mingw-w64-headers/crt/_mingw.h.in b/mingw-w64-headers/crt/_
mingw.h.in
index b7fb99f42..002079910 100644
--- a/mingw-w64-headers/crt/_mingw.h.in
+++ b/mingw-w64-headers/crt/_mingw.h.in
@@ -87,7 +87,7 @@ limitations in handling dllimport attribute.  */
 # define __CRT_INLINE __inline
 #else
 # if ((__MINGW_GNUC_PREREQ(4, 3) || defined(__clang__)) &&
__STDC_VERSION__ >= 199901L)
-#  define __CRT_INLINE extern inline __attribute__((__gnu_inline__))
+#  define __CRT_INLINE extern inline
 # else
 #  define __CRT_INLINE extern __inline__
 # endif
-- 
2.25.4

___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


[Mingw-w64-public] clock_nanosleep(CLOCK_MONOTONIC ...

2021-07-12 Thread Burkhardt, Glenn B Collins via Mingw-w64-public
I'm curious - why does the implementation of 'clock_nanosleep()' not work with 
CLOCK_MONOTONIC, while 'clock_gettime()' does?  Is there anything preventing an 
implementation?


___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public


Re: [Mingw-w64-public] Discussion: Need new function declarations in propvarutil.h from wine

2021-07-12 Thread LIU Hao

在 7/12/21 2:44 PM, Biswapriyo Nath 写道:

Would you like to upstream that change? I am not the author of that
commit and don't know why it was added. qt6-multimedia compiles fine
without that NTSTATUS re-definition.




FWIW, that typedef thing is a declaration, rather than a definition. This means that duplicates of 
such typedefs are allowed as long as they don't disagree with each other. I think the `#if...#endif` 
check may be removed.



--
Best regards,
LIU Hao



OpenPGP_signature
Description: OpenPGP digital signature
___
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public