Bug 371060 - memcheck/tests/leak_cpp_interior has undefined references with clang
Summary: memcheck/tests/leak_cpp_interior has undefined references with clang
Status: RESOLVED NOT A BUG
Alias: None
Product: valgrind
Classification: Developer tools
Component: general (show other bugs)
Version: 3.12 SVN
Platform: Compiled Sources Linux
: NOR normal
Target Milestone: ---
Assignee: Julian Seward
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-10-18 06:41 UTC by Austin English
Modified: 2016-10-19 05:39 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Austin English 2016-10-18 06:41:49 UTC
clang -Winline -Wall -Wshadow -Wno-long-long -g -fno-stack-protector -Wno-unused-private-field     -m64    -o leak_cpp_interior leak_cpp_interior.o  
leak_cpp_interior.o: In function `doit()':
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:105: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator=(char const*)'
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:106: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator=(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:107: undefined reference to `operator new[](unsigned long)'
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:115: undefined reference to `operator new[](unsigned long)'
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:118: undefined reference to `operator new(unsigned long)'
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:119: undefined reference to `operator new(unsigned long)'
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:120: undefined reference to `operator new(unsigned long)'
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:121: undefined reference to `operator new(unsigned long)'
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:124: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator+=(char const*)'
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:120: undefined reference to `operator delete(void*)'
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:121: undefined reference to `operator delete(void*)'
leak_cpp_interior.o: In function `main':
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:157: undefined reference to `operator delete[](void*)'
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:158: undefined reference to `operator delete[](void*)'
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:157: undefined reference to `operator delete[](void*)'
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:158: undefined reference to `operator delete[](void*)'
leak_cpp_interior.o: In function `__cxx_global_var_init':
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:91: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string()'
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:91: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
leak_cpp_interior.o: In function `__cxx_global_var_init.1':
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:92: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string()'
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:92: undefined reference to `std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
leak_cpp_interior.o: In function `__clang_call_terminate':
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:(.text.__clang_call_terminate[__clang_call_terminate]+0x2): undefined reference to `__cxa_begin_catch'
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:(.text.__clang_call_terminate[__clang_call_terminate]+0xb): undefined reference to `std::terminate()'
leak_cpp_interior.o: In function `~Ce':
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:39: undefined reference to `operator delete(void*)'
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:39: undefined reference to `operator delete(void*)'
leak_cpp_interior.o: In function `~Ae':
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:27: undefined reference to `operator delete(void*)'
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:27: undefined reference to `operator delete(void*)'
leak_cpp_interior.o: In function `~Be':
/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:33: undefined reference to `operator delete(void*)'
leak_cpp_interior.o:/home/austin/src/valgrind/memcheck/tests/leak_cpp_interior.cpp:33: more undefined references to `operator delete(void*)' follow
leak_cpp_interior.o:(.rodata._ZTI2Ae[_ZTI2Ae]+0x0): undefined reference to `vtable for __cxxabiv1::__class_type_info'
leak_cpp_interior.o:(.rodata._ZTI2Be[_ZTI2Be]+0x0): undefined reference to `vtable for __cxxabiv1::__class_type_info'
leak_cpp_interior.o:(.rodata._ZTI2Ce[_ZTI2Ce]+0x0): undefined reference to `vtable for __cxxabiv1::__vmi_class_type_info'
leak_cpp_interior.o:(.rodata._ZTI1A[_ZTI1A]+0x0): undefined reference to `vtable for __cxxabiv1::__class_type_info'
leak_cpp_interior.o:(.rodata._ZTI1B[_ZTI1B]+0x0): undefined reference to `vtable for __cxxabiv1::__class_type_info'
leak_cpp_interior.o:(.rodata._ZTI1C[_ZTI1C]+0x0): undefined reference to `vtable for __cxxabiv1::__vmi_class_type_info'
leak_cpp_interior.o:(.eh_frame+0x9b): undefined reference to `__gxx_personality_v0'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Makefile:2045: recipe for target 'leak_cpp_interior' failed
make[5]: *** [leak_cpp_interior] Error 1
make[5]: Leaving directory '/tmp/valgrind-clang/memcheck/tests'

works with:
austin@debian-laptop:/tmp/valgrind-clang$ gcc --version
gcc (Debian 6.2.0-6) 6.2.0 20161010
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

fails with:
austin@debian-laptop:/tmp/valgrind-clang$ clang --version
clang version 3.8.1-12 (tags/RELEASE_381/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

r16070, debian sid.

Reproducible: Always

Steps to Reproduce:
1. ./configure CC=clang CXX=clang
2. make -j8
3. make check
Comment 1 Austin English 2016-10-19 05:39:56 UTC
User error, I had CC=clang / CXX=clang, when it should've been CC=clang CXX=clang++

So unless we want to add a sanity check to configure, this is invalid.