[mythtv-commits] Ticket #12764: Bug fix - compilation of abs function with latest gcc/libstdc++

MythTV noreply at mythtv.org
Tue May 10 18:00:39 UTC 2016


#12764: Bug fix - compilation of abs function with latest gcc/libstdc++
-------------------------------------------------+-------------------------
     Reporter:  Gary Buhrmaster                  |      Owner:  jyavenard
  <gary.buhrmaster@…>                            |
         Type:  Patch - Bug Fix                  |     Status:  new
     Priority:  minor                            |  Milestone:  unknown
    Component:  MythTV - Video Library           |    Version:  Master Head
     Severity:  medium                           |   Keywords:
Ticket locked:  0                                |
-------------------------------------------------+-------------------------
 With recent gcc and libstdc++ compilation fails with:

 {{{
 visualisations/videovisualcircles.cpp: In member function ‘virtual void
 VideoVisualCircles::DrawPriv(MythPainter*, QPaintDevice*)’:
 visualisations/videovisualcircles.cpp:26:75: error: call of overloaded
 ‘abs(double)’ is ambiguous
          double mag = abs((m_magnitudes[i] + m_magnitudes[i + count]) /
 2.0);
 ^
 In file included from /usr/include/c++/6.0.0/cstdlib:75:0,
                  from /usr/include/c++/6.0.0/bits/stl_algo.h:59,
                  from /usr/include/c++/6.0.0/algorithm:62,
                  from /usr/include/qt5/QtCore/qglobal.h:85,
                  from /usr/include/qt5/QtGui/qrgb.h:37,
                  from /usr/include/qt5/QtGui/qcolor.h:37,
                  from /usr/include/qt5/QtGui/qpen.h:37,
                  from /usr/include/qt5/QtGui/QPen:1,
                  from visualisations/videovisualcircles.cpp:1:
 /usr/include/stdlib.h:774:12: note: candidate: int abs(int)
  extern int abs (int __x) __THROW __attribute__ ((__const__)) __wur;
             ^~~
 In file included from /usr/include/c++/6.0.0/bits/stl_algo.h:59:0,
                  from /usr/include/c++/6.0.0/algorithm:62,
                  from /usr/include/qt5/QtCore/qglobal.h:85,
                  from /usr/include/qt5/QtGui/qrgb.h:37,
                  from /usr/include/qt5/QtGui/qcolor.h:37,
                  from /usr/include/qt5/QtGui/qpen.h:37,
                  from /usr/include/qt5/QtGui/QPen:1,
                  from visualisations/videovisualcircles.cpp:1:
 /usr/include/c++/6.0.0/cstdlib:185:3: note: candidate: __int128
 std::abs(__int128)
    abs(__GLIBCXX_TYPE_INT_N_0 __x) { return __x >= 0 ? __x : -__x; }
    ^~~
 /usr/include/c++/6.0.0/cstdlib:180:3: note: candidate: long long int
 std::abs(long long int)
    abs(long long __x) { return __builtin_llabs (__x); }
    ^~~
 /usr/include/c++/6.0.0/cstdlib:172:3: note: candidate: long int
 std::abs(long int)
    abs(long __i) { return __builtin_labs(__i); }
    ^~~
 }}}







 The following patch fixes the issue (lightly tested) by specifying the Qt
 function qAbs:

 {{{
 diff --git a/mythtv/libs/libmythtv/visualisations/videovisualcircles.cpp
 b/mythtv/libs/libmythtv/visualisations/videovisualcircles.cpp
 index 1140372..e9cbf8f 100644
 --- a/mythtv/libs/libmythtv/visualisations/videovisualcircles.cpp
 +++ b/mythtv/libs/libmythtv/visualisations/videovisualcircles.cpp
 @@ -23,7 +23,7 @@ void VideoVisualCircles::DrawPriv(MythPainter *painter,
 QPaintDevice* device)
      painter->Begin(device);
      for (int i = 0; i < count; i++, rad += m_range, red += incr, green -=
 incr)
      {
 -        double mag = abs((m_magnitudes[i] + m_magnitudes[i + count]) /
 2.0);
 +        double mag = qAbs((m_magnitudes[i] + m_magnitudes[i + count]) /
 2.0);
          if (mag > 1.0)
          {
              pen.setWidth((int)mag);
 }}}

--
Ticket URL: <https://code.mythtv.org/trac/ticket/12764>
MythTV <http://www.mythtv.org>
MythTV Media Center


More information about the mythtv-commits mailing list