Fix gcc warning -Wmissing-field-initializers

Add the compile flag '-Wmissing-field-initializers' and adapt the code
to fix this warning.

The approach that was taken here was to add default values to the type
definitions rather than specified them whenever they were missing.

Change-Id: Ic223a964d67ab429e8da804c0721ba5e25d53012
This commit is contained in:
Lulu 2024-10-06 22:10:40 +02:00
parent 1224476def
commit 6756a067c2
9 changed files with 17 additions and 16 deletions

View file

@ -486,6 +486,7 @@ add_project_arguments(
# It would be nice for our headers to be idempotent instead.
'-include', 'config.h',
'-Wsign-compare',
'-Wmissing-field-initializers',
'-Wno-deprecated-declarations',
'-Wimplicit-fallthrough',
'-Werror=switch',

View file

@ -47,7 +47,7 @@ struct BuildResult
* @todo This should be an entire ErrorInfo object, not just a
* string, for richer information.
*/
std::string errorMsg;
std::string errorMsg = {};
std::string toString() const {
auto strStatus = [&]() {
@ -90,7 +90,7 @@ struct BuildResult
* For derivations, a mapping from the names of the wanted outputs
* to actual paths.
*/
SingleDrvOutputs builtOutputs;
SingleDrvOutputs builtOutputs = {};
/**
* The start/stop times of the build (or one of the rounds, if it

View file

@ -63,7 +63,7 @@ struct InitialOutputStatus {
struct InitialOutput {
bool wanted;
Hash outputHash;
std::optional<InitialOutputStatus> known;
std::optional<InitialOutputStatus> known = {};
};
/**

View file

@ -88,8 +88,8 @@ protected:
public:
struct [[nodiscard]] WorkResult {
ExitCode exitCode;
BuildResult result;
std::shared_ptr<Error> ex;
BuildResult result = {};
std::shared_ptr<Error> ex = {};
bool permanentFailure = false;
bool timedOut = false;
bool hashMismatch = false;

View file

@ -20,10 +20,10 @@ struct NarMember
file in the NAR. */
uint64_t start = 0, size = 0;
std::string target;
std::string target = {};
/* If this is a directory, all the children of the directory. */
std::map<std::string, NarMember> children;
std::map<std::string, NarMember> children = {};
};
struct NarAccessor : public FSAccessor

View file

@ -17,7 +17,7 @@ namespace nix {
struct StorePathWithOutputs
{
StorePath path;
std::set<std::string> outputs;
std::set<std::string> outputs = {};
std::string to_string(const Store & store) const;

View file

@ -50,7 +50,7 @@ struct Realisation {
DrvOutput id;
StorePath outPath;
StringSet signatures;
StringSet signatures = {};
/**
* The realisations that are required for the current one to be valid.
@ -58,7 +58,7 @@ struct Realisation {
* When importing this realisation, the store will first check that all its
* dependencies exist, and map to the correct output path
*/
std::map<DrvOutput, StorePath> dependentRealisations;
std::map<DrvOutput, StorePath> dependentRealisations = {};
nlohmann::json toJSON() const;
static Realisation fromJSON(const nlohmann::json& json, const std::string& whence);

View file

@ -829,7 +829,7 @@ StorePathSet Store::queryValidPaths(const StorePathSet & paths, SubstituteFlag m
{
size_t left;
StorePathSet valid;
std::exception_ptr exc;
std::exception_ptr exc = {};
};
Sync<State> state_(State{paths.size(), StorePathSet()});

View file

@ -78,11 +78,11 @@ struct RunOptions
{
Path program;
bool searchPath = true;
Strings args;
std::optional<uid_t> uid;
std::optional<uid_t> gid;
std::optional<Path> chdir;
std::optional<std::map<std::string, std::string>> environment;
Strings args = {};
std::optional<uid_t> uid = {};
std::optional<uid_t> gid = {};
std::optional<Path> chdir = {};
std::optional<std::map<std::string, std::string>> environment = {};
bool captureStdout = false;
bool mergeStderrToStdout = false;
bool isInteractive = false;