Patchwork [6/6] fix audio_bug related clang false positives

login
register
mail settings
Submitter Paolo Bonzini
Date Jan. 27, 2010, 1:54 p.m.
Message ID <1264600499-3384-7-git-send-email-pbonzini@redhat.com>
Download mbox | patch
Permalink /patch/43810/
State New
Headers show

Comments

Paolo Bonzini - Jan. 27, 2010, 1:54 p.m.
By making the abort condition visible in the caller, this fixes
several false positives in the audio code.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 audio/audio.c     |   44 ++++++++++++++++++++------------------------
 audio/audio_int.h |    3 ++-
 2 files changed, 22 insertions(+), 25 deletions(-)

Patch

diff --git a/audio/audio.c b/audio/audio.c
index 2a20e5b..7fce46c 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -118,42 +118,38 @@  struct mixeng_volume nominal_volume = {
 static void audio_print_options (const char *prefix,
                                  struct audio_option *opt);
 
-int audio_bug (const char *funcname, int cond)
+void audio_bug_found (const char *funcname)
 {
-    if (cond) {
-        static int shown;
-
-        AUD_log (NULL, "A bug was just triggered in %s\n", funcname);
-        if (!shown) {
-            struct audio_driver *d;
-
-            shown = 1;
-            AUD_log (NULL, "Save all your work and restart without audio\n");
-            AUD_log (NULL, "Please send bug report to av1474@comtv.ru\n");
-            AUD_log (NULL, "I am sorry\n");
-            d = glob_audio_state.drv;
-            if (d) {
-                audio_print_options (d->name, d->options);
-            }
+    static int shown;
+
+    AUD_log (NULL, "A bug was just triggered in %s\n", funcname);
+    if (!shown) {
+        struct audio_driver *d;
+
+        shown = 1;
+        AUD_log (NULL, "Save all your work and restart without audio\n");
+        AUD_log (NULL, "Please send bug report to av1474@comtv.ru\n");
+        AUD_log (NULL, "I am sorry\n");
+        d = glob_audio_state.drv;
+        if (d) {
+            audio_print_options (d->name, d->options);
         }
-        AUD_log (NULL, "Context:\n");
+    }
+    AUD_log (NULL, "Context:\n");
 
 #if defined AUDIO_BREAKPOINT_ON_BUG
 #  if defined HOST_I386
 #    if defined __GNUC__
-        __asm__ ("int3");
+    __asm__ ("int3");
 #    elif defined _MSC_VER
-        _asm _emit 0xcc;
+    _asm _emit 0xcc;
 #    else
-        abort ();
+    abort ();
 #    endif
 #  else
-        abort ();
+    abort ();
 #  endif
 #endif
-    }
-
-    return cond;
 }
 #endif
 
diff --git a/audio/audio_int.h b/audio/audio_int.h
index 06e313f..4244615 100644
--- a/audio/audio_int.h
+++ b/audio/audio_int.h
@@ -223,7 +223,8 @@  int  audio_pcm_sw_read (SWVoiceIn *sw, void *buf, int len);
 int audio_pcm_hw_clip_out (HWVoiceOut *hw, void *pcm_buf,
                            int live, int pending);
 
-int audio_bug (const char *funcname, int cond);
+#define audio_bug(funcname, cond) ((cond) ? audio_bug_found (funcname), 1 : 0)
+void audio_bug_found (const char *funcname);
 void *audio_calloc (const char *funcname, int nmemb, size_t size);
 
 void audio_run (const char *msg);