Package: clang-6.0
Version: 1:6.0.1-2
Severity: normal

The attached reduced testcase gives a false positive with memory
sanitiser:

Uninitialized bytes in __interceptor_memcmp at offset 0 inside [0x7ffc2bd76598, 
1)
==16008==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x7fe07c37b069 in std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> >::compare(char const*) const 
(/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0x120069)
    #1 0x49a6be in bool std::operator==<char, std::char_traits<char>, 
std::allocator<char> >(std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > const&, char const*) 
/usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/basic_string.h:6075:20
    #2 0x49a612 in bool std::operator!=<char, std::char_traits<char>, 
std::allocator<char> >(std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > const&, char const*) 
/usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/basic_string.h:6113:22
    #3 0x49a3f9 in main 
/home/olly/git/xapian-1.4/xapian-core/tests/memsanfalsepositive.cc:5:41
    #4 0x7fe07bee0b16 in __libc_start_main 
(/lib/x86_64-linux-gnu/libc.so.6+0x22b16)
    #5 0x41e349 in _start 
(/home/olly/git/xapian-1.4/xapian-core/tests/a.out+0x41e349)

SUMMARY: MemorySanitizer: use-of-uninitialized-value 
(/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0x120069) in 
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> 
>::compare(char const*) const
Exiting

I suspect the problem might be that libstdc++ needs to be built with
memory sanitiser too - the documentation at
https://clang.llvm.org/docs/MemorySanitizer.html#limitations notes:

| MemorySanitizer requires that all program code is instrumented. This
| also includes any libraries that the program depends on, even libc.
| Failing to achieve this may result in false reports.

(I get what appears to be the same error if I use clang-7
1:7~svn331965-1 instead, but since that seems to be an SVN snapshot
version, I've reported this against the stable release version).

Cheers,
    Olly

-- System Information:
Debian Release: buster/sid
  APT prefers unstable-debug
  APT policy: (500, 'unstable-debug'), (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.16.0-1-amd64 (SMP w/8 CPU cores)
Locale: LANG=en_NZ.UTF-8, LC_CTYPE=en_NZ.UTF-8 (charmap=UTF-8), 
LANGUAGE=en_NZ:en (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages clang-6.0 depends on:
ii  binutils                 2.31.1-1
ii  libc6                    2.27-5
ii  libc6-dev                2.27-5
ii  libclang-common-6.0-dev  1:6.0.1-2
ii  libclang1-6.0            1:6.0.1-2
ii  libgcc-7-dev             7.3.0-26
ii  libgcc1                  1:8.1.0-11
ii  libjsoncpp1              1.7.4-3
ii  libllvm6.0               1:6.0.1-2
ii  libobjc-7-dev            7.3.0-26
ii  libstdc++-7-dev          7.3.0-26
ii  libstdc++6               8.1.0-11

Versions of packages clang-6.0 recommends:
ii  libomp-dev    6.0.1-1
ii  llvm-6.0-dev  1:6.0.1-2
ii  python        2.7.15-3

Versions of packages clang-6.0 suggests:
pn  clang-6.0-doc  <none>
pn  gnustep        <none>
pn  gnustep-devel  <none>

-- no debconf information
#include <string>

inline std::string foo(std::string s) { return s; }

int main(int, char**) { return foo("x") != "x"; }

Reply via email to