GTest: предупреждения Valgrind при использовании параметризованного теста std :: function - PullRequest
0 голосов
/ 28 октября 2018

Когда я запускаю следующую фиктивную программу 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

...