[atomic] Fix pointer type passed to InterlockedExchangeAdd()
authorBehdad Esfahbod <behdad@behdad.org>
Mon, 10 Sep 2018 09:05:33 +0000 (11:05 +0200)
committerBehdad Esfahbod <behdad@behdad.org>
Mon, 10 Sep 2018 09:05:33 +0000 (11:05 +0200)
John Emmas reported on mailing list that build with MSVC is failing.
Not sure why bots don't catch it, but this should fix.

src/hb-atomic.hh

index d494c89..6e3672c 100644 (file)
@@ -98,7 +98,7 @@ static inline void _hb_memory_barrier (void)
 {
 #if !defined(MemoryBarrier)
   /* MinGW has a convoluted history of supporting MemoryBarrier. */
-  long dummy = 0;
+  LONG dummy = 0;
   InterlockedExchange (&dummy, 1);
 #else
   MemoryBarrier ();
@@ -106,7 +106,8 @@ static inline void _hb_memory_barrier (void)
 }
 #define _hb_memory_barrier()                   _hb_memory_barrier ()
 
-#define hb_atomic_int_impl_add(AI, V)          InterlockedExchangeAdd ((unsigned *) (AI), (V))
+#define hb_atomic_int_impl_add(AI, V)          InterlockedExchangeAdd ((LONG *) (AI), (V))
+static_assert ((sizeof (LONG) == sizeof (int)), "");
 
 #define hb_atomic_ptr_impl_cmpexch(P,O,N)      (InterlockedCompareExchangePointer ((void **) (P), (void *) (N), (void *) (O)) == (void *) (O))