Ошибки Valgrind На простых строковых функциях C

Давайте рассмотрим эту простую тестовую программу:

#include 
#include 

int main(int argc, char *argv[])
{
        char buf[256];
        int i;

        strcpy(buf,"Hello world!");
        i = strlen(buf);
        printf("Length of string is %d.\n",i);
        return 0;
}

при компиляции с помощью компилятора Intel C ++ и оптимизации включены (O3), я получаю следующие ошибки от Valgrind:

==8727== Conditional jump or move depends on uninitialised value(s)
==8727==    at 0x4009EF: main (strtest.cpp:11)
==8727== Use of uninitialised value of size 8
==8727==    at 0x4FC61ED: _itoa_word (in /lib64/libc-2.4.so)
==8727==    by 0x4FC9317: vfprintf (in /lib64/libc-2.4.so)
==8727==    by 0x4FD02A9: printf (in /lib64/libc-2.4.so)
==8727==    by 0x400A09: main (strtest.cpp:13)
==8727== Conditional jump or move depends on uninitialised value(s)
==8727==    at 0x4FC61F7: _itoa_word (in /lib64/libc-2.4.so)
==8727==    by 0x4FC9317: vfprintf (in /lib64/libc-2.4.so)
==8727==    by 0x4FD02A9: printf (in /lib64/libc-2.4.so)
==8727==    by 0x400A09: main (strtest.cpp:13)
==8727== Conditional jump or move depends on uninitialised value(s)
==8727==    at 0x4FC9386: vfprintf (in /lib64/libc-2.4.so)
==8727==    by 0x4FD02A9: printf (in /lib64/libc-2.4.so)
==8727==    by 0x400A09: main (strtest.cpp:13)
==8727== Conditional jump or move depends on uninitialised value(s)
==8727==    at 0x4FC990F: vfprintf (in /lib64/libc-2.4.so)
==8727==    by 0x4FD02A9: printf (in /lib64/libc-2.4.so)
==8727==    by 0x400A09: main (strtest.cpp:13)
==8727== Conditional jump or move depends on uninitialised value(s)
==8727==    at 0x4FC82F2: vfprintf (in /lib64/libc-2.4.so)
==8727==    by 0x4FD02A9: printf (in /lib64/libc-2.4.so)
==8727==    by 0x400A09: main (strtest.cpp:13)

Я использую самую последнюю версию VALGRIND (3.6.1). Это не происходит при повороте оптимизации Off (-O0), и это не происходит с G ++. Однако, оно появляется со всеми компиляторами Intel, я попробовал До сих пор (11.0, 11.1, 12).

Похоже, что ошибки связаны с SIMD-ускорением строковых функций, таких как обсуждается в Стронии C, стринге и Valgrind .

Был заявлен, что это была ошибка в Валгринд и исправлена ​​сейчас. Однако, хотя используя новейшую версию Valgrind, у меня все еще есть эти ошибки. Кто-нибудь знает какую-то помощь об этом?

5
задан Community 23 May 2017 в 12:23
поделиться