]> granicus.if.org Git - gc/commitdiff
Eliminate 'incompatible function pointer' warning in mark_some (MinGW/x86)
authorIvan Maidanski <ivmai@mail.ru>
Thu, 13 Apr 2017 16:19:00 +0000 (19:19 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Tue, 23 May 2017 22:22:37 +0000 (01:22 +0300)
* include/private/gc_priv.h [__MINGW32__ && __i386__ && GC_EXTERN]
(__MINGW_EXCPT_DEFINE_PSDK): Define (before any system header include);
this macro definition is needed only when extra/gc.c is compiled.
* mark.c [__MINGW32__ && __i386__] (__MINGW_EXCPT_DEFINE_PSDK): Define
(before include gc_pmark.h).

include/private/gc_priv.h
mark.c

index 71b7b0c397422ff8157ae93e79e5d29baa9af061..4afd8eca15bde05b351cc92bc7af7bbea20ab6d5 100644 (file)
 # define _USING_POSIX4A_DRAFT10 1
 #endif
 
+#if defined(__MINGW32__) && !defined(__MINGW_EXCPT_DEFINE_PSDK) \
+    && defined(__i386__) && defined(GC_EXTERN) /* defined in gc.c */
+  /* See the description in mark.c.     */
+# define __MINGW_EXCPT_DEFINE_PSDK 1
+#endif
+
 # if defined(NO_DEBUGGING) && !defined(GC_ASSERTIONS) && !defined(NDEBUG)
     /* To turn off assertion checking (in atomic_ops.h). */
 #   define NDEBUG 1
diff --git a/mark.c b/mark.c
index b29acc614af01f486a7253f4a6edf088cd9bb9e6..e4dc791502cd72dc9ae0ab9342fc56d5b56ca88c 100644 (file)
--- a/mark.c
+++ b/mark.c
  *
  */
 
+#if defined(__MINGW32__) && !defined(__MINGW_EXCPT_DEFINE_PSDK) \
+    && defined(__i386__) /* cannot use macros from gcconfig.h */
+  /* Otherwise EXCEPTION_REGISTRATION type declaration from winnt.h     */
+  /* might be used.  That declaration has "handler" callback with NTAPI */
+  /* attribute.  The proper type (with "handler" field compatible with  */
+  /* GC mark_ex_handler) is declared in excpt.h.  The given macro is    */
+  /* defined before any system header include.                          */
+# define __MINGW_EXCPT_DEFINE_PSDK 1
+#endif
+
 #include "private/gc_pmark.h"
 
 #include <stdio.h>