Dear VDR folks,
building VDR 2.1.3 with Clang 3.4.1 the warnings below are shown.
Most warnings look like they can be ignored. Maybe you can spot something, which should be fixed.
$ clang --version Debian clang version 3.4-1 (tags/RELEASE_34/final) (based on LLVM 3.4) Target: i386-pc-linux-gnu Thread model: posix $ CC=clang CXX=clang++ make […] clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated clang++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -c -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DREMOTE_KBD -DLIRC_DEVICE="/var/run/lirc/lircd" -DVIDEODIR="/srv/vdr/video" -DCONFDIR="/var/lib/vdr" -DCACHEDIR="/var/cache/vdr" -DRESDIR="/usr/local/share/vdr" -DPLUGINDIR="/usr/local/lib/vdr" -DLOCDIR="/usr/local/share/locale" -I/usr/include/freetype2 -o audio.o audio.c clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated clang++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -c -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DREMOTE_KBD -DLIRC_DEVICE="/var/run/lirc/lircd" -DVIDEODIR="/srv/vdr/video" -DCONFDIR="/var/lib/vdr" -DCACHEDIR="/var/cache/vdr" -DRESDIR="/usr/local/share/vdr" -DPLUGINDIR="/usr/local/lib/vdr" -DLOCDIR="/usr/local/share/locale" -I/usr/include/freetype2 -o channels.o channels.c clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated channels.c:45:119: warning: data argument not used by format string [-Wformat-extra-args] snprintf(buffer, sizeof(buffer), rid ? "%s-%d-%d-%d-%d" : "%s-%d-%d-%d", *cSource::ToString(source), nid, tid, sid, rid); ~~~~~~~~~~~~~ ^ 1 warning generated. clang++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -c -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DREMOTE_KBD -DLIRC_DEVICE="/var/run/lirc/lircd" -DVIDEODIR="/srv/vdr/video" -DCONFDIR="/var/lib/vdr" -DCACHEDIR="/var/cache/vdr" -DRESDIR="/usr/local/share/vdr" -DPLUGINDIR="/usr/local/lib/vdr" -DLOCDIR="/usr/local/share/locale" -I/usr/include/freetype2 -o ci.o ci.c clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated ci.c:867:18: warning: use of GNU old-style field designator extension [-Wgnu-designator] tTime T = { mjd : htons(MJD), h : DEC2BCD(tm_gmt.tm_hour), m : DEC2BCD(tm_gmt.tm_min), s : DEC2BCD(tm_gmt.tm_sec), offset : short(htons(... ^~~~~ .mjd = ci.c:867:36: warning: use of GNU old-style field designator extension [-Wgnu-designator] tTime T = { mjd : htons(MJD), h : DEC2BCD(tm_gmt.tm_hour), m : DEC2BCD(tm_gmt.tm_min), s : DEC2BCD(tm_gmt.tm_sec), offset : short(htons(... ^~~ .h = ci.c:867:65: warning: use of GNU old-style field designator extension [-Wgnu-designator] tTime T = { mjd : htons(MJD), h : DEC2BCD(tm_gmt.tm_hour), m : DEC2BCD(tm_gmt.tm_min), s : DEC2BCD(tm_gmt.tm_sec), offset : short(htons(... ^~~ .m = ci.c:867:93: warning: use of GNU old-style field designator extension [-Wgnu-designator] tTime T = { mjd : htons(MJD), h : DEC2BCD(tm_gmt.tm_hour), m : DEC2BCD(tm_gmt.tm_min), s : DEC2BCD(tm_gmt.tm_sec), offset : short(htons(... ^~~ .s = ci.c:867:121: warning: use of GNU old-style field designator extension [-Wgnu-designator] tTime T = { mjd : htons(MJD), h : DEC2BCD(tm_gmt.tm_hour), m : DEC2BCD(tm_gmt.tm_min), s : DEC2BCD(tm_gmt.tm_sec), offset : short(htons(tm_lo... ^~~~~~~~ .offset = ci.c:1007:47: warning: use of GNU old-style field designator extension [-Wgnu-designator] tDisplayReply dr = { id : DRI_MMI_MODE_ACK, mode : MM_HIGH_LEVEL }; ^~~~ .id = ci.c:1007:70: warning: use of GNU old-style field designator extension [-Wgnu-designator] tDisplayReply dr = { id : DRI_MMI_MODE_ACK, mode : MM_HIGH_LEVEL }; ^~~~~~ .mode = 7 warnings generated. […] clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated clang++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -c -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DREMOTE_KBD -DLIRC_DEVICE="/var/run/lirc/lircd" -DVIDEODIR="/srv/vdr/video" -DCONFDIR="/var/lib/vdr" -DCACHEDIR="/var/cache/vdr" -DRESDIR="/usr/local/share/vdr" -DPLUGINDIR="/usr/local/lib/vdr" -DLOCDIR="/usr/local/share/locale" -I/usr/include/freetype2 -o dvbspu.o dvbspu.c clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated In file included from dvbspu.c:14: ./dvbspu.h:104:10: warning: private field 'ready' is not used [-Wunused-private-field] bool ready; ^ 1 warning generated. clang++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -c -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DREMOTE_KBD -DLIRC_DEVICE="/var/run/lirc/lircd" -DVIDEODIR="/srv/vdr/video" -DCONFDIR="/var/lib/vdr" -DCACHEDIR="/var/cache/vdr" -DRESDIR="/usr/local/share/vdr" -DPLUGINDIR="/usr/local/lib/vdr" -DLOCDIR="/usr/local/share/locale" -I/usr/include/freetype2 -o dvbsubtitle.o dvbsubtitle.c clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated dvbsubtitle.c:37:13: warning: unused variable 'DebugBitmaps' [-Wunused-variable] static bool DebugBitmaps = DebugVerbose || DebugNormal; ^ 1 warning generated. clang++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -c -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DREMOTE_KBD -DLIRC_DEVICE="/var/run/lirc/lircd" -DVIDEODIR="/srv/vdr/video" -DCONFDIR="/var/lib/vdr" -DCACHEDIR="/var/cache/vdr" -DRESDIR="/usr/local/share/vdr" -DPLUGINDIR="/usr/local/lib/vdr" -DLOCDIR="/usr/local/share/locale" -I/usr/include/freetype2 -o eit.o eit.c clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated eit.c:223:43: warning: comparison of constant 176 with expression of type 'SI::LinkageType' is always false [-Wtautological-constant-out-of-range-compare] if (ld->getLinkageType() == 0xB0) { // Premiere World ~~~~~~~~~~~~~~~~~~~~ ^ ~~~~ 1 warning generated. […] clang++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -c -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DREMOTE_KBD -DLIRC_DEVICE="/var/run/lirc/lircd" -DVIDEODIR="/srv/vdr/video" -DCONFDIR="/var/lib/vdr" -DCACHEDIR="/var/cache/vdr" -DRESDIR="/usr/local/share/vdr" -DPLUGINDIR="/usr/local/lib/vdr" -DLOCDIR="/usr/local/share/locale" -I/usr/include/freetype2 -o menu.o menu.c clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated menu.c:982:38: warning: first operand of this 'memcmp' call is a pointer to dynamic class 'cTimer'; vtable pointer will be compared [-Wdynamic-class-memaccess] if (memcmp(timer, &data, sizeof(data)) != 0) ~~~~~~ ^ menu.c:982:38: note: explicitly cast the pointer to silence this warning if (memcmp(timer, &data, sizeof(data)) != 0) ^ (void*) menu.c:4582:107: warning: data argument not used by format string [-Wformat-extra-args] instantId = cString::sprintf(cDevice::NumDevices() > 1 ? "%s - %d" : "%s", timer->Channel()->Name(), device->CardIndex() + 1); ~~~~ ^ 2 warnings generated. clang++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -c -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DREMOTE_KBD -DLIRC_DEVICE="/var/run/lirc/lircd" -DVIDEODIR="/srv/vdr/video" -DCONFDIR="/var/lib/vdr" -DCACHEDIR="/var/cache/vdr" -DRESDIR="/usr/local/share/vdr" -DPLUGINDIR="/usr/local/lib/vdr" -DLOCDIR="/usr/local/share/locale" -I/usr/include/freetype2 -o menuitems.o menuitems.c clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated menuitems.c:249:86: warning: data argument not used by format string [-Wformat-extra-args] SetValue(cString::sprintf(s ? "%.*f %s" : "%.*f", factor / 10, double(v) / factor, s)); ~~~~~~ ^ 1 warning generated. […] clang++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -c -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DREMOTE_KBD -DLIRC_DEVICE="/var/run/lirc/lircd" -DVIDEODIR="/srv/vdr/video" -DCONFDIR="/var/lib/vdr" -DCACHEDIR="/var/cache/vdr" -DRESDIR="/usr/local/share/vdr" -DPLUGINDIR="/usr/local/lib/vdr" -DLOCDIR="/usr/local/share/locale" -I/usr/include/freetype2 -o receiver.o receiver.c clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated receiver.c:28:6: warning: indirection of non-volatile null pointer will be deleted, not trap [-Wnull-dereference] *(char *)0 = 0; // cause a segfault ^~~~~~~~~~ receiver.c:28:6: note: consider using __builtin_trap() or qualifying pointer with 'volatile' 1 warning generated. clang++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -c -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DREMOTE_KBD -DLIRC_DEVICE="/var/run/lirc/lircd" -DVIDEODIR="/srv/vdr/video" -DCONFDIR="/var/lib/vdr" -DCACHEDIR="/var/cache/vdr" -DRESDIR="/usr/local/share/vdr" -DPLUGINDIR="/usr/local/lib/vdr" -DLOCDIR="/usr/local/share/locale" -I/usr/include/freetype2 -o recorder.o recorder.c clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated clang++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -c -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DREMOTE_KBD -DLIRC_DEVICE="/var/run/lirc/lircd" -DVIDEODIR="/srv/vdr/video" -DCONFDIR="/var/lib/vdr" -DCACHEDIR="/var/cache/vdr" -DRESDIR="/usr/local/share/vdr" -DPLUGINDIR="/usr/local/lib/vdr" -DLOCDIR="/usr/local/share/locale" -I/usr/include/freetype2 -o recording.o recording.c clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated recording.c:2923:96: warning: data argument not used by format string [-Wformat-extra-args] return cString::sprintf(WithFrame ? "%s%d:%02d:%02d.%02d" : "%s%d:%02d:%02d", Sign, h, m, s, f); ~~~~~~~~~~~~~~~~ ^ 1 warning generated. clang++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -c -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DREMOTE_KBD -DLIRC_DEVICE="/var/run/lirc/lircd" -DVIDEODIR="/srv/vdr/video" -DCONFDIR="/var/lib/vdr" -DCACHEDIR="/var/cache/vdr" -DRESDIR="/usr/local/share/vdr" -DPLUGINDIR="/usr/local/lib/vdr" -DLOCDIR="/usr/local/share/locale" -I/usr/include/freetype2 -o remote.o remote.c clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated clang++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -c -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DREMOTE_KBD -DLIRC_DEVICE="/var/run/lirc/lircd" -DVIDEODIR="/srv/vdr/video" -DCONFDIR="/var/lib/vdr" -DCACHEDIR="/var/cache/vdr" -DRESDIR="/usr/local/share/vdr" -DPLUGINDIR="/usr/local/lib/vdr" -DLOCDIR="/usr/local/share/locale" -I/usr/include/freetype2 -o remux.o remux.c clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated In file included from remux.c:10: ./remux.h:479:7: warning: private field 'numFrames' is not used [-Wunused-private-field] int numFrames; ^ 1 warning generated. […] clang++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -c -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE descriptor.c clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated In file included from descriptor.c:14: ./descriptor.h:493:34: warning: private field 's' is not used [-Wunused-private-field] const descr_iso_639_language *s; ^ 1 warning generated. […] clang++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -c -DPLUGIN_NAME_I18N='"dvbhddevice"' -I/srv/filme/src/vdr/include -o hdffosd.o hdffosd.c clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated hdffosd.c:45:14: warning: private field 'mBitmapNumColors' is not used [-Wunused-private-field] uint32_t mBitmapNumColors; ^ hdffosd.c:558:14: warning: private field 'mBitmapNumColors' is not used [-Wunused-private-field] uint32_t mBitmapNumColors; ^ 2 warnings generated. […] *** Plugin pictures: clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated clang++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -c -DPLUGIN_NAME_I18N='"pictures"' -I/srv/filme/src/vdr/include -o pictures.o pictures.c clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated clang++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -c -DPLUGIN_NAME_I18N='"pictures"' -I/srv/filme/src/vdr/include -o entry.o entry.c clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated clang++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -c -DPLUGIN_NAME_I18N='"pictures"' -I/srv/filme/src/vdr/include -o menu.o menu.c clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated clang++ -g -O3 -Wall -Werror=overloaded-virtual -Wno-parentheses -fPIC -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -c -DPLUGIN_NAME_I18N='"pictures"' -I/srv/filme/src/vdr/include -o player.o player.c clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated player.c:222:15: warning: case value not in enumerated type 'eKeys' [-Wswitch] case kLeft|k_Repeat: ^ player.c:226:16: warning: case value not in enumerated type 'eKeys' [-Wswitch] case kRight|k_Repeat: ^ 2 warnings generated. […]
Thanks,
Paul
On 08.02.2014 09:59, Paul Menzel wrote:
Dear VDR folks,
building VDR 2.1.3 with Clang 3.4.1 the warnings below are shown.
Most warnings look like they can be ignored. Maybe you can spot something, which should be fixed.
$ clang --version Debian clang version 3.4-1 (tags/RELEASE_34/final) (based on LLVM 3.4) Target: i386-pc-linux-gnu Thread model: posix $ CC=clang CXX=clang++ make […] clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
You may want to find an option that suppresses this warning, because the file names of VDR (*.c) are not going to change.
... channels.c:45:119: warning: data argument not used by format string [-Wformat-extra-args] snprintf(buffer, sizeof(buffer), rid ? "%s-%d-%d-%d-%d" : "%s-%d-%d-%d", *cSource::ToString(source), nid, tid, sid, rid); ~~~~~~~~~~~~~ ^
This is explicitly checked with 'rid ? ...', so the warning is unjustified (although the compiler probably has a hard time figuring that out ;-).
... ci.c:867:18: warning: use of GNU old-style field designator extension [-Wgnu-designator] tTime T = { mjd : htons(MJD), h : DEC2BCD(tm_gmt.tm_hour), m : DEC2BCD(tm_gmt.tm_min), s : DEC2BCD(tm_gmt.tm_sec), offset : short(htons(... ^~~~~ .mjd = ci.c:867:36: warning: use of GNU old-style field designator extension [-Wgnu-designator] tTime T = { mjd : htons(MJD), h : DEC2BCD(tm_gmt.tm_hour), m : DEC2BCD(tm_gmt.tm_min), s : DEC2BCD(tm_gmt.tm_sec), offset : short(htons(... ^~~ .h = ci.c:867:65: warning: use of GNU old-style field designator extension [-Wgnu-designator] tTime T = { mjd : htons(MJD), h : DEC2BCD(tm_gmt.tm_hour), m : DEC2BCD(tm_gmt.tm_min), s : DEC2BCD(tm_gmt.tm_sec), offset : short(htons(... ^~~ .m = ci.c:867:93: warning: use of GNU old-style field designator extension [-Wgnu-designator] tTime T = { mjd : htons(MJD), h : DEC2BCD(tm_gmt.tm_hour), m : DEC2BCD(tm_gmt.tm_min), s : DEC2BCD(tm_gmt.tm_sec), offset : short(htons(... ^~~ .s = ci.c:867:121: warning: use of GNU old-style field designator extension [-Wgnu-designator] tTime T = { mjd : htons(MJD), h : DEC2BCD(tm_gmt.tm_hour), m : DEC2BCD(tm_gmt.tm_min), s : DEC2BCD(tm_gmt.tm_sec), offset : short(htons(tm_lo... ^~~~~~~~ .offset = ci.c:1007:47: warning: use of GNU old-style field designator extension [-Wgnu-designator] tDisplayReply dr = { id : DRI_MMI_MODE_ACK, mode : MM_HIGH_LEVEL }; ^~~~ .id = ci.c:1007:70: warning: use of GNU old-style field designator extension [-Wgnu-designator] tDisplayReply dr = { id : DRI_MMI_MODE_ACK, mode : MM_HIGH_LEVEL }; ^~~~~~ .mode =
Fixed in the attached patch.
... In file included from dvbspu.c:14: ./dvbspu.h:104:10: warning: private field 'ready' is not used [-Wunused-private-field] bool ready; ^
Fixed in the attached patch.
... dvbsubtitle.c:37:13: warning: unused variable 'DebugBitmaps' [-Wunused-variable] static bool DebugBitmaps = DebugVerbose || DebugNormal; ^
Fixed in the attached patch.
... eit.c:223:43: warning: comparison of constant 176 with expression of type 'SI::LinkageType' is always false [-Wtautological-constant-out-of-range-compare] if (ld->getLinkageType() == 0xB0) { // Premiere World ~~~~~~~~~~~~~~~~~~~~ ^ ~~~~
I assume this is because the enum LinkageType doesn't contain 0xB0. However, the actual value that comes from the SI data may well be 0xB0, so I'm now typecasting uint(ld->getLinkageType()).
... menu.c:982:38: warning: first operand of this 'memcmp' call is a pointer to dynamic class 'cTimer'; vtable pointer will be compared [-Wdynamic-class-memaccess] if (memcmp(timer, &data, sizeof(data)) != 0) ~~~~~~ ^ menu.c:982:38: note: explicitly cast the pointer to silence this warning if (memcmp(timer, &data, sizeof(data)) != 0) ^ (void*)
Fixed in the attached patch.
menu.c:4582:107: warning: data argument not used by format string [-Wformat-extra-args] instantId = cString::sprintf(cDevice::NumDevices() > 1 ? "%s - %d" : "%s", timer->Channel()->Name(), device->CardIndex() + 1); ~~~~ ^
Same as above (channels.c:45:119).
... menuitems.c:249:86: warning: data argument not used by format string [-Wformat-extra-args] SetValue(cString::sprintf(s ? "%.*f %s" : "%.*f", factor / 10, double(v) / factor, s)); ~~~~~~ ^
Same as above.
... receiver.c:28:6: warning: indirection of non-volatile null pointer will be deleted, not trap [-Wnull-dereference] *(char *)0 = 0; // cause a segfault ^~~~~~~~~~ receiver.c:28:6: note: consider using __builtin_trap() or qualifying pointer with 'volatile'
Can you suggest a different way of causing a segfault at this point?
... recording.c:2923:96: warning: data argument not used by format string [-Wformat-extra-args] return cString::sprintf(WithFrame ? "%s%d:%02d:%02d.%02d" : "%s%d:%02d:%02d", Sign, h, m, s, f); ~~~~~~~~~~~~~~~~ ^
Same as above.
... In file included from remux.c:10: ./remux.h:479:7: warning: private field 'numFrames' is not used [-Wunused-private-field] int numFrames; ^
Fixed in the attached patch.
... In file included from descriptor.c:14: ./descriptor.h:493:34: warning: private field 's' is not used [-Wunused-private-field] const descr_iso_639_language *s; ^
Fixed in the attached patch.
... hdffosd.c:45:14: warning: private field 'mBitmapNumColors' is not used [-Wunused-private-field] uint32_t mBitmapNumColors; ^ hdffosd.c:558:14: warning: private field 'mBitmapNumColors' is not used [-Wunused-private-field] uint32_t mBitmapNumColors; ^
Fixed in the attached patch.
... *** Plugin pictures: ... player.c:222:15: warning: case value not in enumerated type 'eKeys' [-Wswitch] case kLeft|k_Repeat: ^ player.c:226:16: warning: case value not in enumerated type 'eKeys' [-Wswitch] case kRight|k_Repeat:
Fixed in the attached patch.
Klaus
On Sat, 08 Feb 2014 13:51:10 +0100 Klaus Schmidinger Klaus.Schmidinger@tvdr.de wrote:
channels.c:45:119: warning: data argument not used by format string [-Wformat-extra-args] snprintf(buffer, sizeof(buffer), rid ? "%s-%d-%d-%d-%d" : "%s-%d-%d-%d", *cSource::ToString(source), nid, tid, sid, rid); ~~~~~~~~~~~~~ ^
This is explicitly checked with 'rid ? ...', so the warning is unjustified (although the compiler probably has a hard time figuring that out ;-).
The warning is justified, because if rid is 0 it's still there as an argument, but just happens to have a value of 0. I think you can make snprintf "consume" it without printing anything by adding %.d to the second format string.
eit.c:223:43: warning: comparison of constant 176 with expression of type 'SI::LinkageType' is always false [-Wtautological-constant-out-of-range-compare] if (ld->getLinkageType() == 0xB0) { // Premiere World ~~~~~~~~~~~~~~~~~~~~ ^ ~~~~
I assume this is because the enum LinkageType doesn't contain 0xB0. However, the actual value that comes from the SI data may well be 0xB0, so I'm now typecasting uint(ld->getLinkageType()).
If 0xB0 has a significant meaning wouldn't it be a good idea to add it to the enum?
receiver.c:28:6: warning: indirection of non-volatile null pointer will be deleted, not trap [-Wnull-dereference] *(char *)0 = 0; // cause a segfault ^~~~~~~~~~ receiver.c:28:6: note: consider using __builtin_trap() or qualifying pointer with 'volatile'
Can you suggest a different way of causing a segfault at this point?
You could add volatile as the warning suggests. Is there a good reason not to use abort() instead?
On 08.02.2014 14:34, Tony Houghton wrote:
On Sat, 08 Feb 2014 13:51:10 +0100 Klaus Schmidinger Klaus.Schmidinger@tvdr.de wrote:
channels.c:45:119: warning: data argument not used by format string [-Wformat-extra-args] snprintf(buffer, sizeof(buffer), rid ? "%s-%d-%d-%d-%d" : "%s-%d-%d-%d", *cSource::ToString(source), nid, tid, sid, rid); ~~~~~~~~~~~~~ ^
This is explicitly checked with 'rid ? ...', so the warning is unjustified (although the compiler probably has a hard time figuring that out ;-).
The warning is justified, because if rid is 0 it's still there as an argument, but just happens to have a value of 0. I think you can make snprintf "consume" it without printing anything by adding %.d to the second format string.
I'm afraid not. If I run
#include <stdio.h> int main(void) { for (int n = 0; n < 2; n++) printf(n ? "'%d-%d'\n" : "'%d%.d'\n", 1, 2); return 0; }
I get
'12' '1-2'
But maybe there *is* such a format character, it just isn't "%.d".
eit.c:223:43: warning: comparison of constant 176 with expression of type 'SI::LinkageType' is always false [-Wtautological-constant-out-of-range-compare] if (ld->getLinkageType() == 0xB0) { // Premiere World ~~~~~~~~~~~~~~~~~~~~ ^ ~~~~
I assume this is because the enum LinkageType doesn't contain 0xB0. However, the actual value that comes from the SI data may well be 0xB0, so I'm now typecasting uint(ld->getLinkageType()).
If 0xB0 has a significant meaning wouldn't it be a good idea to add it to the enum?
You're probably right. Since there are already several "Premiere" related definitions in libsi/si.h I guess it won't hurt to add yet another one. <rant>The DVB standard should never have allowed all this "private" stuff...</rant>
receiver.c:28:6: warning: indirection of non-volatile null pointer will be deleted, not trap [-Wnull-dereference] *(char *)0 = 0; // cause a segfault ^~~~~~~~~~ receiver.c:28:6: note: consider using __builtin_trap() or qualifying pointer with 'volatile'
Can you suggest a different way of causing a segfault at this point?
You could add volatile as the warning suggests. Is there a good reason not to use abort() instead?
The idea behind this was to allow for easy backtracking in such a case. I believe abort() wouldn't allow this, would it?
Klaus
On Sat, 08 Feb 2014 15:17:09 +0100 Klaus Schmidinger Klaus.Schmidinger@tvdr.de wrote:
On 08.02.2014 14:34, Tony Houghton wrote:
The warning is justified, because if rid is 0 it's still there as an argument, but just happens to have a value of 0. I think you can make snprintf "consume" it without printing anything by adding %.d to the second format string.
I'm afraid not. If I run
#include <stdio.h> int main(void) { for (int n = 0; n < 2; n++) printf(n ? "'%d-%d'\n" : "'%d%.d'\n", 1, 2); return 0; }
I get
'12' '1-2'
But maybe there *is* such a format character, it just isn't "%.d".
You're right, it looks like it has to be %.s, it doesn't work with %.d. If you used %.s you'd probably just get a type mismatch warning instead :-(. There's nothing wrong with the way you wrote it, but I like to enable all possible warnings and eliminate them. In this case I think I'd just print the rid even if it's 0.
Can you suggest a different way of causing a segfault at this point?
You could add volatile as the warning suggests. Is there a good reason not to use abort() instead?
The idea behind this was to allow for easy backtracking in such a case. I believe abort() wouldn't allow this, would it?
abort() does usually generate a useful core dump/stack backtrace IME.
On 08.02.2014 16:10, Tony Houghton wrote:
On Sat, 08 Feb 2014 15:17:09 +0100 Klaus Schmidinger Klaus.Schmidinger@tvdr.de wrote:
On 08.02.2014 14:34, Tony Houghton wrote:
The warning is justified, because if rid is 0 it's still there as an argument, but just happens to have a value of 0. I think you can make snprintf "consume" it without printing anything by adding %.d to the second format string.
I'm afraid not. If I run
#include <stdio.h> int main(void) { for (int n = 0; n < 2; n++) printf(n ? "'%d-%d'\n" : "'%d%.d'\n", 1, 2); return 0; }
I get
'12' '1-2'
But maybe there *is* such a format character, it just isn't "%.d".
You're right, it looks like it has to be %.s, it doesn't work with %.d. If you used %.s you'd probably just get a type mismatch warning instead :-(. There's nothing wrong with the way you wrote it, but I like to enable all possible warnings and eliminate them. In this case I think I'd just print the rid even if it's 0.
The thing is that I'd rather get rid of the RID altogether at some point, so I wouldn't want to manifest it by printing it if it is 0 ;-).
Can you suggest a different way of causing a segfault at this point?
You could add volatile as the warning suggests. Is there a good reason not to use abort() instead?
The idea behind this was to allow for easy backtracking in such a case. I believe abort() wouldn't allow this, would it?
abort() does usually generate a useful core dump/stack backtrace IME.
You're right, I've changed it.
Klaus
Dear Klaus,
thanks a lot for your quick reaction and for addressing the issues!
Am Samstag, den 08.02.2014, 13:51 +0100 schrieb Klaus Schmidinger:
On 08.02.2014 09:59, Paul Menzel wrote:
building VDR 2.1.3 with Clang 3.4.1 the warnings below are shown.
Most warnings look like they can be ignored. Maybe you can spot something, which should be fixed.
$ clang --version Debian clang version 3.4-1 (tags/RELEASE_34/final) (based on LLVM 3.4) Target: i386-pc-linux-gnu Thread model: posix $ CC=clang CXX=clang++ make […] clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
You may want to find an option that suppresses this warning, because the file names of VDR (*.c) are not going to change.
I know your point of view on that one from the same issue with Cppcheck, so I did not comment that warning. ;-)
Looking at the manual of Clang, the option below looks promising.
-ObjC++ Treat source input files as Objective-C++ inputs.
[…]
Thanks,
Paul
PS: Also big thanks to Tony for helping addressing the warnings!