treewide: fix a bunch of lints
Fixes:
- Identifiers starting with _ are prohibited
- Some driveby header dependency cleaning which wound up with doing some
extra fixups.
- Fucking C style casts, man. C++ made these 1000% worse by letting you
also do memory corruption with them with references.
- Remove casts to Expr * where ExprBlackHole is an incomplete type by
introducing an explicitly-cast eBlackHoleAddr as Expr *.
- An incredibly illegal cast of the text bytes of the StorePath hash
into a size_t directly. You can't DO THAT.
Replaced with actually parsing the hash so we get 100% of the bits
being entropy, then memcpying the start of the hash. If this shows
up in a profile we should just make the hash parser faster with a
lookup table or something sensible like that.
- This horrendous bit of UB which I thankfully slapped a deprecation
warning on, built, and it didn't trigger anywhere so it was dead
code and I just deleted it. But holy crap you *cannot* do that.
inline void mkString(const Symbol & s)
{
mkString(((const std::string &) s).c_str());
}
- Some wrong lints. Lots of wrong macro lints, one wrong
suspicious-sizeof lint triggered by the template being instantiated
with only pointers, but the calculation being correct for both
pointers and not-pointers.
- Exceptions in destructors strike again. I tried to catch the
exceptions that might actually happen rather than all the exceptions
imaginable. We can let the runtime hard-kill it on other exceptions
imo.
Change-Id: I71761620846cba64d66ee7ca231b20c061e69710
This commit is contained in:
@@ -16,16 +16,12 @@
|
||||
*/
|
||||
|
||||
#include "suggestions.hh"
|
||||
#include "ref.hh"
|
||||
#include "types.hh"
|
||||
#include "fmt.hh"
|
||||
|
||||
#include <cstring>
|
||||
#include <list>
|
||||
#include <memory>
|
||||
#include <map>
|
||||
#include <optional>
|
||||
#include <compare>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
@@ -173,6 +169,7 @@ public:
|
||||
};
|
||||
|
||||
#define MakeError(newClass, superClass) \
|
||||
/* NOLINTNEXTLINE(bugprone-macro-parentheses) */ \
|
||||
class newClass : public superClass \
|
||||
{ \
|
||||
public: \
|
||||
|
||||
@@ -22,6 +22,7 @@ public:
|
||||
Finally(Finally &&other) : fun(std::move(other.fun)) {
|
||||
other.movedFrom = true;
|
||||
}
|
||||
// NOLINTNEXTLINE(bugprone-exception-escape): the noexcept is declared properly here, the analysis seems broken
|
||||
~Finally() noexcept(noexcept(fun()))
|
||||
{
|
||||
try {
|
||||
|
||||
+2
-1
@@ -7,6 +7,7 @@
|
||||
#include "args.hh"
|
||||
#include "hash.hh"
|
||||
#include "archive.hh"
|
||||
#include "charptr-cast.hh"
|
||||
#include "logging.hh"
|
||||
#include "split.hh"
|
||||
|
||||
@@ -129,7 +130,7 @@ std::string Hash::to_string(Base base, bool includeType) const
|
||||
break;
|
||||
case Base::Base64:
|
||||
case Base::SRI:
|
||||
s += base64Encode(std::string_view(reinterpret_cast<const char *>(hash), hashSize));
|
||||
s += base64Encode(std::string_view(charptr_cast<const char *>(hash), hashSize));
|
||||
break;
|
||||
}
|
||||
return s;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#include "serialise.hh"
|
||||
#include "charptr-cast.hh"
|
||||
#include "signals.hh"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include <concepts>
|
||||
#include <memory>
|
||||
|
||||
#include "charptr-cast.hh"
|
||||
#include "generator.hh"
|
||||
#include "strings.hh"
|
||||
#include "types.hh"
|
||||
@@ -385,7 +386,7 @@ struct SerializingTransform
|
||||
buf[5] = (n >> 40) & 0xff;
|
||||
buf[6] = (n >> 48) & 0xff;
|
||||
buf[7] = (unsigned char) (n >> 56) & 0xff;
|
||||
return {reinterpret_cast<const char *>(buf.begin()), 8};
|
||||
return {charptr_cast<const char *>(buf.begin()), 8};
|
||||
}
|
||||
|
||||
static Bytes padding(size_t unpadded)
|
||||
@@ -417,6 +418,9 @@ struct SerializingTransform
|
||||
|
||||
void writePadding(size_t len, Sink & sink);
|
||||
|
||||
// NOLINTBEGIN(cppcoreguidelines-avoid-capturing-lambda-coroutines):
|
||||
// These coroutines do their entire job before the semicolon and are not
|
||||
// retained, so they live long enough.
|
||||
inline Sink & operator<<(Sink & sink, uint64_t u)
|
||||
{
|
||||
return sink << [&]() -> WireFormatGenerator { co_yield u; }();
|
||||
@@ -441,6 +445,7 @@ inline Sink & operator<<(Sink & sink, const Error & ex)
|
||||
{
|
||||
return sink << [&]() -> WireFormatGenerator { co_yield ex; }();
|
||||
}
|
||||
// NOLINTEND(cppcoreguidelines-avoid-capturing-lambda-coroutines)
|
||||
|
||||
MakeError(SerialisationError, Error);
|
||||
|
||||
@@ -448,7 +453,7 @@ template<typename T>
|
||||
T readNum(Source & source)
|
||||
{
|
||||
unsigned char buf[8];
|
||||
source((char *) buf, sizeof(buf));
|
||||
source(charptr_cast<char *>(buf), sizeof(buf));
|
||||
|
||||
auto n = readLittleEndian<uint64_t>(buf);
|
||||
|
||||
@@ -540,13 +545,17 @@ struct FramedSource : Source
|
||||
|
||||
~FramedSource()
|
||||
{
|
||||
if (!eof) {
|
||||
while (true) {
|
||||
auto n = readInt(from);
|
||||
if (!n) break;
|
||||
std::vector<char> data(n);
|
||||
from(data.data(), n);
|
||||
try {
|
||||
if (!eof) {
|
||||
while (true) {
|
||||
auto n = readInt(from);
|
||||
if (!n) break;
|
||||
std::vector<char> data(n);
|
||||
from(data.data(), n);
|
||||
}
|
||||
}
|
||||
} catch (...) {
|
||||
ignoreException();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include "sync.hh"
|
||||
#include "terminal.hh"
|
||||
|
||||
#include <map>
|
||||
#include <thread>
|
||||
|
||||
namespace nix {
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "error.hh"
|
||||
#include "sync.hh"
|
||||
|
||||
#include <map>
|
||||
#include <queue>
|
||||
#include <functional>
|
||||
#include <thread>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
///@file
|
||||
|
||||
#include "error.hh"
|
||||
#include <map>
|
||||
|
||||
namespace nix {
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
* Force the default versions of all constructors (copy, move, copy
|
||||
* assignment).
|
||||
*/
|
||||
// NOLINTBEGIN(bugprone-macro-parentheses)
|
||||
#define FORCE_DEFAULT_CONSTRUCTORS(CLASS_NAME) \
|
||||
CLASS_NAME(const CLASS_NAME &) = default; \
|
||||
CLASS_NAME(CLASS_NAME &) = default; \
|
||||
@@ -15,6 +16,7 @@
|
||||
\
|
||||
CLASS_NAME & operator =(const CLASS_NAME &) = default; \
|
||||
CLASS_NAME & operator =(CLASS_NAME &) = default;
|
||||
// NOLINTEND(bugprone-macro-parentheses)
|
||||
|
||||
/**
|
||||
* Make a wrapper constructor. All args are forwarded to the
|
||||
|
||||
Reference in New Issue
Block a user