Since libtsan.a already has them:
ld.lld: error: duplicate symbol: RunningOnValgrind
>>> defined at dynamic_annotations.cc:99 (../contrib/abseil-cpp/absl/base/dynamic_annotations.cc:99)
>>> dynamic_annotations.cc.o:(RunningOnValgrind) in archive contrib/abseil-cpp/absl/base/libabsl_dynamic_annotations.a
>>> defined at tsan_interface_ann.o:(.text+0x15A0) in archive /usr/lib/gcc/x86_64-linux-gnu/10/libtsan.a
ld.lld: error: duplicate symbol: AnnotateMemoryIsInitialized
>>> defined at dynamic_annotations.cc:75 (../contrib/abseil-cpp/absl/base/dynamic_annotations.cc:75)
>>> dynamic_annotations.cc.o:(AnnotateMemoryIsInitialized) in archive contrib/abseil-cpp/absl/base/libabsl_dynamic_annotations.a
>>> defined at tsan_interface_ann.o:(.text+0x1600) in archive /usr/lib/gcc/x86_64-linux-gnu/10/libtsan.a
ld.lld: error: duplicate symbol: AnnotateMemoryIsUnt show initialized
>>> defined at dynamic_annotations.cc:75 (../contrib/abseil-cpp/absl/base/dynamic_annotations.cc:75)
>>> dynamic_annotations.cc.o:(AnnotateMemoryIsUninitialized) in archive contrib/abseil-cpp/absl/base/libabsl_dynamic_annotations.a
>>> defined at tsan_interface_ann.o:(.text+0x1610) in archive /usr/lib/gcc/x86_64-linux-gnu/10/libtsan.a
...
And after this patch I successfully managed to build with thread
sanitizer under gcc.
Since libtsan.a provides new/delete overrides too:
ld.lld: error: duplicate symbol: operator new[](unsigned long, std::nothrow_t const&)
>>> defined at new_delete.cpp:64 (../src/Common/new_delete.cpp:64)
>>> new_delete.cpp.o:(operator new[](unsigned long, std::nothrow_t const&)) in archive src/libclickhouse_new_delete.a
>>> defined at tsan_new_delete.o:(.text+0xE0) in archive /usr/lib/gcc/x86_64-linux-gnu/10/libtsan.a
v2: Fix order of src vs programs for clickhouse_new_delete target detection