summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS4
-rw-r--r--src/Compiler.h34
-rw-r--r--src/SongFilter.cxx3
-rw-r--r--src/db/plugins/ProxyDatabasePlugin.cxx8
-rw-r--r--src/db/plugins/simple/SimpleDatabasePlugin.hxx6
-rw-r--r--src/decoder/DecoderPlugin.cxx6
-rw-r--r--src/filter/plugins/ChainFilterPlugin.cxx9
-rw-r--r--src/filter/plugins/NormalizeFilterPlugin.cxx9
-rw-r--r--src/filter/plugins/ReplayGainFilterPlugin.cxx9
-rw-r--r--src/filter/plugins/RouteFilterPlugin.cxx9
-rw-r--r--src/filter/plugins/VolumeFilterPlugin.cxx9
-rw-r--r--src/fs/Charset.cxx6
-rw-r--r--src/fs/Traits.cxx6
-rw-r--r--src/input/InputStream.cxx3
-rw-r--r--src/output/plugins/ShoutOutputPlugin.cxx2
-rw-r--r--src/tag/TagBuilder.cxx9
-rw-r--r--src/util/ASCII.hxx26
-rw-r--r--src/util/Manual.hxx4
-rw-r--r--src/util/UriUtil.cxx3
19 files changed, 114 insertions, 51 deletions
diff --git a/NEWS b/NEWS
index 3443e503f..14676a5a7 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,7 @@ ver 0.19.8 (not yet released)
* decoder
- dsdiff, dsf: allow ID3 tags larger than 4 kB
- ffmpeg: support interleaved floating point
+* fix clang 3.6 warnings
ver 0.19.7 (2014/12/17)
* input
@@ -168,6 +169,9 @@ ver 0.19 (2014/10/10)
* install systemd unit for socket activation
* Android port
+ver 0.18.22 (not yet released)
+* fix clang 3.6 warnings
+
ver 0.18.21 (2014/12/17)
* playlist
- embcue: fix filename suffix detection
diff --git a/src/Compiler.h b/src/Compiler.h
index 44a87c7ba..fea971526 100644
--- a/src/Compiler.h
+++ b/src/Compiler.h
@@ -20,33 +20,45 @@
#ifndef COMPILER_H
#define COMPILER_H
-#define GCC_CHECK_VERSION(major, minor) \
- (defined(__GNUC__) && \
- (__GNUC__ > (major) || (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor))))
+#define GCC_MAKE_VERSION(major, minor, patchlevel) ((major) * 10000 + (minor) * 100 + patchlevel)
#ifdef __GNUC__
-#define GCC_VERSION (__GNUC__ * 10000 \
- + __GNUC_MINOR__ * 100 \
- + __GNUC_PATCHLEVEL__)
+#define GCC_VERSION GCC_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
#else
#define GCC_VERSION 0
#endif
+#define GCC_CHECK_VERSION(major, minor) \
+ (defined(__GNUC__) && GCC_VERSION >= GCC_MAKE_VERSION(major, minor, 0))
+
+/**
+ * Are we building with gcc (not clang or any other compiler) and a
+ * version older than the specified one?
+ */
+#define GCC_OLDER_THAN(major, minor) \
+ (defined(__GNUC__) && !defined(__clang__) && \
+ GCC_VERSION < GCC_MAKE_VERSION(major, minor, 0))
+
#ifdef __clang__
-# define CLANG_VERSION (__clang_major__ * 10000 \
- + __clang_minor__ * 100 \
- + __clang_patchlevel__)
+# define CLANG_VERSION GCC_MAKE_VERSION(__clang_major__, __clang_minor__, __clang_patchlevel__)
# if __clang_major__ < 3
# error Sorry, your clang version is too old. You need at least version 3.1.
# endif
#elif defined(__GNUC__)
-# if !GCC_CHECK_VERSION(4,6)
+# if GCC_OLDER_THAN(4,6)
# error Sorry, your gcc version is too old. You need at least version 4.6.
# endif
#else
# warning Untested compiler. Use at your own risk!
#endif
+/**
+ * Are we building with the specified version of clang or newer?
+ */
+#define CLANG_CHECK_VERSION(major, minor) \
+ (defined(__clang__) && \
+ CLANG_VERSION >= GCC_MAKE_VERSION(major, minor, 0))
+
#if GCC_CHECK_VERSION(4,0)
/* GCC 4.x */
@@ -141,7 +153,7 @@
#if defined(__cplusplus)
/* support for C++11 "override" was added in gcc 4.7 */
-#if !defined(__clang__) && !GCC_CHECK_VERSION(4,7)
+#if GCC_OLDER_THAN(4,7)
#define override
#define final
#endif
diff --git a/src/SongFilter.cxx b/src/SongFilter.cxx
index 794cb9208..dc0a63df3 100644
--- a/src/SongFilter.cxx
+++ b/src/SongFilter.cxx
@@ -77,7 +77,10 @@ SongFilter::Item::Item(unsigned _tag, time_t _time)
bool
SongFilter::Item::StringMatch(const char *s) const
{
+#if !CLANG_CHECK_VERSION(3,6)
+ /* disabled on clang due to -Wtautological-pointer-compare */
assert(s != nullptr);
+#endif
if (fold_case) {
const std::string folded = IcuCaseFold(s);
diff --git a/src/db/plugins/ProxyDatabasePlugin.cxx b/src/db/plugins/ProxyDatabasePlugin.cxx
index fba72210d..5fd224bb5 100644
--- a/src/db/plugins/ProxyDatabasePlugin.cxx
+++ b/src/db/plugins/ProxyDatabasePlugin.cxx
@@ -103,7 +103,7 @@ public:
virtual void Close() override;
virtual const LightSong *GetSong(const char *uri_utf8,
Error &error) const override;
- virtual void ReturnSong(const LightSong *song) const;
+ void ReturnSong(const LightSong *song) const override;
virtual bool Visit(const DatabaseSelection &selection,
VisitDirectory visit_directory,
@@ -731,7 +731,7 @@ ProxyDatabase::Visit(const DatabaseSelection &selection,
{
// TODO: eliminate the const_cast
if (!const_cast<ProxyDatabase *>(this)->EnsureConnected(error))
- return nullptr;
+ return false;
if (!visit_directory && !visit_playlist && selection.recursive &&
(ServerSupportsSearchBase(connection)
@@ -757,7 +757,7 @@ ProxyDatabase::VisitUniqueTags(const DatabaseSelection &selection,
{
// TODO: eliminate the const_cast
if (!const_cast<ProxyDatabase *>(this)->EnsureConnected(error))
- return nullptr;
+ return false;
enum mpd_tag_type tag_type2 = Convert(tag_type);
if (tag_type2 == MPD_TAG_COUNT) {
@@ -810,7 +810,7 @@ ProxyDatabase::GetStats(const DatabaseSelection &selection,
// TODO: eliminate the const_cast
if (!const_cast<ProxyDatabase *>(this)->EnsureConnected(error))
- return nullptr;
+ return false;
struct mpd_stats *stats2 =
mpd_run_stats(connection);
diff --git a/src/db/plugins/simple/SimpleDatabasePlugin.hxx b/src/db/plugins/simple/SimpleDatabasePlugin.hxx
index 7ba71e272..d82225f8c 100644
--- a/src/db/plugins/simple/SimpleDatabasePlugin.hxx
+++ b/src/db/plugins/simple/SimpleDatabasePlugin.hxx
@@ -110,9 +110,9 @@ public:
virtual bool Open(Error &error) override;
virtual void Close() override;
- virtual const LightSong *GetSong(const char *uri_utf8,
- Error &error) const override;
- virtual void ReturnSong(const LightSong *song) const;
+ const LightSong *GetSong(const char *uri_utf8,
+ Error &error) const override;
+ void ReturnSong(const LightSong *song) const override;
virtual bool Visit(const DatabaseSelection &selection,
VisitDirectory visit_directory,
diff --git a/src/decoder/DecoderPlugin.cxx b/src/decoder/DecoderPlugin.cxx
index 3be812c3b..a0722c348 100644
--- a/src/decoder/DecoderPlugin.cxx
+++ b/src/decoder/DecoderPlugin.cxx
@@ -26,7 +26,10 @@
bool
DecoderPlugin::SupportsSuffix(const char *suffix) const
{
+#if !CLANG_CHECK_VERSION(3,6)
+ /* disabled on clang due to -Wtautological-pointer-compare */
assert(suffix != nullptr);
+#endif
return suffixes != nullptr && string_array_contains(suffixes, suffix);
@@ -35,7 +38,10 @@ DecoderPlugin::SupportsSuffix(const char *suffix) const
bool
DecoderPlugin::SupportsMimeType(const char *mime_type) const
{
+#if !CLANG_CHECK_VERSION(3,6)
+ /* disabled on clang due to -Wtautological-pointer-compare */
assert(mime_type != nullptr);
+#endif
return mime_types != nullptr &&
string_array_contains(mime_types, mime_type);
diff --git a/src/filter/plugins/ChainFilterPlugin.cxx b/src/filter/plugins/ChainFilterPlugin.cxx
index 7342beb14..4aeee69af 100644
--- a/src/filter/plugins/ChainFilterPlugin.cxx
+++ b/src/filter/plugins/ChainFilterPlugin.cxx
@@ -53,10 +53,11 @@ public:
children.emplace_back(name, filter);
}
- virtual AudioFormat Open(AudioFormat &af, Error &error) override;
- virtual void Close();
- virtual ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
- Error &error);
+ /* virtual methods from class Filter */
+ AudioFormat Open(AudioFormat &af, Error &error) override;
+ void Close() override;
+ ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
+ Error &error) override;
private:
/**
diff --git a/src/filter/plugins/NormalizeFilterPlugin.cxx b/src/filter/plugins/NormalizeFilterPlugin.cxx
index a69df2b81..372ab53ac 100644
--- a/src/filter/plugins/NormalizeFilterPlugin.cxx
+++ b/src/filter/plugins/NormalizeFilterPlugin.cxx
@@ -34,10 +34,11 @@ class NormalizeFilter final : public Filter {
PcmBuffer buffer;
public:
- virtual AudioFormat Open(AudioFormat &af, Error &error) override;
- virtual void Close();
- virtual ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
- Error &error) override;
+ /* virtual methods from class Filter */
+ AudioFormat Open(AudioFormat &af, Error &error) override;
+ void Close() override;
+ ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
+ Error &error) override;
};
static Filter *
diff --git a/src/filter/plugins/ReplayGainFilterPlugin.cxx b/src/filter/plugins/ReplayGainFilterPlugin.cxx
index 651352ac9..f76e48e37 100644
--- a/src/filter/plugins/ReplayGainFilterPlugin.cxx
+++ b/src/filter/plugins/ReplayGainFilterPlugin.cxx
@@ -112,10 +112,11 @@ public:
*/
void Update();
- virtual AudioFormat Open(AudioFormat &af, Error &error) override;
- virtual void Close();
- virtual ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
- Error &error) override;
+ /* virtual methods from class Filter */
+ AudioFormat Open(AudioFormat &af, Error &error) override;
+ void Close() override;
+ ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
+ Error &error) override;
};
void
diff --git a/src/filter/plugins/RouteFilterPlugin.cxx b/src/filter/plugins/RouteFilterPlugin.cxx
index a252af97d..4094119f2 100644
--- a/src/filter/plugins/RouteFilterPlugin.cxx
+++ b/src/filter/plugins/RouteFilterPlugin.cxx
@@ -120,10 +120,11 @@ public:
*/
bool Configure(const config_param &param, Error &error);
- virtual AudioFormat Open(AudioFormat &af, Error &error) override;
- virtual void Close();
- virtual ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
- Error &error) override;
+ /* virtual methods from class Filter */
+ AudioFormat Open(AudioFormat &af, Error &error) override;
+ void Close() override;
+ ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
+ Error &error) override;
};
bool
diff --git a/src/filter/plugins/VolumeFilterPlugin.cxx b/src/filter/plugins/VolumeFilterPlugin.cxx
index 7b6ccc51e..17e061476 100644
--- a/src/filter/plugins/VolumeFilterPlugin.cxx
+++ b/src/filter/plugins/VolumeFilterPlugin.cxx
@@ -43,10 +43,11 @@ public:
pv.SetVolume(_volume);
}
- virtual AudioFormat Open(AudioFormat &af, Error &error) override;
- virtual void Close();
- virtual ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
- Error &error) override;
+ /* virtual methods from class Filter */
+ AudioFormat Open(AudioFormat &af, Error &error) override;
+ void Close() override;
+ ConstBuffer<void> FilterPCM(ConstBuffer<void> src,
+ Error &error) override;
};
static constexpr Domain volume_domain("pcm_volume");
diff --git a/src/fs/Charset.cxx b/src/fs/Charset.cxx
index abf4d8287..c634c9340 100644
--- a/src/fs/Charset.cxx
+++ b/src/fs/Charset.cxx
@@ -103,7 +103,10 @@ static inline void FixSeparators(std::string &s)
std::string
PathToUTF8(const char *path_fs)
{
+#if !CLANG_CHECK_VERSION(3,6)
+ /* disabled on clang due to -Wtautological-pointer-compare */
assert(path_fs != nullptr);
+#endif
#ifdef HAVE_GLIB
if (fs_charset.empty()) {
@@ -144,7 +147,10 @@ PathToUTF8(const char *path_fs)
char *
PathFromUTF8(const char *path_utf8)
{
+#if !CLANG_CHECK_VERSION(3,6)
+ /* disabled on clang due to -Wtautological-pointer-compare */
assert(path_utf8 != nullptr);
+#endif
if (fs_charset.empty())
return g_strdup(path_utf8);
diff --git a/src/fs/Traits.cxx b/src/fs/Traits.cxx
index d62987087..166b31f4e 100644
--- a/src/fs/Traits.cxx
+++ b/src/fs/Traits.cxx
@@ -52,7 +52,10 @@ template<typename Traits>
typename Traits::const_pointer
GetBasePathImpl(typename Traits::const_pointer p)
{
+#if !CLANG_CHECK_VERSION(3,6)
+ /* disabled on clang due to -Wtautological-pointer-compare */
assert(p != nullptr);
+#endif
typename Traits::const_pointer sep = Traits::FindLastSeparator(p);
return sep != nullptr
@@ -64,7 +67,10 @@ template<typename Traits>
typename Traits::string
GetParentPathImpl(typename Traits::const_pointer p)
{
+#if !CLANG_CHECK_VERSION(3,6)
+ /* disabled on clang due to -Wtautological-pointer-compare */
assert(p != nullptr);
+#endif
typename Traits::const_pointer sep = Traits::FindLastSeparator(p);
if (sep == nullptr)
diff --git a/src/input/InputStream.cxx b/src/input/InputStream.cxx
index f5efe8ef1..44f726a62 100644
--- a/src/input/InputStream.cxx
+++ b/src/input/InputStream.cxx
@@ -122,7 +122,10 @@ InputStream::IsAvailable()
size_t
InputStream::LockRead(void *ptr, size_t _size, Error &error)
{
+#if !CLANG_CHECK_VERSION(3,6)
+ /* disabled on clang due to -Wtautological-pointer-compare */
assert(ptr != nullptr);
+#endif
assert(_size > 0);
const ScopeLock protect(mutex);
diff --git a/src/output/plugins/ShoutOutputPlugin.cxx b/src/output/plugins/ShoutOutputPlugin.cxx
index 0341e1cf7..b51f7ed82 100644
--- a/src/output/plugins/ShoutOutputPlugin.cxx
+++ b/src/output/plugins/ShoutOutputPlugin.cxx
@@ -109,7 +109,7 @@ ShoutOutput::Configure(const config_param &param, Error &error)
if (!audio_format.IsFullyDefined()) {
error.Set(config_domain,
"Need full audio format specification");
- return nullptr;
+ return false;
}
const char *host = require_block_string(param, "host");
diff --git a/src/tag/TagBuilder.cxx b/src/tag/TagBuilder.cxx
index c9ebcd654..93518f6e9 100644
--- a/src/tag/TagBuilder.cxx
+++ b/src/tag/TagBuilder.cxx
@@ -182,7 +182,10 @@ TagBuilder::Complement(const Tag &other)
inline void
TagBuilder::AddItemInternal(TagType type, const char *value, size_t length)
{
+#if !CLANG_CHECK_VERSION(3,6)
+ /* disabled on clang due to -Wtautological-pointer-compare */
assert(value != nullptr);
+#endif
assert(length > 0);
auto f = FixTagString(value, length);
@@ -203,7 +206,10 @@ TagBuilder::AddItemInternal(TagType type, const char *value, size_t length)
void
TagBuilder::AddItem(TagType type, const char *value, size_t length)
{
+#if !CLANG_CHECK_VERSION(3,6)
+ /* disabled on clang due to -Wtautological-pointer-compare */
assert(value != nullptr);
+#endif
if (length == 0 || ignore_tag_items[type])
return;
@@ -214,7 +220,10 @@ TagBuilder::AddItem(TagType type, const char *value, size_t length)
void
TagBuilder::AddItem(TagType type, const char *value)
{
+#if !CLANG_CHECK_VERSION(3,6)
+ /* disabled on clang due to -Wtautological-pointer-compare */
assert(value != nullptr);
+#endif
AddItem(type, value, strlen(value));
}
diff --git a/src/util/ASCII.hxx b/src/util/ASCII.hxx
index 19a18a1bb..9f7147338 100644
--- a/src/util/ASCII.hxx
+++ b/src/util/ASCII.hxx
@@ -43,24 +43,30 @@ gcc_pure gcc_nonnull_all
static inline bool
StringEqualsCaseASCII(const char *a, const char *b)
{
- assert(a != nullptr);
- assert(b != nullptr);
+#if !CLANG_CHECK_VERSION(3,6)
+ /* disabled on clang due to -Wtautological-pointer-compare */
+ assert(a != nullptr);
+ assert(b != nullptr);
+#endif
- /* note: strcasecmp() depends on the locale, but for ASCII-only
- strings, it's safe to use */
- return strcasecmp(a, b) == 0;
+ /* note: strcasecmp() depends on the locale, but for ASCII-only
+ strings, it's safe to use */
+ return strcasecmp(a, b) == 0;
}
gcc_pure gcc_nonnull_all
static inline bool
StringEqualsCaseASCII(const char *a, const char *b, size_t n)
{
- assert(a != nullptr);
- assert(b != nullptr);
+#if !CLANG_CHECK_VERSION(3,6)
+ /* disabled on clang due to -Wtautological-pointer-compare */
+ assert(a != nullptr);
+ assert(b != nullptr);
+#endif
- /* note: strcasecmp() depends on the locale, but for ASCII-only
- strings, it's safe to use */
- return strncasecmp(a, b, n) == 0;
+ /* note: strcasecmp() depends on the locale, but for ASCII-only
+ strings, it's safe to use */
+ return strncasecmp(a, b, n) == 0;
}
#endif
diff --git a/src/util/Manual.hxx b/src/util/Manual.hxx
index baab0a555..75cffac06 100644
--- a/src/util/Manual.hxx
+++ b/src/util/Manual.hxx
@@ -35,7 +35,7 @@
#include <new>
#include <utility>
-#if !defined(__clang__) && __GNUC__ && !GCC_CHECK_VERSION(4,8)
+#if GCC_OLDER_THAN(4,8)
#include <type_traits>
#endif
@@ -54,7 +54,7 @@
*/
template<class T>
class Manual {
-#if !defined(__clang__) && __GNUC__ && !GCC_CHECK_VERSION(4,8)
+#if GCC_OLDER_THAN(4,8)
/* no alignas() on gcc < 4.8: apply worst-case fallback */
__attribute__((aligned(8)))
#else
diff --git a/src/util/UriUtil.cxx b/src/util/UriUtil.cxx
index 62977e91b..54d0ded77 100644
--- a/src/util/UriUtil.cxx
+++ b/src/util/UriUtil.cxx
@@ -140,8 +140,11 @@ uri_remove_auth(const char *uri)
bool
uri_is_child(const char *parent, const char *child)
{
+#if !CLANG_CHECK_VERSION(3,6)
+ /* disabled on clang due to -Wtautological-pointer-compare */
assert(parent != nullptr);
assert(child != nullptr);
+#endif
const size_t parent_length = strlen(parent);
return memcmp(parent, child, parent_length) == 0 &&