ICU-21499 Suppress warnings about non-NULL address in uprv_memcpy and uprv_memmove
diff --git a/icu4c/source/common/cmemory.h b/icu4c/source/common/cmemory.h index f70587a..f03b7dc 100644 --- a/icu4c/source/common/cmemory.h +++ b/icu4c/source/common/cmemory.h
@@ -37,19 +37,57 @@ #include <stdio.h> #endif - +// uprv_memcpy and uprv_memmove +#if defined(__clang__) +#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \ + /* Suppress warnings about addresses that will never be NULL */ \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Waddress\"") \ + U_ASSERT(dst != NULL); \ + U_ASSERT(src != NULL); \ + _Pragma("clang diagnostic pop") \ + U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \ +} UPRV_BLOCK_MACRO_END +#define uprv_memmove(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \ + /* Suppress warnings about addresses that will never be NULL */ \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Waddress\"") \ + U_ASSERT(dst != NULL); \ + U_ASSERT(src != NULL); \ + _Pragma("clang diagnostic pop") \ + U_STANDARD_CPP_NAMESPACE memmove(dst, src, size); \ +} UPRV_BLOCK_MACRO_END +#elif defined(__GNUC__) +#define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \ + /* Suppress warnings about addresses that will never be NULL */ \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Waddress\"") \ + U_ASSERT(dst != NULL); \ + U_ASSERT(src != NULL); \ + _Pragma("GCC diagnostic pop") \ + U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \ +} UPRV_BLOCK_MACRO_END +#define uprv_memmove(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \ + /* Suppress warnings about addresses that will never be NULL */ \ + _Pragma("GCC diagnostic push") \ + _Pragma("GCC diagnostic ignored \"-Waddress\"") \ + U_ASSERT(dst != NULL); \ + U_ASSERT(src != NULL); \ + _Pragma("GCC diagnostic pop") \ + U_STANDARD_CPP_NAMESPACE memmove(dst, src, size); \ +} UPRV_BLOCK_MACRO_END +#else #define uprv_memcpy(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \ U_ASSERT(dst != NULL); \ U_ASSERT(src != NULL); \ U_STANDARD_CPP_NAMESPACE memcpy(dst, src, size); \ } UPRV_BLOCK_MACRO_END - #define uprv_memmove(dst, src, size) UPRV_BLOCK_MACRO_BEGIN { \ U_ASSERT(dst != NULL); \ U_ASSERT(src != NULL); \ U_STANDARD_CPP_NAMESPACE memmove(dst, src, size); \ } UPRV_BLOCK_MACRO_END - +#endif /** * \def UPRV_LENGTHOF