[gstreamer-bugs] [Bug 151416] New: - [PATCH] Fix CVS jhbuild build failure of gstadder.c

bugzilla-daemon at bugzilla.gnome.org bugzilla-daemon at bugzilla.gnome.org
Mon Aug 30 05:25:56 PDT 2004


http://bugzilla.gnome.org/show_bug.cgi?id=151416
GStreamer | gst-plugins | Ver: HEAD CVS

           Summary: [PATCH] Fix CVS jhbuild build failure of gstadder.c
           Product: GStreamer
           Version: HEAD CVS
          Platform: Other
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: blocker
          Priority: Normal
         Component: gst-plugins
        AssignedTo: gstreamer-bugs at lists.sourceforge.net
        ReportedBy: nathanr at nathanr.net
         QAContact: gstreamer-bugs at lists.sourceforge.net


building with jhbuild, -Werror is turned on by default. The following occurs:

 gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../gst-libs -I../../gst-libs -pthread
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
-I/home/nathanr/bin/gnome2-cvs/include/glib-2.0
-I/home/nathanr/bin/gnome2-cvs/lib64/glib-2.0/include
-I/home/nathanr/bin/gnome2-cvs/include/libxml2
-I/home/nathanr/bin/gnome2-cvs/include/gstreamer-0.8 -DGST_DISABLE_DEPRECATED
-Wall -Werror -g -O2 -MT libgstadder_la-gstadder.lo -MD -MP -MF
.deps/libgstadder_la-gstadder.Tpo -c gstadder.c  -fPIC -DPIC -o
.libs/libgstadder_la-gstadder.o
gstadder.c: In function `gst_adder_loop':
gstadder.c:409: warning: comparison is always false due to limited range of data
type
gstadder.c:409: warning: comparison is always false due to limited range of data
type
make[3]: *** [libgstadder_la-gstadder.lo] Error 1
make[3]: Leaving directory `/home/nathanr/download/gnome-cvs/gst-plugins/gst/adder'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/nathanr/download/gnome-cvs/gst-plugins/gst'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/nathanr/download/gnome-cvs/gst-plugins'
make: *** [all] Error 2
*** error during stage build of gst-plugins: could not build module *** [70/91]

Offending line:
out[i] = CLAMP (out[i] + in[i], MIN_INT_32, MAX_INT_32);

The preprocessor output ("gcc -E") for that line is:

out[i] = (((out[i] + in[i]) > (2147483647L)) ? (2147483647L) : (((out[i] +
in[i]) < ((-2147483647L -1L))) ? ((-2147483647L -1L)) : (out[i] + in[i])));

It turns out the compiler is smart enough to work out that they are the bounds
of an gint32, and hence the condition is always false. The patch simply casts
the comparison to a gint64. Here's the patch to fix this:

--- gstadder.c.~1.55.~  2004-07-09 20:56:49.000000000 +1000
+++ gstadder.c  2004-08-30 22:14:54.322727752 +1000
@@ -406,7 +406,7 @@
           gint32 *out = (gint32 *) GST_BUFFER_DATA (buf_out);
  
           for (i = 0; i < GST_BUFFER_SIZE (buf_out) / 4; i++)
-            out[i] = CLAMP (out[i] + in[i], MIN_INT_32, MAX_INT_32);
+            out[i] = CLAMP (((gint64) out[i]) + ((gint64)in[i]), MIN_INT_32,
MAX_INT_32);
         } else if (adder->width == 16) {
           gint16 *in = (gint16 *) raw_in;
           gint16 *out = (gint16 *) GST_BUFFER_DATA (buf_out);

------- You are receiving this mail because: -------
You are the assignee for the bug.
You are the QA contact for the bug.




More information about the Gstreamer-bugs mailing list