<div dir="ltr">If I type "ninja" I get this: <div><br></div><div><div>Make Error at /usr/local/google/kcc/llvm_cmake/projects/compiler-rt/lib/tsan/libcxx_tsan/src/libcxx_tsan-stamp/libcxx_tsan-build.cmake:17 (message):</div>
<div> Command failed: 1</div><div><br></div><div> '/home/kcc/cmake/bin/cmake' '--build' '/usr/local/google/kcc/llvm_cmake/projects/compiler-rt/lib/tsan/libcxx_tsan/src/libcxx_tsan-build' '--config' '.'</div>
</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, May 14, 2014 at 2:30 AM, Alexey Samsonov <span dir="ltr"><<a href="mailto:samsonov@google.com" target="_blank">samsonov@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: samsonov<br>
Date: Tue May 13 17:30:16 2014<br>
New Revision: 208737<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=208737&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=208737&view=rev</a><br>
Log:<br>
[TSan] Build TSan-instrumented version of libcxx and use it in lit tests.<br>
<br>
TSan can produce false positives in code that uses C++11 threading,<br>
as it doesn't see synchronization inside standard library. See<br>
<a href="http://lists.cs.uiuc.edu/pipermail/cfe-dev/2014-February/035408.html" target="_blank">http://lists.cs.uiuc.edu/pipermail/cfe-dev/2014-February/035408.html</a><br>
for an example of such case.<br>
<br>
We may build custom TSan-instrumented version libcxx to fight with that.<br>
This change adds build rules for libcxx_tsan and integrates it into<br>
testing infrastructure.<br>
<br>
Added:<br>
compiler-rt/trunk/test/tsan/libcxx/<br>
compiler-rt/trunk/test/tsan/libcxx/lit.local.cfg<br>
compiler-rt/trunk/test/tsan/libcxx/std_shared_ptr.cc<br>
Modified:<br>
compiler-rt/trunk/lib/tsan/CMakeLists.txt<br>
compiler-rt/trunk/test/<a href="http://lit.common.configured.in" target="_blank">lit.common.configured.in</a><br>
compiler-rt/trunk/test/tsan/CMakeLists.txt<br>
compiler-rt/trunk/test/tsan/lit.cfg<br>
compiler-rt/trunk/test/tsan/<a href="http://lit.site.cfg.in" target="_blank">lit.site.cfg.in</a><br>
<br>
Modified: compiler-rt/trunk/lib/tsan/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/CMakeLists.txt?rev=208737&r1=208736&r2=208737&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/CMakeLists.txt?rev=208737&r1=208736&r2=208737&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/tsan/CMakeLists.txt (original)<br>
+++ compiler-rt/trunk/lib/tsan/CMakeLists.txt Tue May 13 17:30:16 2014<br>
@@ -75,6 +75,7 @@ set(TSAN_HEADERS<br>
rtl/tsan_update_shadow_word_inl.h<br>
rtl/tsan_vector.h)<br>
<br>
+set(TSAN_RUNTIME_LIBRARIES)<br>
add_custom_target(tsan)<br>
# TSan is currently supported on 64-bit Linux only.<br>
if(CAN_TARGET_x86_64 AND UNIX AND NOT APPLE)<br>
@@ -90,6 +91,7 @@ if(CAN_TARGET_x86_64 AND UNIX AND NOT AP<br>
$<TARGET_OBJECTS:RTSanitizerCommonLibc.${arch}><br>
CFLAGS ${TSAN_RTL_CFLAGS}<br>
DEFS ${TSAN_COMMON_DEFINITIONS})<br>
+ list(APPEND TSAN_RUNTIME_LIBRARIES clang_rt.tsan-${arch})<br>
add_sanitizer_rt_symbols(clang_rt.tsan-${arch} rtl/tsan.syms.extra)<br>
add_dependencies(tsan clang_rt.tsan-${arch}<br>
clang_rt.tsan-${arch}-symbols)<br>
@@ -97,6 +99,14 @@ endif()<br>
<br>
add_dependencies(compiler-rt tsan)<br>
<br>
+# Build libcxx instrumented with TSan.<br>
+if(COMPILER_RT_HAS_LIBCXX_SOURCES)<br>
+ set(LIBCXX_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/libcxx_tsan)<br>
+ add_custom_libcxx(libcxx_tsan ${LIBCXX_PREFIX}<br>
+ DEPS ${TSAN_RUNTIME_LIBRARIES}<br>
+ CFLAGS -fsanitize=thread)<br>
+endif()<br>
+<br>
if(COMPILER_RT_INCLUDE_TESTS)<br>
add_subdirectory(tests)<br>
endif()<br>
<br>
Modified: compiler-rt/trunk/test/<a href="http://lit.common.configured.in" target="_blank">lit.common.configured.in</a><br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/lit.common.configured.in?rev=208737&r1=208736&r2=208737&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/lit.common.configured.in?rev=208737&r1=208736&r2=208737&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/test/<a href="http://lit.common.configured.in" target="_blank">lit.common.configured.in</a> (original)<br>
+++ compiler-rt/trunk/test/<a href="http://lit.common.configured.in" target="_blank">lit.common.configured.in</a> Tue May 13 17:30:16 2014<br>
@@ -16,6 +16,7 @@ set_default("llvm_build_mode", "@LLVM_BU<br>
set_default("llvm_src_root", "@LLVM_SOURCE_DIR@")<br>
set_default("llvm_obj_root", "@LLVM_BINARY_DIR@")<br>
set_default("compiler_rt_src_root", "@COMPILER_RT_SOURCE_DIR@")<br>
+set_default("compiler_rt_obj_root", "@COMPILER_RT_BINARY_DIR@")<br>
set_default("llvm_tools_dir", "@LLVM_TOOLS_DIR@")<br>
set_default("clang", "@COMPILER_RT_TEST_COMPILER@")<br>
set_default("compiler_id", "@COMPILER_RT_TEST_COMPILER_ID@")<br>
<br>
Modified: compiler-rt/trunk/test/tsan/CMakeLists.txt<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/CMakeLists.txt?rev=208737&r1=208736&r2=208737&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/CMakeLists.txt?rev=208737&r1=208736&r2=208737&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/test/tsan/CMakeLists.txt (original)<br>
+++ compiler-rt/trunk/test/tsan/CMakeLists.txt Tue May 13 17:30:16 2014<br>
@@ -1,11 +1,17 @@<br>
-configure_lit_site_cfg(<br>
- ${CMAKE_CURRENT_SOURCE_DIR}/<a href="http://lit.site.cfg.in" target="_blank">lit.site.cfg.in</a><br>
- ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg)<br>
-<br>
set(TSAN_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS})<br>
if(NOT COMPILER_RT_STANDALONE_BUILD)<br>
list(APPEND TSAN_TEST_DEPS tsan)<br>
endif()<br>
+if(COMPILER_RT_HAS_LIBCXX_SOURCES)<br>
+ list(APPEND TSAN_TEST_DEPS libcxx_tsan)<br>
+ set(TSAN_HAS_LIBCXX True)<br>
+else()<br>
+ set(TSAN_HAS_LIBCXX False)<br>
+endif()<br>
+<br>
+configure_lit_site_cfg(<br>
+ ${CMAKE_CURRENT_SOURCE_DIR}/<a href="http://lit.site.cfg.in" target="_blank">lit.site.cfg.in</a><br>
+ ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg)<br>
<br>
if(COMPILER_RT_INCLUDE_TESTS)<br>
configure_lit_site_cfg(<br>
<br>
Added: compiler-rt/trunk/test/tsan/libcxx/lit.local.cfg<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/libcxx/lit.local.cfg?rev=208737&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/libcxx/lit.local.cfg?rev=208737&view=auto</a><br>
==============================================================================<br>
--- compiler-rt/trunk/test/tsan/libcxx/lit.local.cfg (added)<br>
+++ compiler-rt/trunk/test/tsan/libcxx/lit.local.cfg Tue May 13 17:30:16 2014<br>
@@ -0,0 +1,10 @@<br>
+def getRoot(config):<br>
+ if not config.parent:<br>
+ return config<br>
+ return getRoot(config.parent)<br>
+<br>
+root = getRoot(config)<br>
+<br>
+if not root.has_libcxx:<br>
+ config.unsupported = True<br>
+<br>
<br>
Added: compiler-rt/trunk/test/tsan/libcxx/std_shared_ptr.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/libcxx/std_shared_ptr.cc?rev=208737&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/libcxx/std_shared_ptr.cc?rev=208737&view=auto</a><br>
==============================================================================<br>
--- compiler-rt/trunk/test/tsan/libcxx/std_shared_ptr.cc (added)<br>
+++ compiler-rt/trunk/test/tsan/libcxx/std_shared_ptr.cc Tue May 13 17:30:16 2014<br>
@@ -0,0 +1,24 @@<br>
+// RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s<br>
+#include <stdio.h><br>
+#include <memory><br>
+#include <thread><br>
+<br>
+int main() {<br>
+ int v1 = 0;<br>
+ int v2 = 0;<br>
+ std::thread t1;<br>
+ std::thread t2;<br>
+<br>
+ {<br>
+ auto thingy = std::make_shared<int>(42);<br>
+ t1 = std::thread([thingy, &v1] { v1 = *thingy; });<br>
+ t2 = std::thread([thingy, &v2] { v2 = *thingy; });<br>
+ }<br>
+<br>
+ t1.join();<br>
+ t2.join();<br>
+ printf("%d %d\n", v1, v2);<br>
+ // CHECK-NOT: ThreadSanitizer: data race<br>
+ // CHECK: 42 42<br>
+ return 0;<br>
+}<br>
<br>
Modified: compiler-rt/trunk/test/tsan/lit.cfg<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/lit.cfg?rev=208737&r1=208736&r2=208737&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/lit.cfg?rev=208737&r1=208736&r2=208737&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/test/tsan/lit.cfg (original)<br>
+++ compiler-rt/trunk/test/tsan/lit.cfg Tue May 13 17:30:16 2014<br>
@@ -31,6 +31,18 @@ clang_tsan_cflags = ["-fsanitize=thread"<br>
"-ldl",<br>
"-m64"]<br>
clang_tsan_cxxflags = config.cxx_mode_flags + clang_tsan_cflags<br>
+# Add additional flags if we're using instrumented libc++.<br>
+if config.has_libcxx:<br>
+ # FIXME: Dehardcode this path somehow.<br>
+ libcxx_path = os.path.join(config.compiler_rt_obj_root, "lib",<br>
+ "tsan", "libcxx_tsan")<br>
+ libcxx_incdir = os.path.join(libcxx_path, "include", "c++", "v1")<br>
+ libcxx_libdir = os.path.join(libcxx_path, "lib")<br>
+ libcxx_so = os.path.join(libcxx_libdir, "libc++.so")<br>
+ clang_tsan_cxxflags += ["-std=c++11",<br>
+ "-I%s" % libcxx_incdir,<br>
+ libcxx_so,<br>
+ "-Wl,-rpath=%s" % libcxx_libdir]<br>
<br>
def build_invocation(compile_flags):<br>
return " " + " ".join([config.clang] + compile_flags) + " "<br>
<br>
Modified: compiler-rt/trunk/test/tsan/<a href="http://lit.site.cfg.in" target="_blank">lit.site.cfg.in</a><br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/lit.site.cfg.in?rev=208737&r1=208736&r2=208737&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/tsan/lit.site.cfg.in?rev=208737&r1=208736&r2=208737&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/test/tsan/<a href="http://lit.site.cfg.in" target="_blank">lit.site.cfg.in</a> (original)<br>
+++ compiler-rt/trunk/test/tsan/<a href="http://lit.site.cfg.in" target="_blank">lit.site.cfg.in</a> Tue May 13 17:30:16 2014<br>
@@ -1,6 +1,8 @@<br>
## Autogenerated by LLVM/Clang configuration.<br>
# Do not edit!<br>
<br>
+config.has_libcxx = @TSAN_HAS_LIBCXX@<br>
+<br>
# Load common config for all compiler-rt lit tests.<br>
lit_config.load_config(config, "@COMPILER_RT_BINARY_DIR@/test/lit.common.configured")<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>