Когда я запускаю следующую фиктивную программу Google Test с valgrind (3.14.0), я получаю серию предупреждающих сообщений, которые наводят меня на мысль, что со структурой программы может быть что-то не так.Это первый раз, когда я наблюдал нечто подобное, и я полагаю, что это связано с тем фактом, что FooTest параметризован с std::function
экземпляром.
#include <functional>
#include "gtest/gtest.h"
using ::testing::TestWithParam;
using ::testing::Values;
namespace
{
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
}
class FooTestHarness
: public TestWithParam<std::function<int(int, int)>> {};
TEST_P(FooTestHarness, FooTest)
{
// ...
}
INSTANTIATE_TEST_CASE_P(FooInstantiation, FooTestHarness, Values(add, sub));
Ниже приводится выдержка из (сокращенного)Выход Valgrind:
==20816== Use of uninitialised value of size 8
==20816== at 0x4C299BD: _itoa_word (in /usr/lib/libc-2.28.so)
==20816== by 0x4C2D269: vfprintf (in /usr/lib/libc-2.28.so)
==20816== by 0x4C55AC5: vsnprintf (in /usr/lib/libc-2.28.so)
==20816== by 0x4C35503: snprintf (in /usr/lib/libc-2.28.so)
==20816== by 0x13033C: testing::(anonymous namespace)::PrintByteSegmentInObjectTo(unsigned char const*, unsigned long, unsigned long, std::ostream*)
...
==20816== Conditional jump or move depends on uninitialised value(s)
==20816== at 0x4C299CE: _itoa_word (in /usr/lib/libc-2.28.so)
==20816== by 0x4C2D269: vfprintf (in /usr/lib/libc-2.28.so)
==20816== by 0x4C55AC5: vsnprintf (in /usr/lib/libc-2.28.so)
==20816== by 0x4C35503: snprintf (in /usr/lib/libc-2.28.so)
==20816== by 0x13033C: testing::(anonymous namespace)::PrintByteSegmentInObjectTo(unsigned char const*, unsigned long, unsigned long, std::ostream*)
...
==20816== Conditional jump or move depends on uninitialised value(s)
==20816== at 0x4C2E100: vfprintf (in /usr/lib/libc-2.28.so)
==20816== by 0x4C55AC5: vsnprintf (in /usr/lib/libc-2.28.so)
==20816== by 0x4C35503: snprintf (in /usr/lib/libc-2.28.so)
==20816== by 0x13033C: testing::(anonymous namespace)::PrintByteSegmentInObjectTo(unsigned char const*, unsigned long, unsigned long, std::ostream*)
...
==20816== Conditional jump or move depends on uninitialised value(s)
==20816== at 0x4C2D3BD: vfprintf (in /usr/lib/libc-2.28.so)
==20816== by 0x4C55AC5: vsnprintf (in /usr/lib/libc-2.28.so)
==20816== by 0x4C35503: snprintf (in /usr/lib/libc-2.28.so)
==20816== by 0x13033C: testing::(anonymous namespace)::PrintByteSegmentInObjectTo(unsigned char const*, unsigned long, unsigned long, std::ostream*)
...
Это происходит для нескольких версий GTest, включая самые последние.Может кто-нибудь диагностировать, это моя ошибка или проблема с GTest и / или valgrind?
РЕДАКТИРОВАТЬ: в случае, если это уместно: я в Linux и использую gcc 8.2.1