InterlockedExchangePointer() guarantees that store operation is done with
memory barrier even without declaring the variable as volatile.
---
 mingw-w64-crt/include/msvcrt_or_emu_glue.h | 4 ++--
 mingw-w64-crt/stdio/msvcrtos_ftruncate64.c | 6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/mingw-w64-crt/include/msvcrt_or_emu_glue.h 
b/mingw-w64-crt/include/msvcrt_or_emu_glue.h
index ac5834b577b0..da470ce08911 100644
--- a/mingw-w64-crt/include/msvcrt_or_emu_glue.h
+++ b/mingw-w64-crt/include/msvcrt_or_emu_glue.h
@@ -63,7 +63,7 @@ static RETT __cdecl __MINGW64_PASTE(init_,FUNC)(ARGS);
 #ifdef NORETURN
 __MINGW_ATTRIB_NORETURN
 #endif
-RETT (__cdecl *volatile __MINGW_IMP_SYMBOL(FUNC))(ARGS) = 
__MINGW64_PASTE(init_,FUNC);
+RETT (__cdecl *__MINGW_IMP_SYMBOL(FUNC))(ARGS) = __MINGW64_PASTE(init_,FUNC);
 
 #ifdef NORETURN
 __MINGW_ATTRIB_NORETURN
@@ -82,7 +82,7 @@ static RETT __cdecl __MINGW64_PASTE(init_,FUNC)(ARGS)
     if (!func)
         func = __MINGW64_PASTE(emu_,FUNC);
 
-    (void)InterlockedExchangePointer((PVOID volatile 
*)&__MINGW_IMP_SYMBOL(FUNC), func);
+    (void)InterlockedExchangePointer((PVOID*)&__MINGW_IMP_SYMBOL(FUNC), func);
 
 #ifndef NORETURN
     return
diff --git a/mingw-w64-crt/stdio/msvcrtos_ftruncate64.c 
b/mingw-w64-crt/stdio/msvcrtos_ftruncate64.c
index 4f7965e741d2..971fb1c4baf1 100644
--- a/mingw-w64-crt/stdio/msvcrtos_ftruncate64.c
+++ b/mingw-w64-crt/stdio/msvcrtos_ftruncate64.c
@@ -21,13 +21,13 @@ int __cdecl ftruncate64(int fd, _off64_t length)
 #if defined(__i386__) || defined(__x86_64__)
     extern int __cdecl __mingw_ftruncate64(int fd, _off64_t length);
 
-    static errno_t (__cdecl *volatile chsize_s_ptr)(int, __int64);
-    static volatile long init = 0;
+    static errno_t (__cdecl *chsize_s_ptr)(int, __int64);
+    static long init = 0;
 
     if (!init) {
         HMODULE msvcrt = __mingw_get_msvcrt_handle();
         FARPROC func = msvcrt ? GetProcAddress(msvcrt, "_chsize_s") : NULL;
-        (void)InterlockedExchangePointer((PVOID volatile *)&chsize_s_ptr, 
func);
+        (void)InterlockedExchangePointer((PVOID*)&chsize_s_ptr, func);
         (void)InterlockedExchange(&init, 1);
     }
 
-- 
2.20.1



_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to