[MacPorts] #38528: clang-3.3 @3.3-r173279 can't link a C++ program with -fsanitize=thread

MacPorts noreply at macports.org
Wed Jul 31 12:08:21 PDT 2013


#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


More information about the macports-tickets mailing list