CI: added clang-tidy

This commit is contained in:
SChernykh 2023-06-14 13:58:51 +02:00
parent 950330b5f7
commit 8b4f05dc78
5 changed files with 41 additions and 8 deletions

30
.github/workflows/clang-tidy.yml vendored Normal file
View file

@ -0,0 +1,30 @@
name: clang-tidy
on: [push, pull_request]
jobs:
clang-tidy:
runs-on: ubuntu-22.04
steps:
- name: Install clang
run: |
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 16
sudo apt-get install -y clang-tidy-16
- name: Verify clang-tidy configuration
run: |
clang-tidy-16 --verify-config
- name: Checkout repository
uses: actions/checkout@v3
with:
submodules: true
- name: Run clang-tidy
run: |
cd src
clang-tidy-16 *.cpp -checks=-clang-diagnostic-undefined-internal -warnings-as-errors=* -- -I../external/src/robin-hood-hashing/src/include -I../external/src/rapidjson/include -I../external/src/cryptonote -I../external/src/RandomX/src -I../external/src/cppzmq -I../external/src/libuv/include -I../external/src/libzmq/include -I../external/src/curl/include -I../external/src -DCLANG_TIDY -DSIZE_MAX=UINT64_MAX -DRAPIDJSON_ENDIAN=RAPIDJSON_LITTLEENDIAN -DRAPIDJSON_PARSE_DEFAULT_FLAGS=kParseTrailingCommasFlag

View file

@ -24,6 +24,7 @@ Reddit discussions: [original announcement](https://www.reddit.com/r/MoneroMinin
<img alt="Coverity Scan Build Status" <img alt="Coverity Scan Build Status"
src="https://scan.coverity.com/projects/23659/badge.svg"/> src="https://scan.coverity.com/projects/23659/badge.svg"/>
</a> </a>
![clang-tidy](https://github.com/SChernykh/p2pool/actions/workflows/clang-tidy.yml/badge.svg)
# Contents # Contents
- [Pool mining vs Solo mining vs P2Pool mining](#pool-mining-vs-solo-mining-vs-p2pool-mining) - [Pool mining vs Solo mining vs P2Pool mining](#pool-mining-vs-solo-mining-vs-p2pool-mining)
- [Features](#features) - [Features](#features)

View file

@ -204,7 +204,7 @@ struct
{ {
#ifdef _MSC_VER #ifdef _MSC_VER
_addcarry_u64(_addcarry_u64(0, lo, b.lo, &lo), hi, b.hi, &hi); _addcarry_u64(_addcarry_u64(0, lo, b.lo, &lo), hi, b.hi, &hi);
#elif __GNUC__ #elif defined(__GNUC__) && !defined(CLANG_TIDY)
*reinterpret_cast<unsigned __int128*>(this) += *reinterpret_cast<const unsigned __int128*>(&b); *reinterpret_cast<unsigned __int128*>(this) += *reinterpret_cast<const unsigned __int128*>(&b);
#else #else
const uint64_t t = lo; const uint64_t t = lo;
@ -221,7 +221,7 @@ struct
{ {
#ifdef _MSC_VER #ifdef _MSC_VER
_subborrow_u64(_subborrow_u64(0, lo, b.lo, &lo), hi, b.hi, &hi); _subborrow_u64(_subborrow_u64(0, lo, b.lo, &lo), hi, b.hi, &hi);
#elif __GNUC__ #elif defined(__GNUC__) && !defined(CLANG_TIDY)
*reinterpret_cast<unsigned __int128*>(this) -= *reinterpret_cast<const unsigned __int128*>(&b); *reinterpret_cast<unsigned __int128*>(this) -= *reinterpret_cast<const unsigned __int128*>(&b);
#else #else
const uint64_t t = b.lo; const uint64_t t = b.lo;

View file

@ -65,7 +65,7 @@ struct Stream
return *this; return *this;
} }
template<typename T, int base = 10> template<typename T, unsigned int base = 10>
NOINLINE void writeInt(T data) NOINLINE void writeInt(T data)
{ {
static_assert(1 < base && base <= 64, "Invalid base"); static_assert(1 < base && base <= 64, "Invalid base");
@ -78,11 +78,13 @@ struct Stream
size_t k = sizeof(buf); size_t k = sizeof(buf);
int w = m_numberWidth; int w = m_numberWidth;
std::make_unsigned_t<T> udata = static_cast<std::make_unsigned_t<T>>(data);
do { do {
buf[--k] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/"[data % base]; buf[--k] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/"[udata % base];
data /= base; udata /= base;
--w; --w;
} while ((data > 0) || (w > 0)); } while (udata || (w > 0));
if (negative) { if (negative) {
buf[--k] = '-'; buf[--k] = '-';

View file

@ -804,13 +804,13 @@ bool p2pool::get_timestamps(uint64_t (&timestamps)[TIMESTAMP_WINDOW]) const
{ {
ReadLock lock(m_mainchainLock); ReadLock lock(m_mainchainLock);
if (m_mainchainByHeight.size() <= TIMESTAMP_WINDOW) { if (m_mainchainByHeight.size() < TIMESTAMP_WINDOW) {
return false; return false;
} }
auto it = m_mainchainByHeight.end(); auto it = m_mainchainByHeight.end();
for (int i = 0; (i < TIMESTAMP_WINDOW) && (it != m_mainchainByHeight.begin()); ++i) { for (int i = 0; i < TIMESTAMP_WINDOW; ++i) {
--it; --it;
timestamps[i] = it->second.timestamp; timestamps[i] = it->second.timestamp;
} }