Merge remote-tracking branches 'neheb/fwhfggwe', 'neheb/nvm2', 'neheb/nvm22', 'neheb/bvm' and 'neheb/cl2'

This commit is contained in:
Max Kellermann
2020-03-16 17:25:50 +01:00
116 changed files with 253 additions and 262 deletions
src
Chrono.hxxCommandLine.cxxInstance.cxxLogInit.cxx
command
db
decoder
encoder
event
filter
fs
input
lib
mixer
neighbor
output
player
playlist
storage
system
tag
thread
unix
util
win32
zeroconf
test

@ -95,7 +95,7 @@ public:
constexpr double ToDoubleS() const { constexpr double ToDoubleS() const {
return double(count()) / 1000.; return double(count()) / 1000.;
}; }
constexpr bool IsZero() const { constexpr bool IsZero() const {
return count() == 0; return count() == 0;
@ -199,7 +199,7 @@ public:
constexpr double ToDoubleS() const { constexpr double ToDoubleS() const {
return double(count()) / 1000.; return double(count()) / 1000.;
}; }
constexpr bool IsZero() const { constexpr bool IsZero() const {
return count() == 0; return count() == 0;

@ -106,7 +106,7 @@ static constexpr OptionDef option_defs[] = {
static constexpr Domain cmdline_domain("cmdline"); static constexpr Domain cmdline_domain("cmdline");
gcc_noreturn [[noreturn]]
static void version() static void version()
{ {
printf("Music Player Daemon " VERSION " (%s)" printf("Music Player Daemon " VERSION " (%s)"
@ -272,7 +272,7 @@ static void PrintOption(const OptionDef &opt)
opt.GetDescription()); opt.GetDescription());
} }
gcc_noreturn [[noreturn]]
static void help() static void help()
{ {
printf("Usage:\n" printf("Usage:\n"

@ -150,13 +150,13 @@ Instance::OnDatabaseSongRemoved(const char *uri) noexcept
#ifdef ENABLE_NEIGHBOR_PLUGINS #ifdef ENABLE_NEIGHBOR_PLUGINS
void void
Instance::FoundNeighbor(gcc_unused const NeighborInfo &info) noexcept Instance::FoundNeighbor([[maybe_unused]] const NeighborInfo &info) noexcept
{ {
EmitIdle(IDLE_NEIGHBOR); EmitIdle(IDLE_NEIGHBOR);
} }
void void
Instance::LostNeighbor(gcc_unused const NeighborInfo &info) noexcept Instance::LostNeighbor([[maybe_unused]] const NeighborInfo &info) noexcept
{ {
EmitIdle(IDLE_NEIGHBOR); EmitIdle(IDLE_NEIGHBOR);
} }

@ -46,7 +46,7 @@
#define LOG_DATE_BUF_SIZE 16 #define LOG_DATE_BUF_SIZE 16
#define LOG_DATE_LEN (LOG_DATE_BUF_SIZE - 1) #define LOG_DATE_LEN (LOG_DATE_BUF_SIZE - 1)
gcc_unused [[maybe_unused]]
static constexpr Domain log_domain("log"); static constexpr Domain log_domain("log");
#ifndef ANDROID #ifndef ANDROID

@ -216,8 +216,8 @@ static constexpr unsigned num_commands = std::size(commands);
gcc_pure gcc_pure
static bool static bool
command_available(gcc_unused const Partition &partition, command_available([[maybe_unused]] const Partition &partition,
gcc_unused const struct command *cmd) noexcept [[maybe_unused]] const struct command *cmd) noexcept
{ {
#ifdef ENABLE_SQLITE #ifdef ENABLE_SQLITE
if (StringIsEqual(cmd->cmd, "sticker")) if (StringIsEqual(cmd->cmd, "sticker"))
@ -272,14 +272,14 @@ PrintUnavailableCommands(Response &r, unsigned permission) noexcept
/* don't be fooled, this is the command handler for "commands" command */ /* don't be fooled, this is the command handler for "commands" command */
static CommandResult static CommandResult
handle_commands(Client &client, gcc_unused Request request, Response &r) handle_commands(Client &client, [[maybe_unused]] Request request, Response &r)
{ {
return PrintAvailableCommands(r, client.GetPartition(), return PrintAvailableCommands(r, client.GetPartition(),
client.GetPermission()); client.GetPermission());
} }
static CommandResult static CommandResult
handle_not_commands(Client &client, gcc_unused Request request, Response &r) handle_not_commands(Client &client, [[maybe_unused]] Request request, Response &r)
{ {
return PrintUnavailableCommands(r, client.GetPermission()); return PrintUnavailableCommands(r, client.GetPermission());
} }

@ -27,15 +27,15 @@
#include "util/StringAPI.hxx" #include "util/StringAPI.hxx"
CommandResult CommandResult
handle_close(gcc_unused Client &client, gcc_unused Request args, handle_close([[maybe_unused]] Client &client, [[maybe_unused]] Request args,
gcc_unused Response &r) [[maybe_unused]] Response &r)
{ {
return CommandResult::FINISH; return CommandResult::FINISH;
} }
CommandResult CommandResult
handle_ping(gcc_unused Client &client, gcc_unused Request args, handle_ping([[maybe_unused]] Client &client, [[maybe_unused]] Request args,
gcc_unused Response &r) [[maybe_unused]] Response &r)
{ {
return CommandResult::OK; return CommandResult::OK;
} }

@ -72,7 +72,7 @@ handle_unsubscribe(Client &client, Request args, Response &r)
} }
CommandResult CommandResult
handle_channels(Client &client, gcc_unused Request args, Response &r) handle_channels(Client &client, [[maybe_unused]] Request args, Response &r)
{ {
assert(args.empty()); assert(args.empty());
@ -92,7 +92,7 @@ handle_channels(Client &client, gcc_unused Request args, Response &r)
CommandResult CommandResult
handle_read_messages(Client &client, handle_read_messages(Client &client,
gcc_unused Request args, Response &r) [[maybe_unused]] Request args, Response &r)
{ {
assert(args.empty()); assert(args.empty());

@ -34,7 +34,7 @@ neighbor_commands_available(const Instance &instance) noexcept
} }
CommandResult CommandResult
handle_listneighbors(Client &client, gcc_unused Request args, Response &r) handle_listneighbors(Client &client, [[maybe_unused]] Request args, Response &r)
{ {
const NeighborGlue *const neighbors = const NeighborGlue *const neighbors =
client.GetInstance().neighbors.get(); client.GetInstance().neighbors.get();

@ -69,7 +69,7 @@ print_spl_list(Response &r, const PlaylistVector &list)
} }
CommandResult CommandResult
handle_urlhandlers(Client &client, gcc_unused Request args, Response &r) handle_urlhandlers(Client &client, [[maybe_unused]] Request args, Response &r)
{ {
if (client.IsLocal()) if (client.IsLocal())
r.Format("handler: file://\n"); r.Format("handler: file://\n");
@ -78,7 +78,7 @@ handle_urlhandlers(Client &client, gcc_unused Request args, Response &r)
} }
CommandResult CommandResult
handle_decoders(gcc_unused Client &client, gcc_unused Request args, handle_decoders([[maybe_unused]] Client &client, [[maybe_unused]] Request args,
Response &r) Response &r)
{ {
decoder_list_print(r); decoder_list_print(r);
@ -86,8 +86,8 @@ handle_decoders(gcc_unused Client &client, gcc_unused Request args,
} }
CommandResult CommandResult
handle_kill(gcc_unused Client &client, gcc_unused Request request, handle_kill([[maybe_unused]] Client &client, [[maybe_unused]] Request request,
gcc_unused Response &r) [[maybe_unused]] Response &r)
{ {
return CommandResult::KILL; return CommandResult::KILL;
} }
@ -307,7 +307,7 @@ handle_update(Client &client, Request args, Response &r, bool discard)
} }
CommandResult CommandResult
handle_update(Client &client, Request args, gcc_unused Response &r) handle_update(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
return handle_update(client, args, r, false); return handle_update(client, args, r, false);
} }
@ -360,14 +360,14 @@ handle_volume(Client &client, Request args, Response &r)
} }
CommandResult CommandResult
handle_stats(Client &client, gcc_unused Request args, Response &r) handle_stats(Client &client, [[maybe_unused]] Request args, Response &r)
{ {
stats_print(r, client.GetPartition()); stats_print(r, client.GetPartition());
return CommandResult::OK; return CommandResult::OK;
} }
CommandResult CommandResult
handle_config(Client &client, gcc_unused Request args, Response &r) handle_config(Client &client, [[maybe_unused]] Request args, Response &r)
{ {
if (!client.IsLocal()) { if (!client.IsLocal()) {
r.Error(ACK_ERROR_PERMISSION, r.Error(ACK_ERROR_PERMISSION,

@ -118,7 +118,7 @@ handle_outputset(Client &client, Request request, Response &response)
} }
CommandResult CommandResult
handle_devices(Client &client, gcc_unused Request args, Response &r) handle_devices(Client &client, [[maybe_unused]] Request args, Response &r)
{ {
assert(args.empty()); assert(args.empty());

@ -60,7 +60,7 @@
#define COMMAND_STATUS_UPDATING_DB "updating_db" #define COMMAND_STATUS_UPDATING_DB "updating_db"
CommandResult CommandResult
handle_play(Client &client, Request args, gcc_unused Response &r) handle_play(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
int song = args.ParseOptional(0, -1); int song = args.ParseOptional(0, -1);
@ -69,7 +69,7 @@ handle_play(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_playid(Client &client, Request args, gcc_unused Response &r) handle_playid(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
int id = args.ParseOptional(0, -1); int id = args.ParseOptional(0, -1);
@ -78,21 +78,21 @@ handle_playid(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_stop(Client &client, gcc_unused Request args, gcc_unused Response &r) handle_stop(Client &client, [[maybe_unused]] Request args, [[maybe_unused]] Response &r)
{ {
client.GetPartition().Stop(); client.GetPartition().Stop();
return CommandResult::OK; return CommandResult::OK;
} }
CommandResult CommandResult
handle_currentsong(Client &client, gcc_unused Request args, Response &r) handle_currentsong(Client &client, [[maybe_unused]] Request args, Response &r)
{ {
playlist_print_current(r, client.GetPlaylist()); playlist_print_current(r, client.GetPlaylist());
return CommandResult::OK; return CommandResult::OK;
} }
CommandResult CommandResult
handle_pause(Client &client, Request args, gcc_unused Response &r) handle_pause(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
auto &pc = client.GetPlayerControl(); auto &pc = client.GetPlayerControl();
@ -106,7 +106,7 @@ handle_pause(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_status(Client &client, gcc_unused Request args, Response &r) handle_status(Client &client, [[maybe_unused]] Request args, Response &r)
{ {
auto &partition = client.GetPartition(); auto &partition = client.GetPartition();
auto &pc = partition.pc; auto &pc = partition.pc;
@ -216,7 +216,7 @@ handle_status(Client &client, gcc_unused Request args, Response &r)
} }
CommandResult CommandResult
handle_next(Client &client, gcc_unused Request args, gcc_unused Response &r) handle_next(Client &client, [[maybe_unused]] Request args, [[maybe_unused]] Response &r)
{ {
playlist &playlist = client.GetPlaylist(); playlist &playlist = client.GetPlaylist();
@ -234,15 +234,15 @@ handle_next(Client &client, gcc_unused Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_previous(Client &client, gcc_unused Request args, handle_previous(Client &client, [[maybe_unused]] Request args,
gcc_unused Response &r) [[maybe_unused]] Response &r)
{ {
client.GetPartition().PlayPrevious(); client.GetPartition().PlayPrevious();
return CommandResult::OK; return CommandResult::OK;
} }
CommandResult CommandResult
handle_repeat(Client &client, Request args, gcc_unused Response &r) handle_repeat(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
bool status = args.ParseBool(0); bool status = args.ParseBool(0);
client.GetPartition().SetRepeat(status); client.GetPartition().SetRepeat(status);
@ -250,7 +250,7 @@ handle_repeat(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_single(Client &client, Request args, gcc_unused Response &r) handle_single(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
auto new_mode = SingleFromString(args.front()); auto new_mode = SingleFromString(args.front());
client.GetPartition().SetSingle(new_mode); client.GetPartition().SetSingle(new_mode);
@ -258,7 +258,7 @@ handle_single(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_consume(Client &client, Request args, gcc_unused Response &r) handle_consume(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
bool status = args.ParseBool(0); bool status = args.ParseBool(0);
client.GetPartition().SetConsume(status); client.GetPartition().SetConsume(status);
@ -266,7 +266,7 @@ handle_consume(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_random(Client &client, Request args, gcc_unused Response &r) handle_random(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
bool status = args.ParseBool(0); bool status = args.ParseBool(0);
auto &partition = client.GetPartition(); auto &partition = client.GetPartition();
@ -276,15 +276,15 @@ handle_random(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_clearerror(Client &client, gcc_unused Request args, handle_clearerror(Client &client, [[maybe_unused]] Request args,
gcc_unused Response &r) [[maybe_unused]] Response &r)
{ {
client.GetPlayerControl().LockClearError(); client.GetPlayerControl().LockClearError();
return CommandResult::OK; return CommandResult::OK;
} }
CommandResult CommandResult
handle_seek(Client &client, Request args, gcc_unused Response &r) handle_seek(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
unsigned song = args.ParseUnsigned(0); unsigned song = args.ParseUnsigned(0);
SongTime seek_time = args.ParseSongTime(1); SongTime seek_time = args.ParseSongTime(1);
@ -294,7 +294,7 @@ handle_seek(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_seekid(Client &client, Request args, gcc_unused Response &r) handle_seekid(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
unsigned id = args.ParseUnsigned(0); unsigned id = args.ParseUnsigned(0);
SongTime seek_time = args.ParseSongTime(1); SongTime seek_time = args.ParseSongTime(1);
@ -304,7 +304,7 @@ handle_seekid(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_seekcur(Client &client, Request args, gcc_unused Response &r) handle_seekcur(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
const char *p = args.front(); const char *p = args.front();
bool relative = *p == '+' || *p == '-'; bool relative = *p == '+' || *p == '-';
@ -315,7 +315,7 @@ handle_seekcur(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_crossfade(Client &client, Request args, gcc_unused Response &r) handle_crossfade(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
FloatDuration duration{args.ParseUnsigned(0)}; FloatDuration duration{args.ParseUnsigned(0)};
client.GetPlayerControl().SetCrossFade(duration); client.GetPlayerControl().SetCrossFade(duration);
@ -323,7 +323,7 @@ handle_crossfade(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_mixrampdb(Client &client, Request args, gcc_unused Response &r) handle_mixrampdb(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
float db = args.ParseFloat(0); float db = args.ParseFloat(0);
client.GetPlayerControl().SetMixRampDb(db); client.GetPlayerControl().SetMixRampDb(db);
@ -331,7 +331,7 @@ handle_mixrampdb(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_mixrampdelay(Client &client, Request args, gcc_unused Response &r) handle_mixrampdelay(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
FloatDuration delay_secs{args.ParseFloat(0)}; FloatDuration delay_secs{args.ParseFloat(0)};
client.GetPlayerControl().SetMixRampDelay(delay_secs); client.GetPlayerControl().SetMixRampDelay(delay_secs);
@ -349,7 +349,7 @@ handle_replay_gain_mode(Client &client, Request args, Response &)
} }
CommandResult CommandResult
handle_replay_gain_status(Client &client, gcc_unused Request args, handle_replay_gain_status(Client &client, [[maybe_unused]] Request args,
Response &r) Response &r)
{ {
r.Format("replay_gain_mode: %s\n", r.Format("replay_gain_mode: %s\n",

@ -60,14 +60,14 @@ print_spl_list(Response &r, const PlaylistVector &list)
} }
CommandResult CommandResult
handle_save(Client &client, Request args, gcc_unused Response &r) handle_save(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
spl_save_playlist(args.front(), client.GetPlaylist()); spl_save_playlist(args.front(), client.GetPlaylist());
return CommandResult::OK; return CommandResult::OK;
} }
CommandResult CommandResult
handle_load(Client &client, Request args, gcc_unused Response &r) handle_load(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
const auto uri = LocateUri(UriPluginKind::PLAYLIST, args.front(), const auto uri = LocateUri(UriPluginKind::PLAYLIST, args.front(),
&client &client
@ -132,7 +132,7 @@ handle_listplaylistinfo(Client &client, Request args, Response &r)
} }
CommandResult CommandResult
handle_rm(gcc_unused Client &client, Request args, gcc_unused Response &r) handle_rm([[maybe_unused]] Client &client, Request args, [[maybe_unused]] Response &r)
{ {
const char *const name = args.front(); const char *const name = args.front();
@ -141,7 +141,7 @@ handle_rm(gcc_unused Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_rename(gcc_unused Client &client, Request args, gcc_unused Response &r) handle_rename([[maybe_unused]] Client &client, Request args, [[maybe_unused]] Response &r)
{ {
const char *const old_name = args[0]; const char *const old_name = args[0];
const char *const new_name = args[1]; const char *const new_name = args[1];
@ -151,8 +151,8 @@ handle_rename(gcc_unused Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_playlistdelete(gcc_unused Client &client, handle_playlistdelete([[maybe_unused]] Client &client,
Request args, gcc_unused Response &r) Request args, [[maybe_unused]] Response &r)
{ {
const char *const name = args[0]; const char *const name = args[0];
unsigned from = args.ParseUnsigned(1); unsigned from = args.ParseUnsigned(1);
@ -162,8 +162,8 @@ handle_playlistdelete(gcc_unused Client &client,
} }
CommandResult CommandResult
handle_playlistmove(gcc_unused Client &client, handle_playlistmove([[maybe_unused]] Client &client,
Request args, gcc_unused Response &r) Request args, [[maybe_unused]] Response &r)
{ {
const char *const name = args.front(); const char *const name = args.front();
unsigned from = args.ParseUnsigned(1); unsigned from = args.ParseUnsigned(1);
@ -174,8 +174,8 @@ handle_playlistmove(gcc_unused Client &client,
} }
CommandResult CommandResult
handle_playlistclear(gcc_unused Client &client, handle_playlistclear([[maybe_unused]] Client &client,
Request args, gcc_unused Response &r) Request args, [[maybe_unused]] Response &r)
{ {
const char *const name = args.front(); const char *const name = args.front();
@ -184,7 +184,7 @@ handle_playlistclear(gcc_unused Client &client,
} }
CommandResult CommandResult
handle_playlistadd(Client &client, Request args, gcc_unused Response &r) handle_playlistadd(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
const char *const playlist = args[0]; const char *const playlist = args[0];
const char *const uri = args[1]; const char *const uri = args[1];
@ -209,7 +209,7 @@ handle_playlistadd(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_listplaylists(gcc_unused Client &client, gcc_unused Request args, handle_listplaylists([[maybe_unused]] Client &client, [[maybe_unused]] Request args,
Response &r) Response &r)
{ {
print_spl_list(r, ListPlaylistFiles()); print_spl_list(r, ListPlaylistFiles());

@ -51,7 +51,7 @@ AddUri(Client &client, const LocatedUri &uri)
static CommandResult static CommandResult
AddDatabaseSelection(Client &client, const char *uri, AddDatabaseSelection(Client &client, const char *uri,
gcc_unused Response &r) [[maybe_unused]] Response &r)
{ {
#ifdef ENABLE_DATABASE #ifdef ENABLE_DATABASE
auto &partition = client.GetPartition(); auto &partition = client.GetPartition();
@ -179,7 +179,7 @@ handle_rangeid(Client &client, Request args, Response &r)
} }
CommandResult CommandResult
handle_delete(Client &client, Request args, gcc_unused Response &r) handle_delete(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
RangeArg range = args.ParseRange(0); RangeArg range = args.ParseRange(0);
client.GetPartition().DeleteRange(range.start, range.end); client.GetPartition().DeleteRange(range.start, range.end);
@ -187,7 +187,7 @@ handle_delete(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_deleteid(Client &client, Request args, gcc_unused Response &r) handle_deleteid(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
unsigned id = args.ParseUnsigned(0); unsigned id = args.ParseUnsigned(0);
client.GetPartition().DeleteId(id); client.GetPartition().DeleteId(id);
@ -195,14 +195,14 @@ handle_deleteid(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_playlist(Client &client, gcc_unused Request args, Response &r) handle_playlist(Client &client, [[maybe_unused]] Request args, Response &r)
{ {
playlist_print_uris(r, client.GetPlaylist()); playlist_print_uris(r, client.GetPlaylist());
return CommandResult::OK; return CommandResult::OK;
} }
CommandResult CommandResult
handle_shuffle(gcc_unused Client &client, Request args, gcc_unused Response &r) handle_shuffle([[maybe_unused]] Client &client, Request args, [[maybe_unused]] Response &r)
{ {
RangeArg range = args.ParseOptional(0, RangeArg::All()); RangeArg range = args.ParseOptional(0, RangeArg::All());
client.GetPartition().Shuffle(range.start, range.end); client.GetPartition().Shuffle(range.start, range.end);
@ -210,7 +210,7 @@ handle_shuffle(gcc_unused Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_clear(Client &client, gcc_unused Request args, gcc_unused Response &r) handle_clear(Client &client, [[maybe_unused]] Request args, [[maybe_unused]] Response &r)
{ {
client.GetPartition().ClearQueue(); client.GetPartition().ClearQueue();
return CommandResult::OK; return CommandResult::OK;
@ -291,7 +291,7 @@ handle_playlistsearch(Client &client, Request args, Response &r)
} }
CommandResult CommandResult
handle_prio(Client &client, Request args, gcc_unused Response &r) handle_prio(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
unsigned priority = args.ParseUnsigned(0, 0xff); unsigned priority = args.ParseUnsigned(0, 0xff);
args.shift(); args.shift();
@ -307,7 +307,7 @@ handle_prio(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_prioid(Client &client, Request args, gcc_unused Response &r) handle_prioid(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
unsigned priority = args.ParseUnsigned(0, 0xff); unsigned priority = args.ParseUnsigned(0, 0xff);
args.shift(); args.shift();
@ -323,7 +323,7 @@ handle_prioid(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_move(Client &client, Request args, gcc_unused Response &r) handle_move(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
RangeArg range = args.ParseRange(0); RangeArg range = args.ParseRange(0);
int to = args.ParseInt(1); int to = args.ParseInt(1);
@ -332,7 +332,7 @@ handle_move(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_moveid(Client &client, Request args, gcc_unused Response &r) handle_moveid(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
unsigned id = args.ParseUnsigned(0); unsigned id = args.ParseUnsigned(0);
int to = args.ParseInt(1); int to = args.ParseInt(1);
@ -341,7 +341,7 @@ handle_moveid(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_swap(Client &client, Request args, gcc_unused Response &r) handle_swap(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
unsigned song1 = args.ParseUnsigned(0); unsigned song1 = args.ParseUnsigned(0);
unsigned song2 = args.ParseUnsigned(1); unsigned song2 = args.ParseUnsigned(1);
@ -350,7 +350,7 @@ handle_swap(Client &client, Request args, gcc_unused Response &r)
} }
CommandResult CommandResult
handle_swapid(Client &client, Request args, gcc_unused Response &r) handle_swapid(Client &client, Request args, [[maybe_unused]] Response &r)
{ {
unsigned id1 = args.ParseUnsigned(0); unsigned id1 = args.ParseUnsigned(0);
unsigned id2 = args.ParseUnsigned(1); unsigned id2 = args.ParseUnsigned(1);

@ -143,7 +143,7 @@ print_storage_uri(Client &client, Response &r, const Storage &storage)
} }
CommandResult CommandResult
handle_listmounts(Client &client, gcc_unused Request args, Response &r) handle_listmounts(Client &client, [[maybe_unused]] Request args, Response &r)
{ {
Storage *_composite = client.GetInstance().storage; Storage *_composite = client.GetInstance().storage;
if (_composite == nullptr) { if (_composite == nullptr) {

@ -126,8 +126,8 @@ public:
* *
* @return the job id or 0 if not implemented * @return the job id or 0 if not implemented
*/ */
virtual unsigned Update(gcc_unused const char *uri_utf8, virtual unsigned Update([[maybe_unused]] const char *uri_utf8,
gcc_unused bool discard) { [[maybe_unused]] bool discard) {
/* not implemented: return 0 */ /* not implemented: return 0 */
return 0; return 0;
} }

@ -277,6 +277,7 @@ Convert(TagType tag_type) noexcept
return MPD_TAG_COUNT; return MPD_TAG_COUNT;
} }
[[noreturn]]
static void static void
ThrowError(struct mpd_connection *connection) ThrowError(struct mpd_connection *connection)
{ {
@ -574,7 +575,7 @@ ProxyDatabase::Disconnect() noexcept
} }
bool bool
ProxyDatabase::OnSocketReady(gcc_unused unsigned flags) noexcept ProxyDatabase::OnSocketReady([[maybe_unused]] unsigned flags) noexcept
{ {
assert(connection != nullptr); assert(connection != nullptr);

@ -70,7 +70,7 @@ inline SimpleDatabase::SimpleDatabase(const ConfigBlock &block)
inline SimpleDatabase::SimpleDatabase(AllocatedPath &&_path, inline SimpleDatabase::SimpleDatabase(AllocatedPath &&_path,
#ifndef ENABLE_ZLIB #ifndef ENABLE_ZLIB
gcc_unused [[maybe_unused]]
#endif #endif
bool _compress) noexcept bool _compress) noexcept
:Database(simple_db_plugin), :Database(simple_db_plugin),
@ -85,7 +85,7 @@ inline SimpleDatabase::SimpleDatabase(AllocatedPath &&_path,
DatabasePtr DatabasePtr
SimpleDatabase::Create(EventLoop &, EventLoop &, SimpleDatabase::Create(EventLoop &, EventLoop &,
gcc_unused DatabaseListener &listener, [[maybe_unused]] DatabaseListener &listener,
const ConfigBlock &block) const ConfigBlock &block)
{ {
return std::make_unique<SimpleDatabase>(block); return std::make_unique<SimpleDatabase>(block);
@ -248,7 +248,7 @@ SimpleDatabase::GetSong(const char *uri) const
} }
void void
SimpleDatabase::ReturnSong(gcc_unused const LightSong *song) const noexcept SimpleDatabase::ReturnSong([[maybe_unused]] const LightSong *song) const noexcept
{ {
assert(song != nullptr); assert(song != nullptr);
assert(song == prefixed_light_song || song == &light_song.Get()); assert(song == prefixed_light_song || song == &light_song.Get());

@ -145,7 +145,7 @@ private:
DatabasePtr DatabasePtr
UpnpDatabase::Create(EventLoop &, EventLoop &io_event_loop, UpnpDatabase::Create(EventLoop &, EventLoop &io_event_loop,
gcc_unused DatabaseListener &listener, [[maybe_unused]] DatabaseListener &listener,
const ConfigBlock &) noexcept const ConfigBlock &) noexcept
{ {
return std::make_unique<UpnpDatabase>(io_event_loop); return std::make_unique<UpnpDatabase>(io_event_loop);

@ -31,7 +31,7 @@
#include <sys/inotify.h> #include <sys/inotify.h>
bool bool
InotifySource::OnSocketReady(gcc_unused unsigned flags) noexcept InotifySource::OnSocketReady([[maybe_unused]] unsigned flags) noexcept
{ {
uint8_t buffer[4096]; uint8_t buffer[4096];
static_assert(sizeof(buffer) >= sizeof(struct inotify_event) + NAME_MAX + 1, static_assert(sizeof(buffer) >= sizeof(struct inotify_event) + NAME_MAX + 1,

@ -236,7 +236,7 @@ WatchDirectory::GetDepth() const noexcept
static void static void
mpd_inotify_callback(int wd, unsigned mask, mpd_inotify_callback(int wd, unsigned mask,
gcc_unused const char *name, gcc_unused void *ctx) [[maybe_unused]] const char *name, [[maybe_unused]] void *ctx)
{ {
WatchDirectory *directory; WatchDirectory *directory;

@ -111,10 +111,10 @@ private:
#else #else
bool UpdateArchiveFile(gcc_unused Directory &directory, bool UpdateArchiveFile([[maybe_unused]] Directory &directory,
gcc_unused const char *name, [[maybe_unused]] const char *name,
gcc_unused const char *suffix, [[maybe_unused]] const char *suffix,
gcc_unused const StorageFileInfo &info) noexcept { [[maybe_unused]] const StorageFileInfo &info) noexcept {
return false; return false;
} }
#endif #endif

@ -53,7 +53,7 @@ static void flacPrintErroredState(FLAC__StreamDecoderState state)
LogError(flac_domain, FLAC__StreamDecoderStateString[state]); LogError(flac_domain, FLAC__StreamDecoderStateString[state]);
} }
static void flacMetadata(gcc_unused const FLAC__StreamDecoder * dec, static void flacMetadata([[maybe_unused]] const FLAC__StreamDecoder * dec,
const FLAC__StreamMetadata * block, void *vdata) const FLAC__StreamMetadata * block, void *vdata)
{ {
auto &fd = *(FlacDecoder *)vdata; auto &fd = *(FlacDecoder *)vdata;
@ -307,7 +307,7 @@ flac_decode(DecoderClient &client, InputStream &input_stream)
} }
static bool static bool
oggflac_init(gcc_unused const ConfigBlock &block) oggflac_init([[maybe_unused]] const ConfigBlock &block)
{ {
return !!FLAC_API_SUPPORTS_OGG_FLAC; return !!FLAC_API_SUPPORTS_OGG_FLAC;
} }

@ -98,7 +98,7 @@ FlacInput::Error(FLAC__StreamDecoderErrorStatus status)
} }
FLAC__StreamDecoderReadStatus FLAC__StreamDecoderReadStatus
FlacInput::Read(gcc_unused const FLAC__StreamDecoder *flac_decoder, FlacInput::Read([[maybe_unused]] const FLAC__StreamDecoder *flac_decoder,
FLAC__byte buffer[], size_t *bytes, FLAC__byte buffer[], size_t *bytes,
void *client_data) void *client_data)
{ {
@ -108,7 +108,7 @@ FlacInput::Read(gcc_unused const FLAC__StreamDecoder *flac_decoder,
} }
FLAC__StreamDecoderSeekStatus FLAC__StreamDecoderSeekStatus
FlacInput::Seek(gcc_unused const FLAC__StreamDecoder *flac_decoder, FlacInput::Seek([[maybe_unused]] const FLAC__StreamDecoder *flac_decoder,
FLAC__uint64 absolute_byte_offset, void *client_data) FLAC__uint64 absolute_byte_offset, void *client_data)
{ {
auto *i = (FlacInput *)client_data; auto *i = (FlacInput *)client_data;
@ -117,7 +117,7 @@ FlacInput::Seek(gcc_unused const FLAC__StreamDecoder *flac_decoder,
} }
FLAC__StreamDecoderTellStatus FLAC__StreamDecoderTellStatus
FlacInput::Tell(gcc_unused const FLAC__StreamDecoder *flac_decoder, FlacInput::Tell([[maybe_unused]] const FLAC__StreamDecoder *flac_decoder,
FLAC__uint64 *absolute_byte_offset, void *client_data) FLAC__uint64 *absolute_byte_offset, void *client_data)
{ {
auto *i = (FlacInput *)client_data; auto *i = (FlacInput *)client_data;
@ -126,7 +126,7 @@ FlacInput::Tell(gcc_unused const FLAC__StreamDecoder *flac_decoder,
} }
FLAC__StreamDecoderLengthStatus FLAC__StreamDecoderLengthStatus
FlacInput::Length(gcc_unused const FLAC__StreamDecoder *flac_decoder, FlacInput::Length([[maybe_unused]] const FLAC__StreamDecoder *flac_decoder,
FLAC__uint64 *stream_length, void *client_data) FLAC__uint64 *stream_length, void *client_data)
{ {
auto *i = (FlacInput *)client_data; auto *i = (FlacInput *)client_data;
@ -135,7 +135,7 @@ FlacInput::Length(gcc_unused const FLAC__StreamDecoder *flac_decoder,
} }
FLAC__bool FLAC__bool
FlacInput::Eof(gcc_unused const FLAC__StreamDecoder *flac_decoder, FlacInput::Eof([[maybe_unused]] const FLAC__StreamDecoder *flac_decoder,
void *client_data) void *client_data)
{ {
auto *i = (FlacInput *)client_data; auto *i = (FlacInput *)client_data;
@ -144,7 +144,7 @@ FlacInput::Eof(gcc_unused const FLAC__StreamDecoder *flac_decoder,
} }
void void
FlacInput::Error(gcc_unused const FLAC__StreamDecoder *decoder, FlacInput::Error([[maybe_unused]] const FLAC__StreamDecoder *decoder,
FLAC__StreamDecoderErrorStatus status, void *client_data) FLAC__StreamDecoderErrorStatus status, void *client_data)
{ {
auto *i = (FlacInput *)client_data; auto *i = (FlacInput *)client_data;

@ -196,7 +196,7 @@ fluidsynth_file_decode(DecoderClient &client, Path path_fs)
static bool static bool
fluidsynth_scan_file(Path path_fs, fluidsynth_scan_file(Path path_fs,
gcc_unused TagHandler &handler) noexcept [[maybe_unused]] TagHandler &handler) noexcept
{ {
return fluid_is_midifile(path_fs.c_str()); return fluid_is_midifile(path_fs.c_str());
} }

@ -62,7 +62,7 @@ static int gme_accuracy;
#endif #endif
static bool static bool
gme_plugin_init(gcc_unused const ConfigBlock &block) gme_plugin_init([[maybe_unused]] const ConfigBlock &block)
{ {
#if GME_VERSION >= 0x000600 #if GME_VERSION >= 0x000600
auto accuracy = block.GetBlockParam("accuracy"); auto accuracy = block.GetBlockParam("accuracy");

@ -37,7 +37,7 @@
static constexpr Domain mpg123_domain("mpg123"); static constexpr Domain mpg123_domain("mpg123");
static bool static bool
mpd_mpg123_init(gcc_unused const ConfigBlock &block) mpd_mpg123_init([[maybe_unused]] const ConfigBlock &block)
{ {
mpg123_init(); mpg123_init();

@ -64,7 +64,7 @@ IsOpusTags(const ogg_packet &packet) noexcept
} }
bool bool
mpd_opus_init(gcc_unused const ConfigBlock &block) mpd_opus_init([[maybe_unused]] const ConfigBlock &block)
{ {
LogDebug(opus_domain, opus_get_version_string()); LogDebug(opus_domain, opus_get_version_string());

@ -34,7 +34,7 @@
static constexpr Domain sndfile_domain("sndfile"); static constexpr Domain sndfile_domain("sndfile");
static bool static bool
sndfile_init(gcc_unused const ConfigBlock &block) sndfile_init([[maybe_unused]] const ConfigBlock &block)
{ {
LogDebug(sndfile_domain, sf_version_string()); LogDebug(sndfile_domain, sf_version_string());
return true; return true;
@ -109,9 +109,9 @@ sndfile_vio_read(void *ptr, sf_count_t count, void *user_data)
} }
static sf_count_t static sf_count_t
sndfile_vio_write(gcc_unused const void *ptr, sndfile_vio_write([[maybe_unused]] const void *ptr,
gcc_unused sf_count_t count, [[maybe_unused]] sf_count_t count,
gcc_unused void *user_data) [[maybe_unused]] void *user_data)
{ {
/* no writing! */ /* no writing! */
return -1; return -1;

@ -311,7 +311,7 @@ VorbisDecoder::OnOggEnd()
/* public */ /* public */
static bool static bool
vorbis_init(gcc_unused const ConfigBlock &block) vorbis_init([[maybe_unused]] const ConfigBlock &block)
{ {
#ifndef HAVE_TREMOR #ifndef HAVE_TREMOR
LogDebug(vorbis_domain, vorbis_version_string()); LogDebug(vorbis_domain, vorbis_version_string());

@ -143,7 +143,7 @@ format_samples_int(void *buffer, uint32_t count)
* No conversion necessary. * No conversion necessary.
*/ */
static void static void
format_samples_nop(gcc_unused void *buffer, gcc_unused uint32_t count) format_samples_nop([[maybe_unused]] void *buffer, [[maybe_unused]] uint32_t count)
{ {
/* do nothing */ /* do nothing */
} }

@ -84,7 +84,7 @@ public:
* *
* @param tag the tag object * @param tag the tag object
*/ */
virtual void SendTag(gcc_unused const Tag &tag) { virtual void SendTag([[maybe_unused]] const Tag &tag) {
} }
/** /**

@ -69,8 +69,8 @@ private:
static FLAC__StreamEncoderWriteStatus WriteCallback(const FLAC__StreamEncoder *, static FLAC__StreamEncoderWriteStatus WriteCallback(const FLAC__StreamEncoder *,
const FLAC__byte data[], const FLAC__byte data[],
size_t bytes, size_t bytes,
gcc_unused unsigned samples, [[maybe_unused]] unsigned samples,
gcc_unused unsigned current_frame, [[maybe_unused]] unsigned current_frame,
void *client_data) noexcept { void *client_data) noexcept {
auto &encoder = *(FlacEncoder *)client_data; auto &encoder = *(FlacEncoder *)client_data;
encoder.output_buffer.Append((const uint8_t *)data, bytes); encoder.output_buffer.Append((const uint8_t *)data, bytes);

@ -49,7 +49,7 @@ public:
}; };
static PreparedEncoder * static PreparedEncoder *
null_encoder_init(gcc_unused const ConfigBlock &block) null_encoder_init([[maybe_unused]] const ConfigBlock &block)
{ {
return new PreparedNullEncoder(); return new PreparedNullEncoder();
} }

@ -98,7 +98,7 @@ fill_wave_header(WaveHeader *header, int channels, int bits,
} }
static PreparedEncoder * static PreparedEncoder *
wave_encoder_init(gcc_unused const ConfigBlock &block) wave_encoder_init([[maybe_unused]] const ConfigBlock &block)
{ {
return new PreparedWaveEncoder(); return new PreparedWaveEncoder();
} }

@ -271,7 +271,7 @@ EventLoop::HandleDeferred() noexcept
} }
bool bool
EventLoop::OnSocketReady(gcc_unused unsigned flags) noexcept EventLoop::OnSocketReady([[maybe_unused]] unsigned flags) noexcept
{ {
assert(IsInside()); assert(IsInside());

@ -89,7 +89,7 @@ public:
return epoll.Remove(fd); return epoll.Remove(fd);
} }
bool Abandon(gcc_unused int fd) noexcept { bool Abandon([[maybe_unused]] int fd) noexcept {
// Nothing to do in this implementation. // Nothing to do in this implementation.
// Closed descriptors are automatically unregistered. // Closed descriptors are automatically unregistered.
return true; return true;

@ -161,7 +161,7 @@ ServerSocket::OneServerSocket::Accept() noexcept
} }
bool bool
ServerSocket::OneServerSocket::OnSocketReady(gcc_unused unsigned flags) noexcept ServerSocket::OneServerSocket::OnSocketReady([[maybe_unused]] unsigned flags) noexcept
{ {
Accept(); Accept();
return true; return true;

@ -43,7 +43,7 @@ public:
observer.proxy = nullptr; observer.proxy = nullptr;
} }
void Clear(gcc_unused Proxy *_child) noexcept { void Clear([[maybe_unused]] Proxy *_child) noexcept {
assert(child == _child); assert(child == _child);
child = nullptr; child = nullptr;
} }

@ -53,7 +53,7 @@ public:
}; };
static std::unique_ptr<PreparedFilter> static std::unique_ptr<PreparedFilter>
normalize_filter_init(gcc_unused const ConfigBlock &block) normalize_filter_init([[maybe_unused]] const ConfigBlock &block)
{ {
return std::make_unique<PreparedNormalizeFilter>(); return std::make_unique<PreparedNormalizeFilter>();
} }

@ -38,7 +38,7 @@ public:
}; };
static std::unique_ptr<PreparedFilter> static std::unique_ptr<PreparedFilter>
null_filter_init(gcc_unused const ConfigBlock &block) null_filter_init([[maybe_unused]] const ConfigBlock &block)
{ {
return std::make_unique<PreparedNullFilter>(); return std::make_unique<PreparedNullFilter>();
} }

@ -81,7 +81,7 @@ FileOutputStream::Open()
#ifdef _WIN32 #ifdef _WIN32
inline void inline void
FileOutputStream::OpenCreate(gcc_unused bool visible) FileOutputStream::OpenCreate([[maybe_unused]] bool visible)
{ {
handle = CreateFile(path.c_str(), GENERIC_WRITE, 0, nullptr, handle = CreateFile(path.c_str(), GENERIC_WRITE, 0, nullptr,
CREATE_ALWAYS, CREATE_ALWAYS,

@ -58,7 +58,7 @@ public:
*/ */
IcyInputStream(InputStreamPtr _input, IcyInputStream(InputStreamPtr _input,
std::shared_ptr<IcyMetaDataParser> _parser); std::shared_ptr<IcyMetaDataParser> _parser);
virtual ~IcyInputStream() noexcept; ~IcyInputStream() noexcept override;
IcyInputStream(const IcyInputStream &) = delete; IcyInputStream(const IcyInputStream &) = delete;
IcyInputStream &operator=(const IcyInputStream &) = delete; IcyInputStream &operator=(const IcyInputStream &) = delete;

@ -69,7 +69,7 @@ InputStream::CheapSeeking() const noexcept
} }
void void
InputStream::Seek(std::unique_lock<Mutex> &, gcc_unused offset_type new_offset) InputStream::Seek(std::unique_lock<Mutex> &, [[maybe_unused]] offset_type new_offset)
{ {
throw std::runtime_error("Seeking is not implemented"); throw std::runtime_error("Seeking is not implemented");
} }

@ -52,7 +52,7 @@ public:
Mutex &_mutex) noexcept Mutex &_mutex) noexcept
:InputStream(_uri, _mutex) {} :InputStream(_uri, _mutex) {}
virtual ~ProxyInputStream() noexcept; ~ProxyInputStream() noexcept override;
ProxyInputStream(const ProxyInputStream &) = delete; ProxyInputStream(const ProxyInputStream &) = delete;
ProxyInputStream &operator=(const ProxyInputStream &) = delete; ProxyInputStream &operator=(const ProxyInputStream &) = delete;

@ -110,7 +110,7 @@ protected:
InvalidateSockets(); InvalidateSockets();
} }
void DoSeek(gcc_unused offset_type new_offset) override { void DoSeek([[maybe_unused]] offset_type new_offset) override {
/* unreachable because seekable==false */ /* unreachable because seekable==false */
SeekDone(); SeekDone();
} }
@ -289,7 +289,7 @@ AlsaInputStream::Recover(int err)
if (err == -EAGAIN) if (err == -EAGAIN)
return 0; return 0;
/* fall-through to snd_pcm_prepare: */ /* fall-through to snd_pcm_prepare: */
#if GCC_CHECK_VERSION(7,0) #if CLANG_OR_GCC_VERSION(7,0)
[[fallthrough]]; [[fallthrough]];
#endif #endif
case SND_PCM_STATE_OPEN: case SND_PCM_STATE_OPEN:

@ -108,7 +108,7 @@ CurlGlobal::CurlGlobal(EventLoop &_loop)
} }
int int
CurlSocket::SocketFunction(gcc_unused CURL *easy, CurlSocket::SocketFunction([[maybe_unused]] CURL *easy,
curl_socket_t s, int action, curl_socket_t s, int action,
void *userp, void *socketp) noexcept void *userp, void *socketp) noexcept
{ {
@ -230,7 +230,7 @@ CurlGlobal::UpdateTimeout(long timeout_ms) noexcept
} }
int int
CurlGlobal::TimerFunction(gcc_unused CURLM *_multi, long timeout_ms, CurlGlobal::TimerFunction([[maybe_unused]] CURLM *_multi, long timeout_ms,
void *userp) noexcept void *userp) noexcept
{ {
auto &global = *(CurlGlobal *)userp; auto &global = *(CurlGlobal *)userp;

@ -80,7 +80,7 @@ public:
throw std::runtime_error("dbus_message_iter_append_fixed_array() failed"); throw std::runtime_error("dbus_message_iter_append_fixed_array() failed");
return *this; return *this;
}; }
AppendMessageIter &AppendFixedArray(ConstBuffer<uint32_t> value) { AppendMessageIter &AppendFixedArray(ConstBuffer<uint32_t> value) {
return AppendFixedArray(DBUS_TYPE_UINT32, return AppendFixedArray(DBUS_TYPE_UINT32,

@ -71,7 +71,7 @@ public:
return error.message; return error.message;
} }
gcc_noreturn [[noreturn]]
void Throw(const char *prefix) const; void Throw(const char *prefix) const;
void CheckThrow(const char *prefix) const; void CheckThrow(const char *prefix) const;
}; };

@ -47,7 +47,7 @@ FfmpegImportLogLevel(int level) noexcept
} }
void void
FfmpegLogCallback(gcc_unused void *ptr, int level, const char *fmt, std::va_list vl) FfmpegLogCallback(void *ptr, int level, const char *fmt, std::va_list vl)
{ {
const AVClass * cls = nullptr; const AVClass * cls = nullptr;

@ -172,7 +172,7 @@ NfsConnection::CancellableCallback::Callback(int err, void *data) noexcept
void void
NfsConnection::CancellableCallback::Callback(int err, NfsConnection::CancellableCallback::Callback(int err,
gcc_unused struct nfs_context *nfs, [[maybe_unused]] struct nfs_context *nfs,
void *data, void *data,
void *private_data) noexcept void *private_data) noexcept
{ {
@ -551,8 +551,8 @@ NfsConnection::OnSocketReady(unsigned flags) noexcept
} }
inline void inline void
NfsConnection::MountCallback(int status, gcc_unused nfs_context *nfs, NfsConnection::MountCallback(int status, [[maybe_unused]] nfs_context *nfs,
gcc_unused void *data) noexcept [[maybe_unused]] void *data) noexcept
{ {
assert(GetEventLoop().IsInside()); assert(GetEventLoop().IsInside());
assert(context == nfs); assert(context == nfs);

@ -27,11 +27,11 @@
#include <string.h> #include <string.h>
static void static void
mpd_smbc_get_auth_data(gcc_unused const char *srv, mpd_smbc_get_auth_data([[maybe_unused]] const char *srv,
gcc_unused const char *shr, [[maybe_unused]] const char *shr,
char *wg, gcc_unused int wglen, char *wg, [[maybe_unused]] int wglen,
char *un, gcc_unused int unlen, char *un, [[maybe_unused]] int unlen,
char *pw, gcc_unused int pwlen) char *pw, [[maybe_unused]] int pwlen)
{ {
// TODO: implement // TODO: implement
strcpy(wg, "WORKGROUP"); strcpy(wg, "WORKGROUP");

@ -54,7 +54,7 @@ Bind(sqlite3_stmt *stmt, unsigned i, const char *value)
template<typename... Args> template<typename... Args>
static void static void
BindAll2(gcc_unused sqlite3_stmt *stmt, gcc_unused unsigned i) BindAll2([[maybe_unused]] sqlite3_stmt *stmt, [[maybe_unused]] unsigned i)
{ {
assert(int(i - 1) == sqlite3_bind_parameter_count(stmt)); assert(int(i - 1) == sqlite3_bind_parameter_count(stmt));
} }

@ -32,7 +32,7 @@ CountNameValuePairs() noexcept
template<typename... Args> template<typename... Args>
static constexpr unsigned static constexpr unsigned
CountNameValuePairs(gcc_unused const char *name, gcc_unused const char *value, CountNameValuePairs([[maybe_unused]] const char *name, [[maybe_unused]] const char *value,
Args... args) noexcept Args... args) noexcept
{ {
return 1 + CountNameValuePairs(args...); return 1 + CountNameValuePairs(args...);

@ -119,7 +119,7 @@ FlacIOEof(FLAC__IOHandle handle)
} }
static int static int
FlacIOClose(gcc_unused FLAC__IOHandle handle) FlacIOClose([[maybe_unused]] FLAC__IOHandle handle)
{ {
/* no-op because the libFLAC caller is responsible for closing /* no-op because the libFLAC caller is responsible for closing
the #InputStream */ the #InputStream */

@ -173,7 +173,7 @@ AlsaMixer::Configure(const ConfigBlock &block)
} }
static Mixer * static Mixer *
alsa_mixer_init(EventLoop &event_loop, gcc_unused AudioOutput &ao, alsa_mixer_init(EventLoop &event_loop, [[maybe_unused]] AudioOutput &ao,
MixerListener &listener, MixerListener &listener,
const ConfigBlock &block) const ConfigBlock &block)
{ {

@ -47,9 +47,9 @@ public:
}; };
static Mixer * static Mixer *
haiku_mixer_init(gcc_unused EventLoop &event_loop, AudioOutput &ao, haiku_mixer_init([[maybe_unused]] EventLoop &event_loop, AudioOutput &ao,
MixerListener &listener, MixerListener &listener,
gcc_unused const ConfigBlock &block) [[maybe_unused]] const ConfigBlock &block)
{ {
return new HaikuMixer((HaikuOutput &)ao, listener); return new HaikuMixer((HaikuOutput &)ao, listener);
} }

@ -49,10 +49,10 @@ public:
}; };
static Mixer * static Mixer *
null_mixer_init(gcc_unused EventLoop &event_loop, null_mixer_init([[maybe_unused]] EventLoop &event_loop,
gcc_unused AudioOutput &ao, [[maybe_unused]] AudioOutput &ao,
MixerListener &listener, MixerListener &listener,
gcc_unused const ConfigBlock &block) [[maybe_unused]] const ConfigBlock &block)
{ {
return new NullMixer(listener); return new NullMixer(listener);
} }

@ -54,9 +54,9 @@ OSXMixer::SetVolume(unsigned new_volume)
} }
static Mixer * static Mixer *
osx_mixer_init(gcc_unused EventLoop &event_loop, AudioOutput &ao, osx_mixer_init([[maybe_unused]] EventLoop &event_loop, AudioOutput &ao,
MixerListener &listener, MixerListener &listener,
gcc_unused const ConfigBlock &block) [[maybe_unused]] const ConfigBlock &block)
{ {
OSXOutput &osxo = (OSXOutput &)ao; OSXOutput &osxo = (OSXOutput &)ao;
return new OSXMixer(osxo, listener); return new OSXMixer(osxo, listener);

@ -97,8 +97,8 @@ OssMixer::Configure(const ConfigBlock &block)
} }
static Mixer * static Mixer *
oss_mixer_init(gcc_unused EventLoop &event_loop, oss_mixer_init([[maybe_unused]] EventLoop &event_loop,
gcc_unused AudioOutput &ao, [[maybe_unused]] AudioOutput &ao,
MixerListener &listener, MixerListener &listener,
const ConfigBlock &block) const ConfigBlock &block)
{ {

@ -104,7 +104,7 @@ PulseMixer::VolumeCallback(const pa_sink_input_info *i, int eol)
* value. * value.
*/ */
static void static void
pulse_mixer_volume_cb(gcc_unused pa_context *context, const pa_sink_input_info *i, pulse_mixer_volume_cb([[maybe_unused]] pa_context *context, const pa_sink_input_info *i,
int eol, void *userdata) int eol, void *userdata)
{ {
auto *pm = (PulseMixer *)userdata; auto *pm = (PulseMixer *)userdata;
@ -133,7 +133,7 @@ PulseMixer::Update(pa_context *context, pa_stream *stream)
} }
void void
pulse_mixer_on_connect(gcc_unused PulseMixer &pm, pulse_mixer_on_connect([[maybe_unused]] PulseMixer &pm,
struct pa_context *context) struct pa_context *context)
{ {
pa_operation *o; pa_operation *o;
@ -182,7 +182,7 @@ parse_volume_scale_factor(const char *value) {
} }
static Mixer * static Mixer *
pulse_mixer_init(gcc_unused EventLoop &event_loop, AudioOutput &ao, pulse_mixer_init([[maybe_unused]] EventLoop &event_loop, AudioOutput &ao,
MixerListener &listener, MixerListener &listener,
const ConfigBlock &block) const ConfigBlock &block)
{ {

@ -45,10 +45,10 @@ public:
}; };
static Mixer * static Mixer *
sndio_mixer_init(gcc_unused EventLoop &event_loop, sndio_mixer_init([[maybe_unused]] EventLoop &event_loop,
AudioOutput &ao, AudioOutput &ao,
MixerListener &listener, MixerListener &listener,
gcc_unused const ConfigBlock &block) [[maybe_unused]] const ConfigBlock &block)
{ {
return new SndioMixer((SndioOutput &)ao, listener); return new SndioMixer((SndioOutput &)ao, listener);
} }

@ -57,10 +57,10 @@ public:
}; };
static Mixer * static Mixer *
software_mixer_init(gcc_unused EventLoop &event_loop, software_mixer_init([[maybe_unused]] EventLoop &event_loop,
gcc_unused AudioOutput &ao, [[maybe_unused]] AudioOutput &ao,
MixerListener &listener, MixerListener &listener,
gcc_unused const ConfigBlock &block) [[maybe_unused]] const ConfigBlock &block)
{ {
return new SoftwareMixer(listener); return new SoftwareMixer(listener);
} }

@ -63,9 +63,9 @@ winmm_volume_encode(int volume)
} }
static Mixer * static Mixer *
winmm_mixer_init(gcc_unused EventLoop &event_loop, AudioOutput &ao, winmm_mixer_init([[maybe_unused]] EventLoop &event_loop, AudioOutput &ao,
MixerListener &listener, MixerListener &listener,
gcc_unused const ConfigBlock &block) [[maybe_unused]] const ConfigBlock &block)
{ {
return new WinmmMixer((WinmmOutput &)ao, listener); return new WinmmMixer((WinmmOutput &)ao, listener);
} }

@ -252,9 +252,9 @@ SmbclientNeighborExplorer::ThreadFunc() noexcept
} }
static std::unique_ptr<NeighborExplorer> static std::unique_ptr<NeighborExplorer>
smbclient_neighbor_create(gcc_unused EventLoop &loop, smbclient_neighbor_create([[maybe_unused]] EventLoop &loop,
NeighborListener &listener, NeighborListener &listener,
gcc_unused const ConfigBlock &block) [[maybe_unused]] const ConfigBlock &block)
{ {
SmbclientInit(); SmbclientInit();

@ -259,7 +259,7 @@ UdisksNeighborExplorer::HandleMessage(DBusConnection *connection,
static std::unique_ptr<NeighborExplorer> static std::unique_ptr<NeighborExplorer>
udisks_neighbor_create(EventLoop &event_loop, udisks_neighbor_create(EventLoop &event_loop,
NeighborListener &listener, NeighborListener &listener,
gcc_unused const ConfigBlock &block) [[maybe_unused]] const ConfigBlock &block)
{ {
return std::make_unique<UdisksNeighborExplorer>(event_loop, listener); return std::make_unique<UdisksNeighborExplorer>(event_loop, listener);
} }

@ -127,7 +127,7 @@ UpnpNeighborExplorer::LostUPnP(const ContentDirectoryService &service)
static std::unique_ptr<NeighborExplorer> static std::unique_ptr<NeighborExplorer>
upnp_neighbor_create(EventLoop &event_loop, upnp_neighbor_create(EventLoop &event_loop,
NeighborListener &listener, NeighborListener &listener,
gcc_unused const ConfigBlock &block) [[maybe_unused]] const ConfigBlock &block)
{ {
return std::make_unique<UpnpNeighborExplorer>(event_loop, listener); return std::make_unique<UpnpNeighborExplorer>(event_loop, listener);
} }

@ -23,8 +23,8 @@
#include <stdexcept> #include <stdexcept>
void void
AudioOutput::SetAttribute(gcc_unused std::string &&name, AudioOutput::SetAttribute([[maybe_unused]] std::string &&name,
gcc_unused std::string &&value) [[maybe_unused]] std::string &&value)
{ {
throw std::invalid_argument("Unsupported attribute"); throw std::invalid_argument("Unsupported attribute");
} }

@ -76,7 +76,7 @@ public:
const MusicChunk *Get() noexcept; const MusicChunk *Get() noexcept;
void Consume(gcc_unused const MusicChunk &_chunk) { void Consume([[maybe_unused]] const MusicChunk &_chunk) {
assert(chunk != nullptr); assert(chunk != nullptr);
assert(chunk == &_chunk); assert(chunk == &_chunk);
@ -86,7 +86,7 @@ public:
gcc_pure gcc_pure
bool IsConsumed(const MusicChunk &_chunk) const noexcept; bool IsConsumed(const MusicChunk &_chunk) const noexcept;
void ClearTail(gcc_unused const MusicChunk &_chunk) noexcept { void ClearTail([[maybe_unused]] const MusicChunk &_chunk) noexcept {
assert(chunk == &_chunk); assert(chunk == &_chunk);
assert(consumed); assert(consumed);
chunk = nullptr; chunk = nullptr;

@ -763,7 +763,7 @@ AlsaOutput::Recover(int err) noexcept
if (err == -EAGAIN) if (err == -EAGAIN)
return 0; return 0;
/* fall-through to snd_pcm_prepare: */ /* fall-through to snd_pcm_prepare: */
#if GCC_CHECK_VERSION(7,0) #if CLANG_OR_GCC_VERSION(7,0)
[[fallthrough]]; [[fallthrough]];
#endif #endif
case SND_PCM_STATE_OPEN: case SND_PCM_STATE_OPEN:

@ -81,9 +81,9 @@ private:
std::chrono::steady_clock::duration Delay() const noexcept override; std::chrono::steady_clock::duration Delay() const noexcept override;
static void _FillBuffer(void* cookie, void* _buffer, size_t size, static void _FillBuffer(void* cookie, void* _buffer, size_t size,
gcc_unused const media_raw_audio_format& _format); [[maybe_unused]] const media_raw_audio_format& _format);
void FillBuffer(void* _buffer, size_t size, void FillBuffer(void* _buffer, size_t size,
gcc_unused const media_raw_audio_format& _format); [[maybe_unused]] const media_raw_audio_format& _format);
void SendTag(const Tag &tag) override; void SendTag(const Tag &tag) override;
}; };
@ -154,7 +154,7 @@ HaikuOutput::_FillBuffer(void* cookie, void* buffer, size_t size,
void void
HaikuOutput::FillBuffer(void* _buffer, size_t size, HaikuOutput::FillBuffer(void* _buffer, size_t size,
gcc_unused const media_raw_audio_format& _format) [[maybe_unused]] const media_raw_audio_format& _format)
{ {
buffer = (uint8*)_buffer; buffer = (uint8*)_buffer;

@ -53,7 +53,7 @@ private:
: std::chrono::steady_clock::duration::zero(); : std::chrono::steady_clock::duration::zero();
} }
size_t Play(gcc_unused const void *chunk, size_t size) override { size_t Play([[maybe_unused]] const void *chunk, size_t size) override {
if (sync) { if (sync) {
if (!timer->IsStarted()) if (!timer->IsStarted())
timer->Start(); timer->Start();

@ -710,9 +710,9 @@ osx_output_set_device(OSXOutput *oo)
*/ */
static OSStatus static OSStatus
osx_render(void *vdata, osx_render(void *vdata,
gcc_unused AudioUnitRenderActionFlags *io_action_flags, [[maybe_unused]] AudioUnitRenderActionFlags *io_action_flags,
gcc_unused const AudioTimeStamp *in_timestamp, [[maybe_unused]] const AudioTimeStamp *in_timestamp,
gcc_unused UInt32 in_bus_number, [[maybe_unused]] UInt32 in_bus_number,
UInt32 in_number_frames, UInt32 in_number_frames,
AudioBufferList *buffer_list) AudioBufferList *buffer_list)
{ {

@ -57,7 +57,7 @@ PipeOutput::PipeOutput(const ConfigBlock &block)
} }
inline void inline void
PipeOutput::Open(gcc_unused AudioFormat &audio_format) PipeOutput::Open([[maybe_unused]] AudioFormat &audio_format)
{ {
fh = popen(cmd.c_str(), "w"); fh = popen(cmd.c_str(), "w");
if (fh == nullptr) if (fh == nullptr)

@ -62,7 +62,7 @@ class PulseOutput final : AudioOutput {
public: public:
void SetMixer(PulseMixer &_mixer); void SetMixer(PulseMixer &_mixer);
void ClearMixer(gcc_unused PulseMixer &old_mixer) { void ClearMixer([[maybe_unused]] PulseMixer &old_mixer) {
assert(mixer == &old_mixer); assert(mixer == &old_mixer);
mixer = nullptr; mixer = nullptr;
@ -277,8 +277,8 @@ pulse_wait_for_operation(struct pa_threaded_mainloop *mainloop,
* the caller thread, to wake pulse_wait_for_operation() up. * the caller thread, to wake pulse_wait_for_operation() up.
*/ */
static void static void
pulse_output_stream_success_cb(gcc_unused pa_stream *s, pulse_output_stream_success_cb([[maybe_unused]] pa_stream *s,
gcc_unused int success, void *userdata) [[maybe_unused]] int success, void *userdata)
{ {
PulseOutput &po = *(PulseOutput *)userdata; PulseOutput &po = *(PulseOutput *)userdata;
@ -342,7 +342,7 @@ PulseOutput::OnServerLayoutChanged(pa_subscription_event_type_t t,
} }
static void static void
pulse_output_subscribe_cb(gcc_unused pa_context *context, pulse_output_subscribe_cb([[maybe_unused]] pa_context *context,
pa_subscription_event_type_t t, pa_subscription_event_type_t t,
uint32_t idx, void *userdata) uint32_t idx, void *userdata)
{ {
@ -508,7 +508,7 @@ PulseOutput::WaitConnection()
} }
inline void inline void
PulseOutput::OnStreamSuspended(gcc_unused pa_stream *_stream) PulseOutput::OnStreamSuspended([[maybe_unused]] pa_stream *_stream)
{ {
assert(_stream == stream || stream == nullptr); assert(_stream == stream || stream == nullptr);
assert(mainloop != nullptr); assert(mainloop != nullptr);
@ -574,7 +574,7 @@ PulseOutput::OnStreamWrite(size_t nbytes)
} }
static void static void
pulse_output_stream_write_cb(gcc_unused pa_stream *stream, size_t nbytes, pulse_output_stream_write_cb([[maybe_unused]] pa_stream *stream, size_t nbytes,
void *userdata) void *userdata)
{ {
PulseOutput &po = *(PulseOutput *)userdata; PulseOutput &po = *(PulseOutput *)userdata;

@ -121,7 +121,7 @@ HttpdOutput::OnDeferredBroadcast() noexcept
void void
HttpdOutput::OnAccept(UniqueSocketDescriptor fd, HttpdOutput::OnAccept(UniqueSocketDescriptor fd,
SocketAddress, gcc_unused int uid) noexcept SocketAddress, [[maybe_unused]] int uid) noexcept
{ {
/* the listener socket has become readable - a client has /* the listener socket has become readable - a client has
connected */ connected */

@ -111,7 +111,7 @@ private:
* been consumed. It synthesises and enqueues the next * been consumed. It synthesises and enqueues the next
* buffer. * buffer.
*/ */
static void PlayedCallback(gcc_unused SLAndroidSimpleBufferQueueItf caller, static void PlayedCallback([[maybe_unused]] SLAndroidSimpleBufferQueueItf caller,
void *pContext) void *pContext)
{ {
SlesOutput &sles = *(SlesOutput *)pContext; SlesOutput &sles = *(SlesOutput *)pContext;

@ -1176,7 +1176,9 @@ try {
} }
/* fall through */ /* fall through */
gcc_fallthrough; #if CLANG_OR_GCC_VERSION(7,0)
[[fallthrough]];
#endif
case PlayerCommand::PAUSE: case PlayerCommand::PAUSE:
next_song.reset(); next_song.reset();

@ -82,7 +82,7 @@ ExtractCuesheetTagHandler::OnPair(StringView name, StringView value) noexcept
static std::unique_ptr<SongEnumerator> static std::unique_ptr<SongEnumerator>
embcue_playlist_open_uri(const char *uri, embcue_playlist_open_uri(const char *uri,
gcc_unused Mutex &mutex) [[maybe_unused]] Mutex &mutex)
{ {
if (!PathTraitsUTF8::IsAbsolute(uri)) if (!PathTraitsUTF8::IsAbsolute(uri))
/* only local files supported */ /* only local files supported */

@ -79,7 +79,7 @@ static constexpr struct tag_table xspf_tag_elements[] = {
static void XMLCALL static void XMLCALL
xspf_start_element(void *user_data, const XML_Char *element_name, xspf_start_element(void *user_data, const XML_Char *element_name,
gcc_unused const XML_Char **atts) [[maybe_unused]] const XML_Char **atts)
{ {
auto *parser = (XspfParser *)user_data; auto *parser = (XspfParser *)user_data;
parser->value.clear(); parser->value.clear();

@ -87,7 +87,7 @@ class CompositeStorage final : public Storage {
public: public:
CompositeStorage() noexcept; CompositeStorage() noexcept;
virtual ~CompositeStorage(); ~CompositeStorage() override;
/** /**
* Get the #Storage at the specified mount point. Returns * Get the #Storage at the specified mount point. Returns

@ -36,7 +36,7 @@ MemoryStorageDirectoryReader::Read() noexcept
} }
StorageFileInfo StorageFileInfo
MemoryStorageDirectoryReader::GetInfo(gcc_unused bool follow) MemoryStorageDirectoryReader::GetInfo([[maybe_unused]] bool follow)
{ {
assert(!first); assert(!first);
assert(!entries.empty()); assert(!entries.empty());

@ -22,7 +22,7 @@
#include "fs/Traits.hxx" #include "fs/Traits.hxx"
AllocatedPath AllocatedPath
Storage::MapFS(gcc_unused const char *uri_utf8) const noexcept Storage::MapFS([[maybe_unused]] const char *uri_utf8) const noexcept
{ {
return nullptr; return nullptr;
} }

@ -315,7 +315,7 @@ private:
/* virtual methods from CommonExpatParser */ /* virtual methods from CommonExpatParser */
void StartElement(const XML_Char *name, void StartElement(const XML_Char *name,
gcc_unused const XML_Char **attrs) final { [[maybe_unused]] const XML_Char **attrs) final {
switch (state) { switch (state) {
case State::ROOT: case State::ROOT:
if (strcmp(name, "DAV:|response") == 0) if (strcmp(name, "DAV:|response") == 0)
@ -447,7 +447,7 @@ protected:
}; };
StorageFileInfo StorageFileInfo
CurlStorage::GetInfo(const char *uri_utf8, gcc_unused bool follow) CurlStorage::GetInfo(const char *uri_utf8, [[maybe_unused]] bool follow)
{ {
// TODO: escape the given URI // TODO: escape the given URI

@ -288,7 +288,7 @@ protected:
connection.Lstat(path, *this); connection.Lstat(path, *this);
} }
void HandleResult(gcc_unused unsigned status, void *data) noexcept override { void HandleResult([[maybe_unused]] unsigned status, void *data) noexcept override {
Copy(info, *(const struct nfs_stat_64 *)data); Copy(info, *(const struct nfs_stat_64 *)data);
} }
}; };
@ -356,7 +356,7 @@ protected:
connection.OpenDirectory(path, *this); connection.OpenDirectory(path, *this);
} }
void HandleResult(gcc_unused unsigned status, void HandleResult([[maybe_unused]] unsigned status,
void *data) noexcept override { void *data) noexcept override {
auto *const dir = (struct nfsdir *)data; auto *const dir = (struct nfsdir *)data;

@ -117,7 +117,7 @@ GetInfo(const char *path)
} }
StorageFileInfo StorageFileInfo
SmbclientStorage::GetInfo(const char *uri_utf8, gcc_unused bool follow) SmbclientStorage::GetInfo(const char *uri_utf8, [[maybe_unused]] bool follow)
{ {
const std::string mapped = MapUTF8(uri_utf8); const std::string mapped = MapUTF8(uri_utf8);
return ::GetInfo(mapped.c_str()); return ::GetInfo(mapped.c_str());
@ -172,14 +172,14 @@ SmbclientDirectoryReader::Read() noexcept
} }
StorageFileInfo StorageFileInfo
SmbclientDirectoryReader::GetInfo(gcc_unused bool follow) SmbclientDirectoryReader::GetInfo([[maybe_unused]] bool follow)
{ {
const std::string path = PathTraitsUTF8::Build(base.c_str(), name); const std::string path = PathTraitsUTF8::Build(base.c_str(), name);
return ::GetInfo(path.c_str()); return ::GetInfo(path.c_str());
} }
static std::unique_ptr<Storage> static std::unique_ptr<Storage>
CreateSmbclientStorageURI(gcc_unused EventLoop &event_loop, const char *base) CreateSmbclientStorageURI([[maybe_unused]] EventLoop &event_loop, const char *base)
{ {
if (!StringStartsWithCaseASCII(base, "smb://")) if (!StringStartsWithCaseASCII(base, "smb://"))
return nullptr; return nullptr;

@ -56,6 +56,6 @@ EventFD::Write() noexcept
assert(fd.IsDefined()); assert(fd.IsDefined());
static constexpr eventfd_t value = 1; static constexpr eventfd_t value = 1;
gcc_unused ssize_t nbytes = [[maybe_unused]] ssize_t nbytes =
fd.Write(&value, sizeof(value)); fd.Write(&value, sizeof(value));
} }

@ -85,7 +85,7 @@ EventPipe::Write() noexcept
#ifdef _WIN32 #ifdef _WIN32
send(fds[1], "", 1, 0); send(fds[1], "", 1, 0);
#else #else
gcc_unused ssize_t nbytes = write(fds[1], "", 1); [[maybe_unused]] ssize_t nbytes = write(fds[1], "", 1);
#endif #endif
} }

@ -36,7 +36,7 @@
static constexpr Domain fatal_error_domain("fatal_error"); static constexpr Domain fatal_error_domain("fatal_error");
gcc_noreturn [[noreturn]]
static void static void
Abort() Abort()
{ {

@ -29,11 +29,11 @@
/** /**
* Log the specified message and abort the process. * Log the specified message and abort the process.
*/ */
gcc_noreturn [[noreturn]]
void void
FatalError(const char *msg); FatalError(const char *msg);
gcc_noreturn [[noreturn]]
void void
FormatFatalError(const char *fmt, ...); FormatFatalError(const char *fmt, ...);
@ -42,19 +42,19 @@ FormatFatalError(const char *fmt, ...);
* fail. Prints the given message, the system error message (from * fail. Prints the given message, the system error message (from
* errno or GetLastError()) and abort the process. * errno or GetLastError()) and abort the process.
*/ */
gcc_noreturn [[noreturn]]
void void
FatalSystemError(const char *msg); FatalSystemError(const char *msg);
#ifdef _WIN32 #ifdef _WIN32
gcc_noreturn [[noreturn]]
void void
FatalSystemError(const char *msg, DWORD code); FatalSystemError(const char *msg, DWORD code);
#endif #endif
gcc_noreturn [[noreturn]]
void void
FormatFatalSystemError(const char *fmt, ...); FormatFatalSystemError(const char *fmt, ...);

@ -41,7 +41,7 @@ NullTagHandler::OnPicture(const char *, ConstBuffer<void>) noexcept
} }
void void
NullTagHandler::OnAudioFormat(gcc_unused AudioFormat af) noexcept NullTagHandler::OnAudioFormat([[maybe_unused]] AudioFormat af) noexcept
{ {
} }

@ -124,7 +124,7 @@ public:
explicit NullTagHandler(unsigned _want_mask) noexcept explicit NullTagHandler(unsigned _want_mask) noexcept
:TagHandler(_want_mask) {} :TagHandler(_want_mask) {}
void OnDuration(gcc_unused SongTime duration) noexcept override {} void OnDuration([[maybe_unused]] SongTime duration) noexcept override {}
void OnTag(TagType type, StringView value) noexcept override; void OnTag(TagType type, StringView value) noexcept override;
void OnPair(StringView key, StringView value) noexcept override; void OnPair(StringView key, StringView value) noexcept override;
void OnAudioFormat(AudioFormat af) noexcept override; void OnAudioFormat(AudioFormat af) noexcept override;

@ -53,7 +53,7 @@ class ScopeUnlock {
public: public:
explicit ScopeUnlock(Mutex &_mutex) noexcept:mutex(_mutex) { explicit ScopeUnlock(Mutex &_mutex) noexcept:mutex(_mutex) {
mutex.unlock(); mutex.unlock();
}; }
~ScopeUnlock() noexcept { ~ScopeUnlock() noexcept {
mutex.lock(); mutex.lock();

@ -58,7 +58,7 @@ SetThreadName(const char *name) noexcept
template<typename... Args> template<typename... Args>
static inline void static inline void
FormatThreadName(const char *fmt, gcc_unused Args&&... args) noexcept FormatThreadName(const char *fmt, [[maybe_unused]] Args&&... args) noexcept
{ {
#ifdef HAVE_THREAD_NAME #ifdef HAVE_THREAD_NAME
SetThreadName(StringFormat<16>(fmt, args...)); SetThreadName(StringFormat<16>(fmt, args...));

@ -45,10 +45,12 @@ daemonize_finish()
* pid file. * pid file.
*/ */
#ifndef _WIN32 #ifndef _WIN32
[[noreturn]]
void void
daemonize_kill(); daemonize_kill();
#else #else
#include <stdexcept> #include <stdexcept>
[[noreturn]]
static inline void static inline void
daemonize_kill() daemonize_kill()
{ {

@ -25,7 +25,7 @@
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
gcc_noreturn [[noreturn]]
static void static void
oom() oom()
{ {

@ -68,16 +68,12 @@
/* GCC 4.x */ /* GCC 4.x */
#define gcc_const __attribute__((const)) #define gcc_const __attribute__((const))
#define gcc_deprecated __attribute__((deprecated))
#define gcc_may_alias __attribute__((may_alias)) #define gcc_may_alias __attribute__((may_alias))
#define gcc_malloc __attribute__((malloc)) #define gcc_malloc __attribute__((malloc))
#define gcc_noreturn __attribute__((noreturn))
#define gcc_packed __attribute__((packed)) #define gcc_packed __attribute__((packed))
#define gcc_printf(a,b) __attribute__((format(printf, a, b))) #define gcc_printf(a,b) __attribute__((format(printf, a, b)))
#define gcc_pure __attribute__((pure)) #define gcc_pure __attribute__((pure))
#define gcc_sentinel __attribute__((sentinel)) #define gcc_sentinel __attribute__((sentinel))
#define gcc_unused __attribute__((unused))
#define gcc_warn_unused_result __attribute__((warn_unused_result))
#define gcc_nonnull(...) __attribute__((nonnull(__VA_ARGS__))) #define gcc_nonnull(...) __attribute__((nonnull(__VA_ARGS__)))
#define gcc_nonnull_all __attribute__((nonnull)) #define gcc_nonnull_all __attribute__((nonnull))
@ -98,16 +94,12 @@
/* generic C compiler */ /* generic C compiler */
#define gcc_const #define gcc_const
#define gcc_deprecated
#define gcc_may_alias #define gcc_may_alias
#define gcc_malloc #define gcc_malloc
#define gcc_noreturn
#define gcc_packed #define gcc_packed
#define gcc_printf(a,b) #define gcc_printf(a,b)
#define gcc_pure #define gcc_pure
#define gcc_sentinel #define gcc_sentinel
#define gcc_unused
#define gcc_warn_unused_result
#define gcc_nonnull(...) #define gcc_nonnull(...)
#define gcc_nonnull_all #define gcc_nonnull_all
@ -167,12 +159,6 @@
#define __has_feature(x) 0 #define __has_feature(x) 0
#endif #endif
#if __has_feature(attribute_unused_on_fields)
#define gcc_unused_field gcc_unused
#else
#define gcc_unused_field
#endif
#if defined(__GNUC__) || defined(__clang__) #if defined(__GNUC__) || defined(__clang__)
#define gcc_unreachable() __builtin_unreachable() #define gcc_unreachable() __builtin_unreachable()
#else #else

@ -42,14 +42,14 @@
* the std::exception_ptr itself. * the std::exception_ptr itself.
*/ */
template<typename T> template<typename T>
gcc_noreturn [[noreturn]]
inline void inline void
ThrowException(T &&t) ThrowException(T &&t)
{ {
throw std::forward<T>(t); throw std::forward<T>(t);
} }
gcc_noreturn [[noreturn]]
inline void inline void
ThrowException(std::exception_ptr ep) ThrowException(std::exception_ptr ep)
{ {

@ -204,7 +204,7 @@ struct CheckSequenceUTF8 {
template<> template<>
struct CheckSequenceUTF8<0U> { struct CheckSequenceUTF8<0U> {
constexpr bool operator()(gcc_unused const char *p) const noexcept { constexpr bool operator()([[maybe_unused]] const char *p) const noexcept {
return true; return true;
} }
}; };

@ -64,8 +64,8 @@ service_notify_status(DWORD status_code)
} }
static DWORD WINAPI static DWORD WINAPI
service_dispatcher(gcc_unused DWORD control, gcc_unused DWORD event_type, service_dispatcher([[maybe_unused]] DWORD control, [[maybe_unused]] DWORD event_type,
gcc_unused void *event_data, gcc_unused void *context) [[maybe_unused]] void *event_data, [[maybe_unused]] void *context)
{ {
switch (control) { switch (control) {
case SERVICE_CONTROL_SHUTDOWN: case SERVICE_CONTROL_SHUTDOWN:
@ -78,7 +78,7 @@ service_dispatcher(gcc_unused DWORD control, gcc_unused DWORD event_type,
} }
static void WINAPI static void WINAPI
service_main(gcc_unused DWORD argc, gcc_unused LPTSTR argv[]) service_main([[maybe_unused]] DWORD argc, [[maybe_unused]] LPTSTR argv[])
{ {
service_handle = service_handle =
RegisterServiceCtrlHandlerEx(service_name, RegisterServiceCtrlHandlerEx(service_name,

@ -49,7 +49,7 @@ AvahiRegisterService(AvahiClient *c);
static void static void
AvahiGroupCallback(AvahiEntryGroup *g, AvahiGroupCallback(AvahiEntryGroup *g,
AvahiEntryGroupState state, AvahiEntryGroupState state,
gcc_unused void *userdata) [[maybe_unused]] void *userdata)
{ {
assert(g != nullptr); assert(g != nullptr);
@ -149,7 +149,7 @@ AvahiRegisterService(AvahiClient *c)
/* Callback when avahi changes state */ /* Callback when avahi changes state */
static void static void
MyAvahiClientCallback(AvahiClient *c, AvahiClientState state, MyAvahiClientCallback(AvahiClient *c, AvahiClientState state,
gcc_unused void *userdata) [[maybe_unused]] void *userdata)
{ {
assert(c != nullptr); assert(c != nullptr);

Some files were not shown because too many files have changed in this diff Show More