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

View File

@ -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;

View File

@ -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"

View File

@ -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);
} }

View File

@ -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

View File

@ -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());
} }

View File

@ -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;
} }

View File

@ -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());

View File

@ -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();

View File

@ -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,

View File

@ -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());

View File

@ -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",

View File

@ -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());

View File

@ -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);

View File

@ -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) {

View File

@ -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;
} }

View File

@ -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);

View File

@ -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());

View File

@ -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);

View File

@ -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,

View File

@ -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;

View File

@ -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

View File

@ -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;
} }

View File

@ -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;

View File

@ -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());
} }

View File

@ -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");

View File

@ -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();

View File

@ -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());

View File

@ -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;

View File

@ -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());

View File

@ -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 */
} }

View File

@ -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) {
} }
/** /**

View File

@ -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);

View File

@ -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();
} }

View File

@ -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();
} }

View File

@ -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());

View File

@ -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;

View File

@ -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;

View File

@ -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;
} }

View File

@ -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>();
} }

View File

@ -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>();
} }

View File

@ -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,

View File

@ -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;

View File

@ -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");
} }

View File

@ -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;

View File

@ -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:

View File

@ -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;

View File

@ -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,

View File

@ -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;
}; };

View File

@ -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;

View File

@ -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);

View File

@ -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");

View File

@ -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));
} }

View File

@ -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...);

View File

@ -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 */

View File

@ -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)
{ {

View File

@ -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);
} }

View File

@ -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);
} }

View File

@ -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);

View File

@ -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)
{ {

View File

@ -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)
{ {

View File

@ -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);
} }

View File

@ -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);
} }

View File

@ -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);
} }

View File

@ -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();

View File

@ -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);
} }

View File

@ -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);
} }

View File

@ -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");
} }

View File

@ -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;

View File

@ -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:

View File

@ -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;

View File

@ -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();

View File

@ -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)
{ {

View File

@ -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)

View File

@ -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;

View File

@ -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 */

View File

@ -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;

View File

@ -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();

View File

@ -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 */

View File

@ -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();

View File

@ -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

View File

@ -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());

View File

@ -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;
} }

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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));
} }

View File

@ -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
} }

View File

@ -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()
{ {

View File

@ -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, ...);

View File

@ -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
{ {
} }

View File

@ -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;

View File

@ -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();

View File

@ -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...));

View File

@ -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()
{ {

View File

@ -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()
{ {

View File

@ -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

View File

@ -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)
{ {

View File

@ -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;
} }
}; };

View File

@ -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,

View File

@ -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