diff options
author | John Ericson <John.Ericson@Obsidian.Systems> | 2023-01-12 20:41:29 -0500 |
---|---|---|
committer | John Ericson <John.Ericson@Obsidian.Systems> | 2023-01-12 20:52:29 -0500 |
commit | d29eb085630aac6cbefeafe51937314ce0263593 (patch) | |
tree | 73bf197192ee6cbeb539d9c69d735bde68079878 /src | |
parent | e947aa540129441ebb3df1980c9ba05a935473ca (diff) |
Assert on construction that `OutputsSpec::Names` is non-empty
Diffstat (limited to 'src')
-rw-r--r-- | src/libstore/outputs-spec.hh | 9 | ||||
-rw-r--r-- | src/libstore/tests/outputs-spec.cc | 6 |
2 files changed, 12 insertions, 3 deletions
diff --git a/src/libstore/outputs-spec.hh b/src/libstore/outputs-spec.hh index 82dfad479..46bc35ebc 100644 --- a/src/libstore/outputs-spec.hh +++ b/src/libstore/outputs-spec.hh @@ -1,5 +1,6 @@ #pragma once +#include <cassert> #include <optional> #include <set> #include <variant> @@ -11,13 +12,15 @@ namespace nix { struct OutputNames : std::set<std::string> { using std::set<std::string>::set; - // These need to be "inherited manually" + /* These need to be "inherited manually" */ + OutputNames(const std::set<std::string> & s) : std::set<std::string>(s) - { } + { assert(!empty()); } + OutputNames(std::set<std::string> && s) : std::set<std::string>(s) - { } + { assert(!empty()); } /* This set should always be non-empty, so we delete this constructor in order make creating empty ones by mistake harder. diff --git a/src/libstore/tests/outputs-spec.cc b/src/libstore/tests/outputs-spec.cc index 5daac9234..c5e3f382b 100644 --- a/src/libstore/tests/outputs-spec.cc +++ b/src/libstore/tests/outputs-spec.cc @@ -4,6 +4,12 @@ namespace nix { +#ifndef NDEBUG +TEST(OutputsSpec, no_empty_names) { + ASSERT_DEATH(OutputsSpec::Names { std::set<std::string> { } }, ""); +} +#endif + #define TEST_DONT_PARSE(NAME, STR) \ TEST(OutputsSpec, bad_ ## NAME) { \ std::optional OutputsSpecOpt = \ |