diff --git a/modules/core/include/opencv2/core/cvdef.h b/modules/core/include/opencv2/core/cvdef.h
index ce33c1578..c033bd353 100644
--- a/modules/core/include/opencv2/core/cvdef.h
+++ b/modules/core/include/opencv2/core/cvdef.h
@@ -443,9 +443,9 @@ CV_INLINE int cvIsInf( double value )
 #  else
 #    if defined __ATOMIC_ACQ_REL && !defined __clang__
        // version for gcc >= 4.7
-#      define CV_XADD(addr, delta) __atomic_fetch_add(addr, delta, __ATOMIC_ACQ_REL)
+#      define CV_XADD(addr, delta) (int)__atomic_fetch_add((unsigned*)(addr), (unsigned)(delta), __ATOMIC_ACQ_REL)
 #    else
-#      define CV_XADD(addr, delta) __sync_fetch_and_add(addr, delta)
+#      define CV_XADD(addr, delta) (int)__sync_fetch_and_add((unsigned*)(addr), (unsigned)(delta))
 #    endif
 #  endif
 #elif (defined WIN32 || defined _WIN32 || defined WINCE) && (!defined RC_INVOKED)