https://bugs.kde.org/show_bug.cgi?id=397313
Bug ID: 397313 Summary: False positive on long double "uninitialised bytes" Product: valgrind Version: 3.12 SVN Platform: Other URL: https://github.com/ornladios/ADIOS/issues/184#issuecom ment-411739144 OS: Linux Status: UNCONFIRMED Severity: normal Priority: NOR Component: memcheck Assignee: jsew...@acm.org Reporter: axel.huebl@plasma.ninja Target Milestone: --- The following minimal example leads to a false positive in long double variables on uninitialized bytes: (minimal example by Norbert Podhorszki, ORNL) #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> int main (int argc, char ** argv) { char filename[] = "test_longdouble_valgrind.data"; long double ld1 = 1.2345e+80; long double *bufm = (long double *) malloc (sizeof(long double)); long double *bufc = (long double *) calloc (1, sizeof(long double)); memcpy (bufm, &ld1, sizeof(long double)); memcpy (bufc, &ld1, sizeof(long double)); int fd = creat(filename, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); write(fd, bufm, sizeof(long double)); write(fd, bufc, sizeof(long double)); close(fd); free(bufm); free(bufc); return 0; } Valgrind complains about both the malloc'd and calloc'd buffers. $ valgrind ./test_longdouble_valgrind ==15574== Memcheck, a memory error detector ==15574== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. ==15574== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info ==15574== Command: ./test_longdouble_valgrind ==15574== ==15574== Syscall param write(buf) points to uninitialised byte(s) ==15574== at 0x4F312C0: __write_nocancel (syscall-template.S:84) ==15574== by 0x40083F: main (in /home/adios/work/test/other_tests/test_longdouble_valgrind) ==15574== Address 0x520404a is 10 bytes inside a block of size 16 alloc'd ==15574== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==15574== by 0x4007D8: main (in /home/adios/work/test/other_tests/test_longdouble_valgrind) ==15574== ==15574== Syscall param write(buf) points to uninitialised byte(s) ==15574== at 0x4F312C0: __write_nocancel (syscall-template.S:84) ==15574== by 0x400855: main (in /home/adios/work/test/other_tests/test_longdouble_valgrind) ==15574== Address 0x520409a is 10 bytes inside a block of size 16 alloc'd ==15574== at 0x4C2FB55: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==15574== by 0x4007EB: main (in /home/adios/work/test/other_tests/test_longdouble_valgrind) We are aware of the limitations listed here http://valgrind.org/docs/manual/manual-core.html#manual-core.limits but this still seems to be a bug. Further information: https://github.com/ornladios/ADIOS/issues/184#issuecomment-411728907 -- You are receiving this mail because: You are watching all bug changes.