mirror of
https://github.com/matrix-construct/construct
synced 2024-12-25 23:14:13 +01:00
ircd: Fix attributes for clang.
This commit is contained in:
parent
e4a5a755d0
commit
801f0d57b7
9 changed files with 50 additions and 40 deletions
|
@ -254,7 +254,11 @@ ircd::buffer::reverse(const mutable_buffer &dst,
|
|||
}
|
||||
|
||||
template<size_t SIZE>
|
||||
#ifndef __clang__
|
||||
__attribute__((error
|
||||
#else
|
||||
__attribute__((unavailable
|
||||
#endif
|
||||
(
|
||||
"Move source is an array. Is this a string literal? Do you want to move the \\0?"
|
||||
" Disambiguate this by typing the source string_view or const_buffer."
|
||||
|
@ -267,7 +271,11 @@ ircd::buffer::move(const mutable_buffer &dst,
|
|||
}
|
||||
|
||||
template<size_t SIZE>
|
||||
#ifndef __clang__
|
||||
__attribute__((error
|
||||
#else
|
||||
__attribute__((unavailable
|
||||
#endif
|
||||
(
|
||||
"Copy source is an array. Is this a string literal? Do you want to copy the \\0?"
|
||||
" Disambiguate this by typing the source string_view or const_buffer."
|
||||
|
|
|
@ -144,7 +144,11 @@ typename std::enable_if
|
|||
!std::is_assignable<dst, src>() &&
|
||||
!std::is_constructible<dst, src>(),
|
||||
void>::type
|
||||
#ifdef __clang__
|
||||
__attribute__((unavailable("Unhandled assignment to json::tuple property")))
|
||||
#else
|
||||
__attribute__((error("Unhandled assignment to json::tuple property")))
|
||||
#endif
|
||||
_assign(dst &d,
|
||||
src&& s)
|
||||
{
|
||||
|
|
|
@ -95,6 +95,14 @@ namespace ircd
|
|||
template<> string_view lex_cast(bool, const mutable_buffer &buf);
|
||||
}
|
||||
|
||||
#ifdef __clang__
|
||||
#define IRCD_LEX_CAST_UNNECESSARY \
|
||||
__attribute__((deprecated("unnecessary lexical cast")))
|
||||
#else
|
||||
#define IRCD_LEX_CAST_UNNECESSARY \
|
||||
__attribute__((warning("unnecessary lexical cast")))
|
||||
#endif
|
||||
|
||||
/// Convert a native number to a string. The returned value is a view of the
|
||||
/// string in a static ring buffer. There are LEX_CAST_BUFS number of buffers
|
||||
/// so you should not hold on to the returned view for very long.
|
||||
|
@ -136,7 +144,7 @@ ircd::lex_cast<std::string_view>(const std::string_view &s)
|
|||
/// because the conversion has to copy the string while no numerical conversion
|
||||
/// has taken place. The developer should remove the offending lex_cast.
|
||||
template<>
|
||||
__attribute__((warning("unnecessary lexical cast")))
|
||||
IRCD_LEX_CAST_UNNECESSARY
|
||||
inline std::string
|
||||
ircd::lex_cast<std::string>(const std::string &s)
|
||||
{
|
||||
|
@ -174,7 +182,7 @@ ircd::lex_cast(std::string &s)
|
|||
/// marked as unnecessary because no numerical conversion takes place yet
|
||||
/// data is still copied. (note: warning may be removed; may be intentional)
|
||||
template<>
|
||||
__attribute__((warning("unnecessary lexical cast")))
|
||||
IRCD_LEX_CAST_UNNECESSARY
|
||||
inline ircd::string_view
|
||||
ircd::lex_cast(const string_view &s,
|
||||
const mutable_buffer &buf)
|
||||
|
@ -187,7 +195,7 @@ ircd::lex_cast(const string_view &s,
|
|||
/// marked as unnecessary because no numerical conversion takes place yet
|
||||
/// data is still copied. (note: warning may be removed; may be intentional)
|
||||
template<>
|
||||
__attribute__((warning("unnecessary lexical cast")))
|
||||
IRCD_LEX_CAST_UNNECESSARY
|
||||
inline ircd::string_view
|
||||
ircd::lex_cast(const std::string_view &s,
|
||||
const mutable_buffer &buf)
|
||||
|
@ -200,7 +208,7 @@ ircd::lex_cast(const std::string_view &s,
|
|||
/// marked as unnecessary because no numerical conversion takes place yet
|
||||
/// data is still copied. (note: warning may be removed; may be intentional)
|
||||
template<>
|
||||
__attribute__((warning("unnecessary lexical cast")))
|
||||
IRCD_LEX_CAST_UNNECESSARY
|
||||
inline ircd::string_view
|
||||
ircd::lex_cast(const std::string &s,
|
||||
const mutable_buffer &buf)
|
||||
|
@ -211,7 +219,7 @@ ircd::lex_cast(const std::string &s,
|
|||
|
||||
/// Template basis; if no specialization is matched there is no fallback here
|
||||
template<class T>
|
||||
__attribute__((error("unsupported lexical cast")))
|
||||
IRCD_LEX_CAST_UNNECESSARY
|
||||
ircd::string_view
|
||||
ircd::lex_cast(T t,
|
||||
const mutable_buffer &buf)
|
||||
|
@ -222,7 +230,7 @@ ircd::lex_cast(T t,
|
|||
|
||||
/// Template basis; if no specialization is matched there is no fallback here
|
||||
template<class T>
|
||||
__attribute__((error("unsupported lexical cast")))
|
||||
IRCD_LEX_CAST_UNNECESSARY
|
||||
bool
|
||||
ircd::try_lex_cast(const string_view &s)
|
||||
{
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
/// another tool to detect corruption of a context's stack, specifically
|
||||
/// during yield and resume. This use is not really to provide security; just
|
||||
/// a kind of extra assertion, so we eliminate its emission during release.
|
||||
#ifndef NDEBUG
|
||||
#if !defined(NDEBUG) && !defined(__clang__)
|
||||
#define IRCD_CTX_STACK_PROTECT __attribute__((stack_protect))
|
||||
#else
|
||||
#define IRCD_CTX_STACK_PROTECT
|
||||
|
|
10
ircd/db.cc
10
ircd/db.cc
|
@ -2587,8 +2587,8 @@ noexcept
|
|||
{
|
||||
}
|
||||
|
||||
[[noreturn]]
|
||||
rocksdb::Status
|
||||
__attribute__((noreturn))
|
||||
ircd::db::database::stats::passthru::Reset()
|
||||
noexcept
|
||||
{
|
||||
|
@ -2624,16 +2624,16 @@ const noexcept
|
|||
});
|
||||
}
|
||||
|
||||
[[noreturn]]
|
||||
uint64_t
|
||||
__attribute__((noreturn))
|
||||
ircd::db::database::stats::passthru::getTickerCount(const uint32_t tickerType)
|
||||
const noexcept
|
||||
{
|
||||
throw panic {"Unavailable for passthru"};
|
||||
}
|
||||
|
||||
[[noreturn]]
|
||||
void
|
||||
__attribute__((noreturn))
|
||||
ircd::db::database::stats::passthru::setTickerCount(const uint32_t tickerType,
|
||||
const uint64_t count)
|
||||
noexcept
|
||||
|
@ -2641,8 +2641,8 @@ noexcept
|
|||
throw panic {"Unavailable for passthru"};
|
||||
}
|
||||
|
||||
[[noreturn]]
|
||||
void
|
||||
__attribute__((noreturn))
|
||||
ircd::db::database::stats::passthru::histogramData(const uint32_t type,
|
||||
rocksdb::HistogramData *const data)
|
||||
const noexcept
|
||||
|
@ -2650,8 +2650,8 @@ const noexcept
|
|||
throw panic {"Unavailable for passthru"};
|
||||
}
|
||||
|
||||
[[noreturn]]
|
||||
uint64_t
|
||||
__attribute__((noreturn))
|
||||
ircd::db::database::stats::passthru::getAndResetTickerCount(const uint32_t tickerType)
|
||||
noexcept
|
||||
{
|
||||
|
|
|
@ -21,7 +21,6 @@ static_assert
|
|||
"than the one rocksdb has assumed space for."
|
||||
);
|
||||
|
||||
__attribute__((externally_visible))
|
||||
rocksdb::port::Mutex::Mutex()
|
||||
noexcept
|
||||
{
|
||||
|
@ -36,14 +35,12 @@ noexcept
|
|||
#endif
|
||||
}
|
||||
|
||||
__attribute__((externally_visible))
|
||||
rocksdb::port::Mutex::Mutex(bool adaptive)
|
||||
noexcept
|
||||
:Mutex{}
|
||||
{
|
||||
}
|
||||
|
||||
__attribute__((externally_visible))
|
||||
rocksdb::port::Mutex::~Mutex()
|
||||
noexcept
|
||||
{
|
||||
|
@ -59,7 +56,6 @@ noexcept
|
|||
}
|
||||
|
||||
void
|
||||
__attribute__((externally_visible))
|
||||
rocksdb::port::Mutex::Lock()
|
||||
noexcept
|
||||
{
|
||||
|
@ -79,7 +75,6 @@ noexcept
|
|||
}
|
||||
|
||||
void
|
||||
__attribute__((externally_visible))
|
||||
rocksdb::port::Mutex::Unlock()
|
||||
noexcept
|
||||
{
|
||||
|
@ -100,7 +95,6 @@ noexcept
|
|||
}
|
||||
|
||||
void
|
||||
__attribute__((externally_visible))
|
||||
rocksdb::port::Mutex::AssertHeld()
|
||||
noexcept
|
||||
{
|
||||
|
@ -121,7 +115,6 @@ static_assert
|
|||
"than the one rocksdb has assumed space for."
|
||||
);
|
||||
|
||||
__attribute__((externally_visible))
|
||||
rocksdb::port::RWMutex::RWMutex()
|
||||
noexcept
|
||||
{
|
||||
|
@ -136,7 +129,6 @@ noexcept
|
|||
#endif
|
||||
}
|
||||
|
||||
__attribute__((externally_visible))
|
||||
rocksdb::port::RWMutex::~RWMutex()
|
||||
noexcept
|
||||
{
|
||||
|
@ -152,7 +144,6 @@ noexcept
|
|||
}
|
||||
|
||||
void
|
||||
__attribute__((externally_visible))
|
||||
rocksdb::port::RWMutex::ReadLock()
|
||||
noexcept
|
||||
{
|
||||
|
@ -172,7 +163,6 @@ noexcept
|
|||
}
|
||||
|
||||
void
|
||||
__attribute__((externally_visible))
|
||||
rocksdb::port::RWMutex::WriteLock()
|
||||
noexcept
|
||||
{
|
||||
|
@ -192,7 +182,6 @@ noexcept
|
|||
}
|
||||
|
||||
void
|
||||
__attribute__((externally_visible))
|
||||
rocksdb::port::RWMutex::ReadUnlock()
|
||||
noexcept
|
||||
{
|
||||
|
@ -212,7 +201,6 @@ noexcept
|
|||
}
|
||||
|
||||
void
|
||||
__attribute__((externally_visible))
|
||||
rocksdb::port::RWMutex::WriteUnlock()
|
||||
noexcept
|
||||
{
|
||||
|
@ -242,7 +230,6 @@ static_assert
|
|||
"than the one rocksdb has assumed space for."
|
||||
);
|
||||
|
||||
__attribute__((externally_visible))
|
||||
rocksdb::port::CondVar::CondVar(Mutex *mu)
|
||||
noexcept
|
||||
:mu{mu}
|
||||
|
@ -258,7 +245,6 @@ noexcept
|
|||
#endif
|
||||
}
|
||||
|
||||
__attribute__((externally_visible))
|
||||
rocksdb::port::CondVar::~CondVar()
|
||||
noexcept
|
||||
{
|
||||
|
@ -274,7 +260,6 @@ noexcept
|
|||
}
|
||||
|
||||
void
|
||||
__attribute__((externally_visible))
|
||||
rocksdb::port::CondVar::Wait()
|
||||
noexcept
|
||||
{
|
||||
|
@ -296,7 +281,6 @@ noexcept
|
|||
|
||||
// Returns true if timeout occurred
|
||||
bool
|
||||
__attribute__((externally_visible))
|
||||
rocksdb::port::CondVar::TimedWait(uint64_t abs_time_us)
|
||||
noexcept
|
||||
{
|
||||
|
@ -319,7 +303,6 @@ noexcept
|
|||
}
|
||||
|
||||
void
|
||||
__attribute__((externally_visible))
|
||||
rocksdb::port::CondVar::Signal()
|
||||
noexcept
|
||||
{
|
||||
|
@ -335,7 +318,6 @@ noexcept
|
|||
}
|
||||
|
||||
void
|
||||
__attribute__((externally_visible))
|
||||
rocksdb::port::CondVar::SignalAll()
|
||||
noexcept
|
||||
{
|
||||
|
|
|
@ -64,7 +64,6 @@
|
|||
|
||||
#ifdef STORAGE_ROCKSDB_INCLUDE_DB_H_
|
||||
uint8_t
|
||||
__attribute__((externally_visible))
|
||||
rocksdb::WriteThread::BlockingAwaitState(Writer *const w,
|
||||
uint8_t goal_mask)
|
||||
{
|
||||
|
|
20
ircd/prof.cc
20
ircd/prof.cc
|
@ -17,6 +17,12 @@
|
|||
#include <boost/chrono/chrono.hpp>
|
||||
#include <boost/chrono/process_cpu_clocks.hpp>
|
||||
|
||||
#ifndef __clang__
|
||||
#define IRCD_PROF_ALWAYS_OPTIMIZE __attribute__((optimize("s"), flatten))
|
||||
#else
|
||||
#define IRCD_PROF_ALWAYS_OPTIMIZE
|
||||
#endif
|
||||
|
||||
namespace ircd::prof
|
||||
{
|
||||
std::ostream &debug(std::ostream &, const ::perf_event_mmap_page &);
|
||||
|
@ -120,14 +126,14 @@ ircd::prof::reset(group &group)
|
|||
}
|
||||
|
||||
void
|
||||
__attribute__((optimize("s"), flatten))
|
||||
IRCD_PROF_ALWAYS_OPTIMIZE
|
||||
ircd::prof::start(group &group)
|
||||
{
|
||||
leader(group).enable(PERF_IOC_FLAG_GROUP);
|
||||
}
|
||||
|
||||
void
|
||||
__attribute__((optimize("s"), flatten))
|
||||
IRCD_PROF_ALWAYS_OPTIMIZE
|
||||
ircd::prof::stop(group &group)
|
||||
{
|
||||
auto &leader(*group.front());
|
||||
|
@ -136,7 +142,7 @@ ircd::prof::stop(group &group)
|
|||
}
|
||||
|
||||
ircd::prof::event &
|
||||
__attribute__((optimize("s")))
|
||||
IRCD_PROF_ALWAYS_OPTIMIZE
|
||||
ircd::prof::leader(group &group)
|
||||
{
|
||||
assert(!group.empty() && group.front());
|
||||
|
@ -304,7 +310,7 @@ noexcept
|
|||
}
|
||||
|
||||
const uint64_t &
|
||||
__attribute__((optimize("s"), flatten))
|
||||
IRCD_PROF_ALWAYS_OPTIMIZE
|
||||
ircd::prof::instructions::sample()
|
||||
{
|
||||
retired = prof::leader(group).rdpmc();
|
||||
|
@ -765,14 +771,14 @@ noexcept
|
|||
}
|
||||
|
||||
inline void
|
||||
__attribute__((optimize("s")))
|
||||
IRCD_PROF_ALWAYS_OPTIMIZE
|
||||
ircd::prof::event::disable(const long &arg)
|
||||
{
|
||||
::ioctl(int(fd), PERF_EVENT_IOC_DISABLE, arg);
|
||||
}
|
||||
|
||||
inline void
|
||||
__attribute__((optimize("s")))
|
||||
IRCD_PROF_ALWAYS_OPTIMIZE
|
||||
ircd::prof::event::enable(const long &arg)
|
||||
{
|
||||
const int &fd(this->fd);
|
||||
|
@ -795,7 +801,7 @@ ircd::prof::event::ioctl(const ulong &req,
|
|||
}
|
||||
|
||||
inline uint64_t
|
||||
__attribute__((optimize("s")))
|
||||
IRCD_PROF_ALWAYS_OPTIMIZE
|
||||
ircd::prof::event::rdpmc()
|
||||
const
|
||||
{
|
||||
|
|
|
@ -20,9 +20,12 @@ __attribute__((visibility("hidden")))
|
|||
struct ircd::rfc3986::encoder
|
||||
:karma::grammar<char *, const string_view &>
|
||||
{
|
||||
void throw_illegal()
|
||||
[[noreturn]] void throw_illegal()
|
||||
{
|
||||
throw encoding_error("Generator Protection: urlencode");
|
||||
throw encoding_error
|
||||
{
|
||||
"Generator Protection: urlencode"
|
||||
};
|
||||
}
|
||||
|
||||
karma::rule<char *, const string_view &> url_encoding
|
||||
|
|
Loading…
Reference in a new issue