From: Alexandre Julliard <julliard@winehq.org>
Date: Fri, 7 May 2010 20:38:32 +0000 (+0200)
Subject: include: Force inlining exported API functions to avoid duplicate definitions.
X-Git-Url: http://source.winehq.org/git/wine.git/?a=commitdiff_plain;h=f7f4e9e3be9f0bff65857637030dfb0718bfb8bd

include: Force inlining exported API functions to avoid duplicate definitions.
---

diff --git a/include/winbase.h b/include/winbase.h
index cca85d5..6bb4866 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -2318,9 +2318,9 @@ extern WCHAR * CDECL wine_get_dos_file_name( LPCSTR str );
 /* Interlocked functions */
 
 #ifdef __i386__
-# if defined(__GNUC__) && !defined(_NTSYSTEM_)
+# if defined(__GNUC__) && !defined(_NTSYSTEM_) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
 
-static inline LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )
+static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )
 {
     LONG ret;
     __asm__ __volatile__( "lock; cmpxchgl %2,(%1)"
@@ -2328,7 +2328,7 @@ static inline LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG
     return ret;
 }
 
-static inline LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
+static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
 {
     LONG ret;
     __asm__ __volatile__( "lock; xchgl %0,(%1)"
@@ -2336,7 +2336,7 @@ static inline LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
     return ret;
 }
 
-static inline LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )
+static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )
 {
     LONG ret;
     __asm__ __volatile__( "lock; xaddl %0,(%1)"
@@ -2344,12 +2344,12 @@ static inline LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr
     return ret;
 }
 
-static inline LONG WINAPI InterlockedIncrement( LONG volatile *dest )
+static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
 {
     return InterlockedExchangeAdd( dest, 1 ) + 1;
 }
 
-static inline LONG WINAPI InterlockedDecrement( LONG volatile *dest )
+static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )
 {
     return InterlockedExchangeAdd( dest, -1 ) - 1;
 }
@@ -2364,12 +2364,12 @@ WINBASEAPI LONG WINAPI InterlockedIncrement(LONG volatile*);
 
 # endif  /* __GNUC__ */
 
-static inline PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare )
+static FORCEINLINE PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare )
 {
     return (PVOID)InterlockedCompareExchange( (LONG volatile*)dest, (LONG)xchg, (LONG)compare );
 }
 
-static inline PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val )
+static FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val )
 {
     return (PVOID)InterlockedExchange( (LONG volatile*)dest, (LONG)val );
 }
@@ -2378,7 +2378,7 @@ WINBASEAPI LONGLONG WINAPI InterlockedCompareExchange64(LONGLONG volatile*,LONGL
 
 #else  /* __i386__ */
 
-static inline LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )
+static FORCEINLINE LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG xchg, LONG compare )
 {
 #if defined(__x86_64__) && defined(__GNUC__)
     LONG ret;
@@ -2391,7 +2391,7 @@ static inline LONG WINAPI InterlockedCompareExchange( LONG volatile *dest, LONG
 #endif
 }
 
-static inline PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare )
+static FORCEINLINE PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *dest, PVOID xchg, PVOID compare )
 {
 #if defined(__x86_64__) && defined(__GNUC__)
     PVOID ret;
@@ -2404,7 +2404,7 @@ static inline PVOID WINAPI InterlockedCompareExchangePointer( PVOID volatile *de
 #endif
 }
 
-static inline LONGLONG WINAPI InterlockedCompareExchange64( LONGLONG volatile *dest, LONGLONG xchg, LONGLONG compare )
+static FORCEINLINE LONGLONG WINAPI InterlockedCompareExchange64( LONGLONG volatile *dest, LONGLONG xchg, LONGLONG compare )
 {
 #if defined(__x86_64__) && defined(__GNUC__)
     LONGLONG ret;
@@ -2417,7 +2417,7 @@ static inline LONGLONG WINAPI InterlockedCompareExchange64( LONGLONG volatile *d
 #endif
 }
 
-static inline LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
+static FORCEINLINE LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
 {
 #if defined(__x86_64__) && defined(__GNUC__)
     LONG ret;
@@ -2430,7 +2430,7 @@ static inline LONG WINAPI InterlockedExchange( LONG volatile *dest, LONG val )
 #endif
 }
 
-static inline PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val )
+static FORCEINLINE PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVOID val )
 {
 #if defined(__x86_64__) && defined(__GNUC__)
     PVOID ret;
@@ -2443,7 +2443,7 @@ static inline PVOID WINAPI InterlockedExchangePointer( PVOID volatile *dest, PVO
 #endif
 }
 
-static inline LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )
+static FORCEINLINE LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr )
 {
 #if defined(__x86_64__) && defined(__GNUC__)
     LONG ret;
@@ -2456,12 +2456,12 @@ static inline LONG WINAPI InterlockedExchangeAdd( LONG volatile *dest, LONG incr
 #endif
 }
 
-static inline LONG WINAPI InterlockedIncrement( LONG volatile *dest )
+static FORCEINLINE LONG WINAPI InterlockedIncrement( LONG volatile *dest )
 {
     return InterlockedExchangeAdd( dest, 1 ) + 1;
 }
 
-static inline LONG WINAPI InterlockedDecrement( LONG volatile *dest )
+static FORCEINLINE LONG WINAPI InterlockedDecrement( LONG volatile *dest )
 {
     return InterlockedExchangeAdd( dest, -1 ) - 1;
 }
@@ -2470,9 +2470,9 @@ static inline LONG WINAPI InterlockedDecrement( LONG volatile *dest )
 
 /* A few optimizations for gcc */
 
-#if defined(__GNUC__) && !defined(__MINGW32__) && (defined(__i386__) || defined(__x86_64__))
+#if defined(__GNUC__) && !defined(__MINGW32__) && (defined(__i386__) || defined(__x86_64__)) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
 
-static inline DWORD WINAPI GetLastError(void)
+static FORCEINLINE DWORD WINAPI GetLastError(void)
 {
     DWORD ret;
 #ifdef __x86_64__
@@ -2483,7 +2483,7 @@ static inline DWORD WINAPI GetLastError(void)
     return ret;
 }
 
-static inline DWORD WINAPI GetCurrentProcessId(void)
+static FORCEINLINE DWORD WINAPI GetCurrentProcessId(void)
 {
     DWORD ret;
 #ifdef __x86_64__
@@ -2494,7 +2494,7 @@ static inline DWORD WINAPI GetCurrentProcessId(void)
     return ret;
 }
 
-static inline DWORD WINAPI GetCurrentThreadId(void)
+static FORCEINLINE DWORD WINAPI GetCurrentThreadId(void)
 {
     DWORD ret;
 #ifdef __x86_64__
@@ -2505,7 +2505,7 @@ static inline DWORD WINAPI GetCurrentThreadId(void)
     return ret;
 }
 
-static inline void WINAPI SetLastError( DWORD err )
+static FORCEINLINE void WINAPI SetLastError( DWORD err )
 {
 #ifdef __x86_64__
     __asm__ __volatile__( ".byte 0x65\n\tmovl %0,0x68" : : "r" (err) : "memory" );
@@ -2514,7 +2514,7 @@ static inline void WINAPI SetLastError( DWORD err )
 #endif
 }
 
-static inline HANDLE WINAPI GetProcessHeap(void)
+static FORCEINLINE HANDLE WINAPI GetProcessHeap(void)
 {
     HANDLE *pdb;
 #ifdef __x86_64__
diff --git a/include/wine/library.h b/include/wine/library.h
index cc38848..242bb69 100644
--- a/include/wine/library.h
+++ b/include/wine/library.h
@@ -161,18 +161,13 @@ static inline int wine_ldt_is_empty( const LDT_ENTRY *ent )
 
 /* segment register access */
 
-# ifdef __MINGW32__
+# if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
 #  define __DEFINE_GET_SEG(seg) \
-    static inline unsigned short wine_get_##seg(void) \
-    { unsigned short res; __asm__ __volatile__("movw %%" #seg ",%w0" : "=r"(res)); return res; }
-#  define __DEFINE_SET_SEG(seg) \
-    static inline void wine_set_##seg(int val) { __asm__("movw %w0,%%" #seg : : "r" (val)); }
-# elif defined(__GNUC__)
-#  define __DEFINE_GET_SEG(seg) \
-    static inline unsigned short wine_get_##seg(void) \
+    static FORCEINLINE unsigned short wine_get_##seg(void) \
     { unsigned short res; __asm__ __volatile__("movw %%" #seg ",%w0" : "=r"(res)); return res; }
 #  define __DEFINE_SET_SEG(seg) \
-    static inline void wine_set_##seg(int val) { __asm__("movw %w0,%%" #seg : : "r" (val)); }
+    static FORCEINLINE void wine_set_##seg(int val) \
+    { __asm__("movw %w0,%%" #seg : : "r" (val)); }
 # elif defined(_MSC_VER)
 #  define __DEFINE_GET_SEG(seg) \
     static inline unsigned short wine_get_##seg(void) \
diff --git a/include/winnt.h b/include/winnt.h
index 947dcd7..d8fbbfd 100644
--- a/include/winnt.h
+++ b/include/winnt.h
@@ -123,7 +123,7 @@ extern "C" {
 # if defined(_MSC_VER) && (_MSC_VER >= 1200)
 #  define FORCEINLINE __forceinline
 # elif defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
-#  define FORCEINLINE __attribute__((always_inline))
+#  define FORCEINLINE inline __attribute__((always_inline))
 # else
 #  define FORCEINLINE inline
 # endif
@@ -2466,15 +2466,15 @@ typedef struct _NT_TIB
 
 struct _TEB;
 
-#if defined(__i386__) && defined(__GNUC__)
-static inline struct _TEB * WINAPI NtCurrentTeb(void)
+#if defined(__i386__) && defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2)))
+static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
 {
     struct _TEB *teb;
     __asm__(".byte 0x64\n\tmovl (0x18),%0" : "=r" (teb));
     return teb;
 }
 #elif defined(__i386__) && defined(_MSC_VER)
-static inline struct _TEB * WINAPI NtCurrentTeb(void)
+static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
 {
   struct _TEB *teb;
   __asm mov eax, fs:[0x18];
@@ -2482,14 +2482,14 @@ static inline struct _TEB * WINAPI NtCurrentTeb(void)
   return teb;
 }
 #elif defined(__x86_64__) && defined(__GNUC__)
-static inline struct _TEB * WINAPI NtCurrentTeb(void)
+static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
 {
     struct _TEB *teb;
     __asm__(".byte 0x65\n\tmovq (0x30),%0" : "=r" (teb));
     return teb;
 }
 #elif defined(__x86_64__) && defined (_MSC_VER)
-static inline struct _TEB * WINAPI NtCurrentTeb(void)
+static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void)
 {
   struct _TEB *teb;
   __asm mov rax, gs:[0x30];
