diff --git a/tests/test_opus_decode.c b/tests/test_opus_decode.c
index 950239e63ed1f98563d00d4c4a020105b903fa86..5197fa1dd2cf10b5e5037d2b2153d6ef664477b7 100644
--- a/tests/test_opus_decode.c
+++ b/tests/test_opus_decode.c
@@ -135,12 +135,12 @@ int test_decoder_code0(int no_fuzz)
          outbuf[0]=32749;
          out_samples = opus_decode(dec[t], packet, 0, outbuf, 0, fec);
          if(out_samples>0)test_failed();
-#if defined(__GNUC__) && OPUS_GNUC_PREREQ(3, 4)
+#if !defined(OPUS_BUILD) && (OPUS_GNUC_PREREQ(4, 6) || (defined(__clang_major__) && __clang_major__ >= 3))
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wnonnull"
 #endif
          out_samples = opus_decode(dec[t], packet, 0, 0, 0, fec);
-#if defined(__GNUC__) && OPUS_GNUC_PREREQ(3, 4)
+#if !defined(OPUS_BUILD) && (OPUS_GNUC_PREREQ(4, 6) || (defined(__clang_major__) && __clang_major__ >= 3))
 #pragma GCC diagnostic pop
 #endif
          if(out_samples>0)test_failed();