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