Use #pragma GCC diagnostic push/pop only on gcc 4.6 and later.
[opus.git] / tests / test_opus_api.c
index 911ba2e..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>
@@ -72,9 +72,8 @@ void *malloc_hook(__attribute__((unused)) size_t size,
 }
 #endif
 
-static char dash_head[54] = "  ---------------------------------------------------\n";
-static opus_int32 opus_rates[5] = {48000,24000,16000,12000,8000};
-static opus_int32 opus_apps[3] = {OPUS_APPLICATION_VOIP,
+static const opus_int32 opus_rates[5] = {48000,24000,16000,12000,8000};
+static const opus_int32 opus_apps[3] = {OPUS_APPLICATION_VOIP,
        OPUS_APPLICATION_AUDIO,OPUS_APPLICATION_RESTRICTED_LOWDELAY};
 
 opus_int32 test_dec_api(void)
@@ -95,7 +94,7 @@ opus_int32 test_dec_api(void)
    cfgs=0;
    /*First test invalid configurations which should fail*/
    fprintf(stdout,"\n  Decoder basic API tests\n");
-   fprintf(stdout,dash_head);
+   fprintf(stdout,"  ---------------------------------------------------\n");
    for(c=0;c<4;c++)
    {
       i=opus_decoder_get_size(c);
@@ -311,7 +310,7 @@ opus_int32 test_parse(void)
    short size[48];
    int payload_offset, ret;
    fprintf(stdout,"\n  Packet header parsing tests\n");
-   fprintf(stdout,dash_head);
+   fprintf(stdout,"  ---------------------------------------------------\n");
    memset(packet,0,sizeof(char)*1276);
    packet[0]=63<<2;
    if(opus_packet_parse(packet,1,&toc,frames,0,&payload_offset)!=OPUS_BAD_ARG)test_failed();
@@ -673,7 +672,7 @@ opus_int32 test_enc_api(void)
    cfgs=0;
    /*First test invalid configurations which should fail*/
    fprintf(stdout,"\n  Encoder basic API tests\n");
-   fprintf(stdout,dash_head);
+   fprintf(stdout,"  ---------------------------------------------------\n");
    for(c=0;c<4;c++)
    {
       i=opus_encoder_get_size(c);
@@ -871,10 +870,11 @@ opus_int32 test_enc_api(void)
      "    OPUS_SET_VBR ................................ OK.\n",
      "    OPUS_GET_VBR ................................ OK.\n")
 
-   CHECK_SETGET(OPUS_SET_VOICE_RATIO(i),OPUS_GET_VOICE_RATIO(&i),-2,101,
+   /*CHECK_SETGET(OPUS_SET_VOICE_RATIO(i),OPUS_GET_VOICE_RATIO(&i),-2,101,
      0,50,
      "    OPUS_SET_VOICE_RATIO ........................ OK.\n",
      "    OPUS_GET_VOICE_RATIO ........................ OK.\n")
+   */
 
    CHECK_SETGET(OPUS_SET_VBR_CONSTRAINT(i),OPUS_GET_VBR_CONSTRAINT(&i),-1,2,
      1,0,
@@ -937,7 +937,7 @@ int test_repacketizer_api(void)
    unsigned char *po;
    cfgs=0;
    fprintf(stdout,"\n  Repacketizer tests\n");
-   fprintf(stdout,dash_head);
+   fprintf(stdout,"  ---------------------------------------------------\n");
 
    packet=malloc(max_out);
    if(packet==NULL)test_failed();
@@ -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
 
@@ -1175,7 +1186,7 @@ int test_malloc_fail(void)
    cfgs=0;
 #endif
    fprintf(stdout,"\n  malloc() failure tests\n");
-   fprintf(stdout,dash_head);
+   fprintf(stdout,"  ---------------------------------------------------\n");
 #ifdef MALLOC_FAIL
    orig_malloc=__malloc_hook;
    __malloc_hook=malloc_hook;
@@ -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;