Skip to content

Commit 2fb4d06

Browse files
committed
Subprocess.h: use vector instead of dynamically-sized VLA
addresses warning: ```cpp souffle> /tmp/nix-build-souffle-2.4.1.drv-0/source/src/include/souffle/utility/SubProcess.h:81:29: warning: variable length arrays in C++ are a Clang extension [-Wvla-cxx-extension] souffle> 81 | char* argv_temp[argv.size() + 2]; souffle> | ^~~~~~~~~~~~~~~ souffle> /tmp/nix-build-souffle-2.4.1.drv-0/source/src/include/souffle/utility/SubProcess.h:201:21: note: in instantiation of function template specialization 'souffle::execute<tcb::span<std::pair<const char *, const char *>> &, void>' requested here souffle> 201 | return souffle::execute(program, argv_ptr, envp_ptr); souffle> | ^ souffle> /tmp/nix-build-souffle-2.4.1.drv-0/source/src/MainDriver.cpp:165:17: note: in instantiation of function template specialization 'souffle::execute<std::map<const char *, std::string> &, void>' requested here souffle> 165 | auto exit = execute(binaryFilename, {}, env); souffle> | ^ souffle> /tmp/nix-build-souffle-2.4.1.drv-0/source/src/include/souffle/utility/span.h:473:56: note: function parameter 'argv' with unknown value cannot be used in a constant expression souffle> 473 | constexpr size_type size() const noexcept { return storage_.size; } souffle> | ^ souffle> /tmp/nix-build-souffle-2.4.1.drv-0/source/src/include/souffle/utility/SubProcess.h:81:29: note: in call to 'argv.size()' souffle> 81 | char* argv_temp[argv.size() + 2]; souffle> | ^~~~~~~~~~~ souffle> /tmp/nix-build-souffle-2.4.1.drv-0/source/src/include/souffle/utility/SubProcess.h:67:61: note: declared here souffle> 67 | std::string const& program, span<char const* const> argv = {}, Envp&& envp = {}) { souffle> | ^ ```
1 parent 040a962 commit 2fb4d06

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

src/include/souffle/utility/SubProcess.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,12 @@ std::optional<detail::LinuxWaitStatus> execute(
7878
if (::setenv(k, v, 1)) detail::perrorExit("setenv");
7979
}
8080

81-
char* argv_temp[argv.size() + 2];
81+
std::vector<char*> argv_temp(argv.size() + 2);
8282
argv_temp[0] = const_cast<char*>(program.c_str());
83-
std::copy_n(argv.data(), argv.size(), const_cast<char const**>(argv_temp) + 1);
83+
std::copy_n(argv.data(), argv.size(), const_cast<char const**>(argv_temp.data()) + 1);
8484
argv_temp[argv.size() + 1] = nullptr;
8585

86-
::execvp(program.c_str(), argv_temp);
86+
::execvp(program.c_str(), argv_temp.data());
8787
std::exit(EC::cannot_execute);
8888
}
8989

0 commit comments

Comments
 (0)