Bug#837963: clang-4.0: bogus valgrind warning from push_back() on std::string
Olly Betts
olly at survex.com
Thu Sep 15 23:02:26 UTC 2016
Package: clang-4.0
Version: 1:4.0~svn279916-1
Severity: normal
If I compile this reduced testcase with clang++-4.0 and run it under
valgrind, I get a bogus warning from the second push_back(). If I
compile with other versions of clang++ or g++ from Debian I don't
get this warning:
$ cat unittest.cc
#include <exception>
#include <iostream>
#include <string>
using namespace std;
typedef void (*func)();
struct S {
static void run(func t) {
try {
t();
} catch (const std::exception&) {
cout << "std::exception" << endl;
}
}
};
static void f() {
string s;
s.push_back('a');
s.push_back('a');
cout << s << endl;
}
int main() {
S::run(f);
}
$ clang++-4.0 -g -O2 -o unittest unittest.cc && valgrind ./unittest
==15131== Memcheck, a memory error detector
==15131== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==15131== Using Valgrind-3.12.0.SVN and LibVEX; rerun with -h for copyright info
==15131== Command: ./unittest
==15131==
==15131== Conditional jump or move depends on uninitialised value(s)
==15131== at 0x400C7F: push_back (basic_string.h:1167)
==15131== by 0x400C7F: f() (unittest.cc:22)
==15131== by 0x400CF2: S::run(void (*)()) (unittest.cc:12)
==15131== by 0x400C4A: main (unittest.cc:26)
==15131==
aa
==15131==
==15131== HEAP SUMMARY:
==15131== in use at exit: 0 bytes in 0 blocks
==15131== total heap usage: 1 allocs, 1 frees, 72,704 bytes allocated
==15131==
==15131== All heap blocks were freed -- no leaks are possible
==15131==
==15131== For counts of detected and suppressed errors, rerun with: -v
==15131== Use --track-origins=yes to see where uninitialised values come from
==15131== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
The resulting value of s seems to be correct, so it's not entirely clear
to me if the issue is with the generated code, or if this is actually a
valgrind problem, but as it is specific to this compiler version it
seems there's at least some change in the compiler which is triggering
this.
Cheers,
Olly
-- System Information:
Debian Release: stretch/sid
APT prefers unstable-debug
APT policy: (500, 'unstable-debug'), (500, 'unstable'), (500, 'stable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386
Kernel: Linux 4.6.0-1-amd64 (SMP w/8 CPU cores)
Locale: LANG=en_NZ.UTF-8, LC_CTYPE=en_NZ.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
Versions of packages clang-4.0 depends on:
ii binutils 2.27-8
ii libc6 2.24-2
ii libc6-dev 2.24-2
ii libclang-common-4.0-dev 1:4.0~svn279916-1
ii libclang1-4.0 1:4.0~svn279916-1
ii libgcc-6-dev 6.2.0-3
ii libgcc1 1:6.2.0-3
ii libjsoncpp1 1.7.4-3
ii libllvm4.0 1:4.0~svn279916-1
ii libobjc-6-dev 6.2.0-3
ii libstdc++-6-dev 6.2.0-3
ii libstdc++6 6.2.0-3
Versions of packages clang-4.0 recommends:
ii llvm-4.0-dev 1:4.0~svn279916-1
ii python 2.7.11-2
Versions of packages clang-4.0 suggests:
pn clang-4.0-doc <none>
pn gnustep <none>
pn gnustep-devel <none>
-- no debconf information
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/pkg-llvm-team/attachments/20160916/13dc4224/attachment.sig>
More information about the Pkg-llvm-team
mailing list