[LLVMbugs] [Bug 22690] New: Add option to add -lc++abi flag to TSan lit tests

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Tue Feb 24 22:50:19 PST 2015


http://llvm.org/bugs/show_bug.cgi?id=22690

            Bug ID: 22690
           Summary: Add option to add -lc++abi flag to TSan lit tests
           Product: compiler-rt
           Version: unspecified
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: compiler-rt
          Assignee: unassignedbugs at nondot.org
          Reporter: will at wmitchell.net
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified

When using libc++ with libc++abi on Linux (Debian Testing for me) it becomes
necessary to manually link to libc++abi by adding -lc++abi when linking against
libc++. (Though some changes may happen regarding this, see
http://lists.cs.uiuc.edu/pipermail/cfe-dev/2015-February/041674.html).

The problem is I see 128 test case failures all within ThreadSanitizer. All of
the failures look like:

FAIL: ThreadSanitizer :: write_in_reader_lock.cc (182 of 268)
******************** TEST 'ThreadSanitizer :: write_in_reader_lock.cc' FAILED
********************
Script:
--
/home/will/Repos/llvm_projects/build/./bin/clang --driver-mode=g++
-fsanitize=thread -Wall -m64 -gline-tables-only -std=c++11
-I/home/will/Repos/llvm_projects/build/projects/compiler-rt/lib/tsan/libcxx_tsan/include/c++/v1
/home/will/Repos/llvm_projects/build/projects/compiler-rt/lib/tsan/libcxx_tsan/lib/libc++.so
-Wl,-rpath=/home/will/Repos/llvm_projects/build/projects/compiler-rt/lib/tsan/libcxx_tsan/lib
-O1
/home/will/Repos/llvm_projects/compiler-rt/test/tsan/write_in_reader_lock.cc -o
/home/will/Repos/llvm_projects/build/projects/compiler-rt/test/tsan/Output/write_in_reader_lock.cc.tmp
&&
/home/will/Repos/llvm_projects/llvm/projects/compiler-rt/test/tsan/deflake.bash
/home/will/Repos/llvm_projects/build/projects/compiler-rt/test/tsan/Output/write_in_reader_lock.cc.tmp
| FileCheck
/home/will/Repos/llvm_projects/compiler-rt/test/tsan/write_in_reader_lock.cc
--
Exit Code: 1

Command Output (stderr):
--
/home/will/Repos/llvm_projects/build/projects/compiler-rt/lib/tsan/libcxx_tsan/lib/libc++.so:
undefined reference to `std::bad_alloc::bad_alloc()'
/home/will/Repos/llvm_projects/build/projects/compiler-rt/lib/tsan/libcxx_tsan/lib/libc++.so:
undefined reference to `__cxa_current_primary_exception'
/home/will/Repos/llvm_projects/build/projects/compiler-rt/lib/tsan/libcxx_tsan/lib/libc++.so:
undefined reference to `__cxa_uncaught_exception'
/home/will/Repos/llvm_projects/build/projects/compiler-rt/lib/tsan/libcxx_tsan/lib/libc++.so:
undefined reference to `__cxa_increment_exception_refcount'
/home/will/Repos/llvm_projects/build/projects/compiler-rt/lib/tsan/libcxx_tsan/lib/libc++.so:
undefined reference to `std::bad_cast::bad_cast()'
/home/will/Repos/llvm_projects/build/projects/compiler-rt/lib/tsan/libcxx_tsan/lib/libc++.so:
undefined reference to `__cxa_decrement_exception_refcount'
/home/will/Repos/llvm_projects/build/projects/compiler-rt/lib/tsan/libcxx_tsan/lib/libc++.so:
undefined reference to `__cxa_rethrow_primary_exception'
clang-3.7: error: linker command failed with exit code 1 (use -v to see
invocation)

--

These are all because libc++abi isn't being linked into the TSan test cases.


I have checked out the git repos of clang, clang-tools-extra, compiler-rt,
libcxx, libcxxabi, lldb, and llvm. Appropriate symlinks are set up to build
everything with cmake, with libcxx, libcxxabi, and compiler-rt in particular
symlinked out of llvm/projects.

I'm configuring cmake as:
CC=clang CXX=clang++ cmake ../llvm -G Ninja -DCMAKE_BUILD_TYPE=Release
-DLIBCXX_CXX_ABI=libcxxabi
-DLIBCXX_LIBCXXABI_INCLUDE_PATHS=../libcxxabi/include

and building by:
ninja && ninja check-all

I have verified that adding -lc++abi fixes these errors by applying the
following patch:

diff --git a/test/lit.common.cfg b/test/lit.common.cfg
index 0a55186..1c76ccf 100644
--- a/test/lit.common.cfg
+++ b/test/lit.common.cfg
@@ -22,7 +22,7 @@ if (not compiler_path) or (not
os.path.exists(compiler_path)):
 compiler_id = getattr(config, 'compiler_id', None)
 if compiler_id == "Clang":
   if platform.system() != 'Windows':
-    config.cxx_mode_flags = ["--driver-mode=g++"]
+    config.cxx_mode_flags = ["--driver-mode=g++ -lc++abi"]
   else:
     config.cxx_mode_flags = []
   # We assume that sanitizers should provide good enough error

Of course this patch is completely wrong as it is the wrong place to add the
flag, but it was the first obvious place I saw that would propogate through to
building the tests to verify the problem/solution.

It seems to me the correct fix is to add a CMake option of something like
COMPILER_RT_LINK_LIBCXXABI, but I don't understand lit well enough to provide a
patch. It might also be that this option should be in LLVM's CMake, but as far
as I can see only TSan currently runs tests that use the standard library.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20150225/3edbee84/attachment.html>


More information about the llvm-bugs mailing list