Use #pragma GCC diagnostic push/pop only on gcc 4.6 and later.
[opus.git] / tests / test_opus_api.c
index 6f91a79..a04c756 100644 (file)
@@ -61,7 +61,7 @@
 #define VG_CHECK(x,y)
 #endif
 
-#ifdef __GLIBC__
+#if defined(__GLIBC__) && defined(HAVE___MALLOC_HOOK)
 #define MALLOC_FAIL
 #include "os_support.h"
 #include <malloc.h>
@@ -1160,6 +1160,17 @@ int test_repacketizer_api(void)
 }
 
 #ifdef MALLOC_FAIL
+/* GLIBC 2.14 declares __malloc_hook as deprecated, generating a warning
+ * under GCC. However, this is the cleanest way to test malloc failure
+ * handling in our codebase, and the lack of thread saftey isn't an
+ * issue here. We therefore disable the warning for this function.
+ */
+#if defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6
+/* Save the current warning settings */
+#pragma GCC diagnostic push
+#endif
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+
 typedef void *(*mhook)(size_t __size, __const __malloc_ptr_t);
 #endif
 
@@ -1245,6 +1256,13 @@ int test_malloc_fail(void)
 #endif
 }
 
+#ifdef MALLOC_FAIL
+#if defined(__GNUC__) && __GNUC__ >= 4 && __GNUC_MINOR__ >= 6
+/* Restore the previous warning settings */
+#pragma GCC diagnostic pop /* restore -Wdeprecated-declarations */
+#endif
+#endif
+
 int main(int _argc, char **_argv)
 {
    opus_int32 total;