#38528: clang-3.3 @3.3-r173279 can't link a C++ program with -fsanitize=thread --------------------------------+------------------------ Reporter: andrew.c.morrow@… | Owner: jeremyhu@… Type: defect | Status: closed Priority: Normal | Milestone: Component: ports | Version: 2.1.3 Resolution: wontfix | Keywords: Port: clang-3.3 | --------------------------------+------------------------ Old description:
I'm using clang-3.3 @3.3-r173279 on OS X 10.8.3:
{{{
/opt/local/bin/clang++-mp-3.3 --version clang version 3.3 (trunk 173279) Target: x86_64-apple-darwin12.3.0 Thread model: posix }}}
Given a simple program, I'd like to build it with ThreadSanitizer by passing -fsanitize=thread, but the link step fails:
{{{
cat ./hello_world.cpp #include <cstdlib> #include <iostream>
int main(int argc, char* argv[]) { std::cout << "Hello, World!\n"; return EXIT_SUCCESS; }
/opt/local/bin/clang++-mp-3.3 ./hello_world.cpp -fsanitize=thread -o ./hello_world Undefined symbols for architecture x86_64: "___tsan_func_entry", referenced from: _main in hello_world-RhjEoO.o ___cxx_global_var_init in hello_world-RhjEoO.o __GLOBAL__I_a in hello_world-RhjEoO.o "___tsan_func_exit", referenced from: _main in hello_world-RhjEoO.o ___cxx_global_var_init in hello_world-RhjEoO.o __GLOBAL__I_a in hello_world-RhjEoO.o "___tsan_init", referenced from: anon in hello_world-RhjEoO.o "___tsan_write4", referenced from: _main in hello_world-RhjEoO.o "___tsan_write8", referenced from: _main in hello_world-RhjEoO.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) }}}
Here is a -### dump of the link line:
{{{
/opt/local/bin/clang++-mp-3.3 ./hello_world.cpp -fsanitize=thread -o ./hello_world -### clang version 3.3 (trunk 173279) Target: x86_64-apple-darwin12.3.0 Thread model: posix "/opt/local/libexec/llvm-3.3/bin/clang" "-cc1" "-triple" "x86_64-apple- macosx10.8.0" "-emit-obj" "-mrelax-all" "-disable-free" "-main-file-name" "hello_world.cpp" "-mrelocation-model" "pic" "-pic-level" "2" "-mdisable- fp-elim" "-masm-verbose" "-munwind-tables" "-target-cpu" "core2" "-target-linker-version" "134.9" "-resource-dir" "/opt/local/libexec/llvm-3.3/bin/../lib/clang/3.3" "-fmodule-cache-path" "/var/folders/n4/y_lrzpxd3n99l4frqx4m8llw0000gt/T/clang-module-cache" "-fdeprecated-macro" "-fdebug-compilation-dir" "/Users/andrew/Documents/10gen/dev/src/experiments/hello_world" "-ferror- limit" "19" "-fmessage-length" "167" "-fsanitize=thread" "-stack- protector" "1" "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-10.8.0" "-fobjc-dispatch-method=mixed" "-fobjc-default-synthesize-properties" "-fencode-extended-block-signature" "-fcxx-exceptions" "-fexceptions" "-fdiagnostics-show-option" "-fcolor-diagnostics" "-backend-option" "-vectorize-loops" "-o" "/var/folders/n4/y_lrzpxd3n99l4frqx4m8llw0000gt/T /hello_world-FGj5NL.o" "-x" "c++" "./hello_world.cpp" "/opt/local/libexec/llvm-3.3/bin/ld" "-demangle" "-dynamic" "-arch" "x86_64" "-macosx_version_min" "10.8.0" "-o" "./hello_world" "/var/folders/n4/y_lrzpxd3n99l4frqx4m8llw0000gt/T/hello_world-FGj5NL.o" "-lstdc++" "-lSystem" "/opt/local/libexec/llvm-3.3/bin/../lib/clang/3.3/lib/darwin/libclang_rt.osx.a" }}}
Ideally, clang-3.3 would support ThreadSanitizer out of the box.
New description: I'm using clang-3.3 @3.3-!r173279 on OS X 10.8.3: {{{
/opt/local/bin/clang++-mp-3.3 --version clang version 3.3 (trunk 173279) Target: x86_64-apple-darwin12.3.0 Thread model: posix }}}
Given a simple program, I'd like to build it with ThreadSanitizer by passing -fsanitize=thread, but the link step fails: {{{
cat ./hello_world.cpp #include <cstdlib> #include <iostream>
int main(int argc, char* argv[]) { std::cout << "Hello, World!\n"; return EXIT_SUCCESS; }
/opt/local/bin/clang++-mp-3.3 ./hello_world.cpp -fsanitize=thread -o ./hello_world Undefined symbols for architecture x86_64: "___tsan_func_entry", referenced from: _main in hello_world-RhjEoO.o ___cxx_global_var_init in hello_world-RhjEoO.o __GLOBAL__I_a in hello_world-RhjEoO.o "___tsan_func_exit", referenced from: _main in hello_world-RhjEoO.o ___cxx_global_var_init in hello_world-RhjEoO.o __GLOBAL__I_a in hello_world-RhjEoO.o "___tsan_init", referenced from: anon in hello_world-RhjEoO.o "___tsan_write4", referenced from: _main in hello_world-RhjEoO.o "___tsan_write8", referenced from: _main in hello_world-RhjEoO.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) }}}
Here is a -### dump of the link line: {{{
/opt/local/bin/clang++-mp-3.3 ./hello_world.cpp -fsanitize=thread -o ./hello_world -### clang version 3.3 (trunk 173279) Target: x86_64-apple-darwin12.3.0 Thread model: posix "/opt/local/libexec/llvm-3.3/bin/clang" "-cc1" "-triple" "x86_64-apple- macosx10.8.0" "-emit-obj" "-mrelax-all" "-disable-free" "-main-file-name" "hello_world.cpp" "-mrelocation-model" "pic" "-pic-level" "2" "-mdisable- fp-elim" "-masm-verbose" "-munwind-tables" "-target-cpu" "core2" "-target- linker-version" "134.9" "-resource-dir" "/opt/local/libexec/llvm-3.3/bin/../lib/clang/3.3" "-fmodule-cache-path" "/var/folders/n4/y_lrzpxd3n99l4frqx4m8llw0000gt/T/clang-module-cache" "-fdeprecated-macro" "-fdebug-compilation-dir" "/Users/andrew/Documents/10gen/dev/src/experiments/hello_world" "-ferror- limit" "19" "-fmessage-length" "167" "-fsanitize=thread" "-stack- protector" "1" "-mstackrealign" "-fblocks" "-fobjc-runtime=macosx-10.8.0" "-fobjc-dispatch-method=mixed" "-fobjc-default-synthesize-properties" "-fencode-extended-block-signature" "-fcxx-exceptions" "-fexceptions" "-fdiagnostics-show-option" "-fcolor-diagnostics" "-backend-option" "-vectorize-loops" "-o" "/var/folders/n4/y_lrzpxd3n99l4frqx4m8llw0000gt/T /hello_world-FGj5NL.o" "-x" "c++" "./hello_world.cpp" "/opt/local/libexec/llvm-3.3/bin/ld" "-demangle" "-dynamic" "-arch" "x86_64" "-macosx_version_min" "10.8.0" "-o" "./hello_world" "/var/folders/n4/y_lrzpxd3n99l4frqx4m8llw0000gt/T/hello_world-FGj5NL.o" "-lstdc++" "-lSystem" "/opt/local/libexec/llvm-3.3/bin/../lib/clang/3.3/lib/darwin/libclang_rt.osx.a" }}}
Ideally, clang-3.3 would support ThreadSanitizer out of the box. -- Comment (by larryv@…): Replying to [comment:6 egall@…]:
Replying to [comment:5 jeremyhu@…]:
tsan isn't supported on darwin
so shouldn't the flag just be ignored then when the user tries to use it?
It should probably throw an error, really. But that’s for upstream to fix. -- Ticket URL: <https://trac.macports.org/ticket/38528#comment:7> MacPorts <http://www.macports.org/> Ports system for OS X