diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CallDescription.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CallDescription.h --- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CallDescription.h +++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CallDescription.h @@ -134,6 +134,9 @@ std::initializer_list> &&List) : LinearMap(List) {} + template + CallDescriptionMap(InputIt First, InputIt Last) : LinearMap(First, Last) {} + ~CallDescriptionMap() = default; // These maps are usually stored once per checker, so let's make sure diff --git a/clang/unittests/StaticAnalyzer/CallDescriptionTest.cpp b/clang/unittests/StaticAnalyzer/CallDescriptionTest.cpp --- a/clang/unittests/StaticAnalyzer/CallDescriptionTest.cpp +++ b/clang/unittests/StaticAnalyzer/CallDescriptionTest.cpp @@ -19,6 +19,14 @@ namespace ento { namespace { +using ArgsContainer = std::vector>; + +static_assert( + std::is_constructible, + decltype(std::declval().begin()), + decltype(std::declval().end())>(), + "should be range constructible"); + // A wrapper around CallDescriptionMap that allows verifying that // all functions have been found. This is needed because CallDescriptionMap // isn't supposed to support iteration.