[llvm-dev] check-tsan fails
Wink Saville via llvm-dev
llvm-dev at lists.llvm.org
Sun May 5 12:18:37 PDT 2019
Executive summary:
The `ninja check-tsan` causes 5 failures after building
llvm;clang;compiler-rt. I looked
at one of the failures, memcpy_race.cc, and the problem appears to be
that memcpy_race.cc
expects the stack to have only 2 stack frame elements when the race is
detected. But the
clang that I built causes tsan to have 3 stack frames and thus the failure(s).
Why is the clang I built have 3 stack frame elements when detecting a
race using tsan?
I'm on an Arch Linux machine:
$ uname -a
Linux wink-desktop 5.0.10-arch1-1-ARCH #1 SMP PREEMPT Sat Apr 27
20:06:45 UTC 2019 x86_64 GNU/Linux
With gcc version:
$ gcc --version
gcc (GCC) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
And I compiling master:
$ git log -1
commit 0460a3629b2564d9b34702ba05ab3f461533eca9 (HEAD -> master,
upstream/master, origin/master, origin/HEAD)
Author: Andrea Di Biagio <Andrea_DiBiagio at sn.scee.net>
Date: Sun May 5 16:07:27 2019 +0000
[MCA] Notify event listeners when instructions transition to the
Pending state. NFCI
llvm-svn: 359983
Configured with cmake:
$ cmake ../llvm -G Ninja
'-DLLVM_ENABLE_PROJECTS=clang;lld;compiler-rt'
-DCMAKE_INSTALL_PREFIX=/home/wink/local-llvm-clang-compiler-rt-master-0460a3629b2-use-ld-bfd
-DCMAKE_BUILD_TYPE=Release -DLLVM_USE_LINKER=bfd
-- The C compiler identification is GNU 8.3.0
-- The CXX compiler identification is GNU 8.3.0
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- clang project is enabled
-- clang-tools-extra project is disabled
-- compiler-rt project is enabled
-- debuginfo-tests project is disabled
-- libclc project is disabled
-- libcxx project is disabled
-- libcxxabi project is disabled
-- libunwind project is disabled
-- lld project is enabled
-- lldb project is disabled
-- llgo project is disabled
-- openmp project is disabled
-- parallel-libs project is disabled
-- polly project is disabled
-- pstl project is disabled
-- Found Z3: /usr/lib/libz3.so (found suitable version "4.8.4",
minimum required is "4.7.1")
-- Looking for dlfcn.h
-- Looking for dlfcn.h - found
-- Looking for errno.h
-- Looking for errno.h - found
-- Looking for fcntl.h
-- Looking for fcntl.h - found
-- Looking for link.h
-- Looking for link.h - found
-- Looking for malloc/malloc.h
-- Looking for malloc/malloc.h - not found
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for signal.h
-- Looking for signal.h - found
-- Looking for sys/ioctl.h
-- Looking for sys/ioctl.h - found
-- Looking for sys/mman.h
-- Looking for sys/mman.h - found
-- Looking for sys/param.h
-- Looking for sys/param.h - found
-- Looking for sys/resource.h
-- Looking for sys/resource.h - found
-- Looking for sys/stat.h
-- Looking for sys/stat.h - found
-- Looking for sys/time.h
-- Looking for sys/time.h - found
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for termios.h
-- Looking for termios.h - found
-- Looking for unistd.h
-- Looking for unistd.h - found
-- Looking for valgrind/valgrind.h
-- Looking for valgrind/valgrind.h - found
-- Looking for zlib.h
-- Looking for zlib.h - found
-- Looking for fenv.h
-- Looking for fenv.h - found
-- Looking for FE_ALL_EXCEPT
-- Looking for FE_ALL_EXCEPT - found
-- Looking for FE_INEXACT
-- Looking for FE_INEXACT - found
-- Looking for mach/mach.h
-- Looking for mach/mach.h - not found
-- Looking for histedit.h
-- Looking for histedit.h - found
-- Looking for CrashReporterClient.h
-- Looking for CrashReporterClient.h - not found
-- Looking for linux/magic.h
-- Looking for linux/magic.h - found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Looking for pthread_getspecific in pthread
-- Looking for pthread_getspecific in pthread - found
-- Looking for pthread_rwlock_init in pthread
-- Looking for pthread_rwlock_init in pthread - found
-- Looking for pthread_mutex_lock in pthread
-- Looking for pthread_mutex_lock in pthread - found
-- Looking for dlopen in dl
-- Looking for dlopen in dl - found
-- Looking for clock_gettime in rt
-- Looking for clock_gettime in rt - found
-- Looking for pfm_initialize in pfm
-- Looking for pfm_initialize in pfm - not found
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Looking for compress2 in z
-- Looking for compress2 in z - found
-- Looking for el_init in edit
-- Looking for el_init in edit - found
-- Looking for setupterm in terminfo
-- Looking for setupterm in terminfo - not found
-- Looking for setupterm in tinfo
-- Looking for setupterm in tinfo - found
-- Found LibXml2: /usr/lib/libxml2.so (found version "2.9.9")
-- Looking for xar_open in xar
-- Looking for xar_open in xar - not found
-- Looking for arc4random
-- Looking for arc4random - not found
-- Looking for backtrace
-- Looking for backtrace - found
-- backtrace facility detected in default set of libraries
-- Found Backtrace: /usr/include
-- Performing Test C_SUPPORTS_WERROR_UNGUARDED_AVAILABILITY_NEW
-- Performing Test C_SUPPORTS_WERROR_UNGUARDED_AVAILABILITY_NEW - Failed
-- Looking for _Unwind_Backtrace
-- Looking for _Unwind_Backtrace - found
-- Looking for getpagesize
-- Looking for getpagesize - found
-- Looking for sysconf
-- Looking for sysconf - found
-- Looking for getrusage
-- Looking for getrusage - found
-- Looking for setrlimit
-- Looking for setrlimit - found
-- Looking for isatty
-- Looking for isatty - found
-- Looking for futimens
-- Looking for futimens - found
-- Looking for futimes
-- Looking for futimes - found
-- Looking for posix_fallocate
-- Looking for posix_fallocate - found
-- Looking for sigaltstack
-- Looking for sigaltstack - found
-- Looking for lseek64
-- Looking for lseek64 - found
-- Looking for mallctl
-- Looking for mallctl - not found
-- Looking for mallinfo
-- Looking for mallinfo - found
-- Looking for malloc_zone_statistics
-- Looking for malloc_zone_statistics - not found
-- Looking for getrlimit
-- Looking for getrlimit - found
-- Looking for posix_spawn
-- Looking for posix_spawn - found
-- Looking for pread
-- Looking for pread - found
-- Looking for sbrk
-- Looking for sbrk - found
-- Looking for strerror
-- Looking for strerror - found
-- Looking for strerror_r
-- Looking for strerror_r - found
-- Looking for strerror_s
-- Looking for strerror_s - not found
-- Looking for setenv
-- Looking for setenv - found
-- Looking for dlopen
-- Looking for dlopen - found
-- Looking for dladdr
-- Looking for dladdr - not found
-- Performing Test HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC
-- Performing Test HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC - Failed
-- Performing Test HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
-- Performing Test HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC - Success
-- Looking for __GLIBC__
-- Looking for __GLIBC__ - found
-- Looking for sched_getaffinity
-- Looking for sched_getaffinity - found
-- Looking for CPU_COUNT
-- Looking for CPU_COUNT - found
-- Looking for pthread_getname_np
-- Looking for pthread_getname_np - found
-- Looking for pthread_setname_np
-- Looking for pthread_setname_np - found
-- Performing Test HAVE_STD_IS_TRIVIALLY_COPYABLE
-- Performing Test HAVE_STD_IS_TRIVIALLY_COPYABLE - Success
-- Performing Test HAVE_CXX_ATOMICS_WITHOUT_LIB
-- Performing Test HAVE_CXX_ATOMICS_WITHOUT_LIB - Success
-- Performing Test HAVE_CXX_ATOMICS64_WITHOUT_LIB
-- Performing Test HAVE_CXX_ATOMICS64_WITHOUT_LIB - Success
-- Performing Test LLVM_HAS_ATOMICS
-- Performing Test LLVM_HAS_ATOMICS - Success
-- Performing Test SUPPORTS_VARIADIC_MACROS_FLAG
-- Performing Test SUPPORTS_VARIADIC_MACROS_FLAG - Success
-- Performing Test SUPPORTS_GNU_ZERO_VARIADIC_MACRO_ARGUMENTS_FLAG
-- Performing Test SUPPORTS_GNU_ZERO_VARIADIC_MACRO_ARGUMENTS_FLAG - Failed
-- Performing Test HAS_MAYBE_UNINITIALIZED
-- Performing Test HAS_MAYBE_UNINITIALIZED - Success
-- Native target architecture is X86
-- Threads enabled.
-- Doxygen disabled.
-- Go bindings enabled.
-- Could NOT find OCaml (missing: OCAMLFIND OCAML_VERSION OCAML_STDLIB_PATH)
-- Could NOT find OCaml (missing: OCAMLFIND OCAML_VERSION OCAML_STDLIB_PATH)
-- OCaml bindings disabled.
-- Could NOT find Python module pygments
-- Could NOT find Python module pygments.lexers.c_cpp
-- Could NOT find Python module yaml
-- LLVM host triple: x86_64-unknown-linux-gnu
-- LLVM default target triple: x86_64-unknown-linux-gnu
-- Performing Test CXX_SUPPORTS_CUSTOM_LINKER
-- Performing Test CXX_SUPPORTS_CUSTOM_LINKER - Success
-- Performing Test C_SUPPORTS_FPIC
-- Performing Test C_SUPPORTS_FPIC - Success
-- Performing Test CXX_SUPPORTS_FPIC
-- Performing Test CXX_SUPPORTS_FPIC - Success
-- Building with -fPIC
-- Performing Test SUPPORTS_FVISIBILITY_INLINES_HIDDEN_FLAG
-- Performing Test SUPPORTS_FVISIBILITY_INLINES_HIDDEN_FLAG - Success
-- Performing Test C_SUPPORTS_WERROR_DATE_TIME
-- Performing Test C_SUPPORTS_WERROR_DATE_TIME - Success
-- Performing Test CXX_SUPPORTS_WERROR_DATE_TIME
-- Performing Test CXX_SUPPORTS_WERROR_DATE_TIME - Success
-- Performing Test CXX_SUPPORTS_WERROR_UNGUARDED_AVAILABILITY_NEW
-- Performing Test CXX_SUPPORTS_WERROR_UNGUARDED_AVAILABILITY_NEW - Failed
-- Performing Test CXX_SUPPORTS_CXX_STD
-- Performing Test CXX_SUPPORTS_CXX_STD - Success
-- Performing Test CXX_SUPPORTS_MISSING_FIELD_INITIALIZERS_FLAG
-- Performing Test CXX_SUPPORTS_MISSING_FIELD_INITIALIZERS_FLAG - Success
-- Performing Test C_SUPPORTS_IMPLICIT_FALLTHROUGH_FLAG
-- Performing Test C_SUPPORTS_IMPLICIT_FALLTHROUGH_FLAG - Success
-- Performing Test CXX_SUPPORTS_IMPLICIT_FALLTHROUGH_FLAG
-- Performing Test CXX_SUPPORTS_IMPLICIT_FALLTHROUGH_FLAG - Success
-- Performing Test C_SUPPORTS_COVERED_SWITCH_DEFAULT_FLAG
-- Performing Test C_SUPPORTS_COVERED_SWITCH_DEFAULT_FLAG - Failed
-- Performing Test CXX_SUPPORTS_COVERED_SWITCH_DEFAULT_FLAG
-- Performing Test CXX_SUPPORTS_COVERED_SWITCH_DEFAULT_FLAG - Failed
-- Performing Test CXX_SUPPORTS_CLASS_MEMACCESS_FLAG
-- Performing Test CXX_SUPPORTS_CLASS_MEMACCESS_FLAG - Success
-- Performing Test CXX_SUPPORTS_NOEXCEPT_TYPE_FLAG
-- Performing Test CXX_SUPPORTS_NOEXCEPT_TYPE_FLAG - Success
-- Performing Test C_SUPPORTS_DELETE_NON_VIRTUAL_DTOR_FLAG
-- Performing Test C_SUPPORTS_DELETE_NON_VIRTUAL_DTOR_FLAG - Failed
-- Performing Test CXX_SUPPORTS_DELETE_NON_VIRTUAL_DTOR_FLAG
-- Performing Test CXX_SUPPORTS_DELETE_NON_VIRTUAL_DTOR_FLAG - Success
-- Performing Test C_WCOMMENT_ALLOWS_LINE_WRAP
-- Performing Test C_WCOMMENT_ALLOWS_LINE_WRAP - Failed
-- Performing Test C_SUPPORTS_STRING_CONVERSION_FLAG
-- Performing Test C_SUPPORTS_STRING_CONVERSION_FLAG - Failed
-- Performing Test CXX_SUPPORTS_STRING_CONVERSION_FLAG
-- Performing Test CXX_SUPPORTS_STRING_CONVERSION_FLAG - Failed
-- Performing Test LINKER_SUPPORTS_COLOR_DIAGNOSTICS
-- Performing Test LINKER_SUPPORTS_COLOR_DIAGNOSTICS - Failed
-- Performing Test C_SUPPORTS_FNO_FUNCTION_SECTIONS
-- Performing Test C_SUPPORTS_FNO_FUNCTION_SECTIONS - Success
-- Performing Test C_SUPPORTS_FFUNCTION_SECTIONS
-- Performing Test C_SUPPORTS_FFUNCTION_SECTIONS - Success
-- Performing Test CXX_SUPPORTS_FFUNCTION_SECTIONS
-- Performing Test CXX_SUPPORTS_FFUNCTION_SECTIONS - Success
-- Performing Test C_SUPPORTS_FDATA_SECTIONS
-- Performing Test C_SUPPORTS_FDATA_SECTIONS - Success
-- Performing Test CXX_SUPPORTS_FDATA_SECTIONS
-- Performing Test CXX_SUPPORTS_FDATA_SECTIONS - Success
-- Looking for os_signpost_interval_begin
-- Looking for os_signpost_interval_begin - not found
-- Found PythonInterp: /usr/bin/python2.7 (found version "2.7.16")
-- Constructing LLVMBuild project information
-- Found Git: /usr/bin/git (found version "2.21.0")
-- Linker detection: GNU ld
-- Targeting AArch64
-- Targeting AMDGPU
-- Targeting ARM
-- Targeting BPF
-- Targeting Hexagon
-- Targeting Lanai
-- Targeting Mips
-- Targeting MSP430
-- Targeting NVPTX
-- Targeting PowerPC
-- Targeting Sparc
-- Targeting SystemZ
-- Targeting WebAssembly
-- Targeting X86
-- Targeting XCore
-- Looking for unwind.h
CMake Warning (dev) at
/usr/share/cmake-3.14/Modules/CheckIncludeFile.cmake:80 (message):
Policy CMP0075 is not set: Include file check macros honor
CMAKE_REQUIRED_LIBRARIES. Run "cmake --help-policy CMP0075" for policy
details. Use the cmake_policy command to set the policy and suppress this
warning.
CMAKE_REQUIRED_LIBRARIES is set to:
m
For compatibility with CMake 3.11 and below this check is ignoring it.
Call Stack (most recent call first):
/home/wink/prgs/llvm/llvm-project/compiler-rt/cmake/base-config-ix.cmake:9
(check_include_file)
/home/wink/prgs/llvm/llvm-project/compiler-rt/CMakeLists.txt:27 (include)
This warning is for project developers. Use -Wno-dev to suppress it.
-- Looking for unwind.h - found
-- Looking for rpc/xdr.h
-- Looking for rpc/xdr.h - not found
CMake Warning (dev) at
/home/wink/prgs/llvm/llvm-project/compiler-rt/CMakeLists.txt:64 (set):
implicitly converting 'BOOLEAN' to 'STRING' type.
This warning is for project developers. Use -Wno-dev to suppress it.
CMake Warning (dev) at
/home/wink/prgs/llvm/llvm-project/compiler-rt/CMakeLists.txt:67 (set):
implicitly converting 'BOOLEAN' to 'STRING' type.
This warning is for project developers. Use -Wno-dev to suppress it.
-- Looking for fopen in c
-- Looking for fopen in c - found
-- Looking for __gcc_personality_v0 in gcc_s
-- Looking for __gcc_personality_v0 in gcc_s - found
-- Performing Test COMPILER_RT_HAS_NODEFAULTLIBS_FLAG
-- Performing Test COMPILER_RT_HAS_NODEFAULTLIBS_FLAG - Success
-- Performing Test COMPILER_RT_HAS_FFREESTANDING_FLAG
-- Performing Test COMPILER_RT_HAS_FFREESTANDING_FLAG - Success
-- Performing Test COMPILER_RT_HAS_FPIC_FLAG
-- Performing Test COMPILER_RT_HAS_FPIC_FLAG - Success
-- Performing Test COMPILER_RT_HAS_FPIE_FLAG
-- Performing Test COMPILER_RT_HAS_FPIE_FLAG - Success
-- Performing Test COMPILER_RT_HAS_FNO_BUILTIN_FLAG
-- Performing Test COMPILER_RT_HAS_FNO_BUILTIN_FLAG - Success
-- Performing Test COMPILER_RT_HAS_FNO_EXCEPTIONS_FLAG
-- Performing Test COMPILER_RT_HAS_FNO_EXCEPTIONS_FLAG - Success
-- Performing Test COMPILER_RT_HAS_FOMIT_FRAME_POINTER_FLAG
-- Performing Test COMPILER_RT_HAS_FOMIT_FRAME_POINTER_FLAG - Success
-- Performing Test COMPILER_RT_HAS_FUNWIND_TABLES_FLAG
-- Performing Test COMPILER_RT_HAS_FUNWIND_TABLES_FLAG - Success
-- Performing Test COMPILER_RT_HAS_FNO_STACK_PROTECTOR_FLAG
-- Performing Test COMPILER_RT_HAS_FNO_STACK_PROTECTOR_FLAG - Success
-- Performing Test COMPILER_RT_HAS_FNO_SANITIZE_SAFE_STACK_FLAG
-- Performing Test COMPILER_RT_HAS_FNO_SANITIZE_SAFE_STACK_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_FVISIBILITY_HIDDEN_FLAG
-- Performing Test COMPILER_RT_HAS_FVISIBILITY_HIDDEN_FLAG - Success
-- Performing Test COMPILER_RT_HAS_FRTTI_FLAG
-- Performing Test COMPILER_RT_HAS_FRTTI_FLAG - Success
-- Performing Test COMPILER_RT_HAS_FNO_RTTI_FLAG
-- Performing Test COMPILER_RT_HAS_FNO_RTTI_FLAG - Success
-- Performing Test COMPILER_RT_HAS_FNO_FUNCTION_SECTIONS_FLAG
-- Performing Test COMPILER_RT_HAS_FNO_FUNCTION_SECTIONS_FLAG - Success
-- Performing Test COMPILER_RT_HAS_STD_CXX11_FLAG
-- Performing Test COMPILER_RT_HAS_STD_CXX11_FLAG - Success
-- Performing Test COMPILER_RT_HAS_FTLS_MODEL_INITIAL_EXEC
-- Performing Test COMPILER_RT_HAS_FTLS_MODEL_INITIAL_EXEC - Success
-- Performing Test COMPILER_RT_HAS_FNO_LTO_FLAG
-- Performing Test COMPILER_RT_HAS_FNO_LTO_FLAG - Success
-- Performing Test COMPILER_RT_HAS_MSSE3_FLAG
-- Performing Test COMPILER_RT_HAS_MSSE3_FLAG - Success
-- Performing Test COMPILER_RT_HAS_MSSE4_2_FLAG
-- Performing Test COMPILER_RT_HAS_MSSE4_2_FLAG - Success
-- Performing Test COMPILER_RT_HAS_SYSROOT_FLAG
-- Performing Test COMPILER_RT_HAS_SYSROOT_FLAG - Success
-- Performing Test COMPILER_RT_HAS_MCRC_FLAG
-- Performing Test COMPILER_RT_HAS_MCRC_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_FVISIBILITY_INLINES_HIDDEN_FLAG
-- Performing Test COMPILER_RT_HAS_FVISIBILITY_INLINES_HIDDEN_FLAG - Success
-- Performing Test COMPILER_RT_HAS_GR_FLAG
-- Performing Test COMPILER_RT_HAS_GR_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_GS_FLAG
-- Performing Test COMPILER_RT_HAS_GS_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_MT_FLAG
-- Performing Test COMPILER_RT_HAS_MT_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_Oy_FLAG
-- Performing Test COMPILER_RT_HAS_Oy_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_GLINE_TABLES_ONLY_FLAG
-- Performing Test COMPILER_RT_HAS_GLINE_TABLES_ONLY_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_G_FLAG
-- Performing Test COMPILER_RT_HAS_G_FLAG - Success
-- Performing Test COMPILER_RT_HAS_Zi_FLAG
-- Performing Test COMPILER_RT_HAS_Zi_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_WALL_FLAG
-- Performing Test COMPILER_RT_HAS_WALL_FLAG - Success
-- Performing Test COMPILER_RT_HAS_WERROR_FLAG
-- Performing Test COMPILER_RT_HAS_WERROR_FLAG - Success
-- Performing Test COMPILER_RT_HAS_WFRAME_LARGER_THAN_FLAG
-- Performing Test COMPILER_RT_HAS_WFRAME_LARGER_THAN_FLAG - Success
-- Performing Test COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG
-- Performing Test COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_WC99_EXTENSIONS_FLAG
-- Performing Test COMPILER_RT_HAS_WC99_EXTENSIONS_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_WGNU_FLAG
-- Performing Test COMPILER_RT_HAS_WGNU_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_WNON_VIRTUAL_DTOR_FLAG
-- Performing Test COMPILER_RT_HAS_WNON_VIRTUAL_DTOR_FLAG - Success
-- Performing Test COMPILER_RT_HAS_WVARIADIC_MACROS_FLAG
-- Performing Test COMPILER_RT_HAS_WVARIADIC_MACROS_FLAG - Success
-- Performing Test COMPILER_RT_HAS_WUNUSED_PARAMETER_FLAG
-- Performing Test COMPILER_RT_HAS_WUNUSED_PARAMETER_FLAG - Success
-- Performing Test COMPILER_RT_HAS_WCOVERED_SWITCH_DEFAULT_FLAG
-- Performing Test COMPILER_RT_HAS_WCOVERED_SWITCH_DEFAULT_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_WNO_PEDANTIC
-- Performing Test COMPILER_RT_HAS_WNO_PEDANTIC - Success
-- Performing Test COMPILER_RT_HAS_W4_FLAG
-- Performing Test COMPILER_RT_HAS_W4_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_WX_FLAG
-- Performing Test COMPILER_RT_HAS_WX_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_WD4146_FLAG
-- Performing Test COMPILER_RT_HAS_WD4146_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_WD4291_FLAG
-- Performing Test COMPILER_RT_HAS_WD4291_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_WD4221_FLAG
-- Performing Test COMPILER_RT_HAS_WD4221_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_WD4391_FLAG
-- Performing Test COMPILER_RT_HAS_WD4391_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_WD4722_FLAG
-- Performing Test COMPILER_RT_HAS_WD4722_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_WD4800_FLAG
-- Performing Test COMPILER_RT_HAS_WD4800_FLAG - Failed
-- Looking for __func__
-- Looking for __func__ - found
-- Looking for dlopen in dl
-- Looking for dlopen in dl - found
-- Looking for shm_open in rt
-- Looking for shm_open in rt - found
-- Looking for pow in m
-- Looking for pow in m - found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Looking for backtrace in execinfo
-- Looking for backtrace in execinfo - not found
-- Looking for setupterm in terminfo
-- Looking for setupterm in terminfo - not found
-- Looking for setupterm in tinfo
-- Looking for setupterm in tinfo - found
-- Looking for __cxa_throw in c++
-- Looking for __cxa_throw in c++ - not found
-- Looking for __cxa_throw in stdc++
-- Looking for __cxa_throw in stdc++ - found
-- Performing Test COMPILER_RT_HAS_Z_TEXT
-- Performing Test COMPILER_RT_HAS_Z_TEXT - Success
-- Looking for __i386__
-- Looking for __i386__ - not found
-- Compiler-RT supported architectures: x86_64
-- Performing Test COMPILER_RT_HAS_STD_C11_FLAG
-- Performing Test COMPILER_RT_HAS_STD_C11_FLAG - Success
-- Performing Test COMPILER_RT_HAS_VISIBILITY_HIDDEN_FLAG
-- Performing Test COMPILER_RT_HAS_VISIBILITY_HIDDEN_FLAG - Success
-- Performing Test COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG
-- Performing Test COMPILER_RT_HAS_OMIT_FRAME_POINTER_FLAG - Success
-- Performing Test COMPILER_RT_HAS_FREESTANDING_FLAG
-- Performing Test COMPILER_RT_HAS_FREESTANDING_FLAG - Success
-- Performing Test COMPILER_RT_HAS_XRAY_COMPILER_FLAG
-- Performing Test COMPILER_RT_HAS_XRAY_COMPILER_FLAG - Failed
-- Performing Test COMPILER_RT_HAS_ATOMIC_KEYWORD
-- Performing Test COMPILER_RT_HAS_ATOMIC_KEYWORD - Success
-- Builtin supported architectures: x86_64
-- Performing Test COMPILER_RT_TARGET_HAS_ATOMICS
-- Performing Test COMPILER_RT_TARGET_HAS_ATOMICS - Success
-- Performing Test COMPILER_RT_TARGET_HAS_FCNTL_LCK
-- Performing Test COMPILER_RT_TARGET_HAS_FCNTL_LCK - Success
-- Performing Test COMPILER_RT_TARGET_HAS_UNAME
-- Performing Test COMPILER_RT_TARGET_HAS_UNAME - Success
-- Performing Test HAS_THREAD_LOCAL
-- Performing Test HAS_THREAD_LOCAL - Success
-- Linker detection: GNU ld
-- Linker detection: GNU ld
-- Builtin supported architectures: x86_64
-- Generated Sanitizer SUPPORTED_TOOLS list on "Linux" is
"asan;lsan;msan;tsan;ubsan"
-- sanitizer_common tests on "Linux" will run against
"asan;lsan;msan;tsan;ubsan"
-- check-shadowcallstack does nothing.
-- Looking for sys/resource.h
-- Looking for sys/resource.h - found
-- Clang version: 9.0.0
-- Performing Test CXX_SUPPORTS_NO_NESTED_ANON_TYPES_FLAG
-- Performing Test CXX_SUPPORTS_NO_NESTED_ANON_TYPES_FLAG - Failed
-- LLD version: 9.0.0
-- LLVM FileCheck Found: /usr/bin/FileCheck
-- git Version: v0.0.0
-- Version: 0.0.0
-- Performing Test HAVE_CXX_FLAG_STD_CXX11
-- Performing Test HAVE_CXX_FLAG_STD_CXX11 - Success
-- Performing Test HAVE_CXX_FLAG_WALL
-- Performing Test HAVE_CXX_FLAG_WALL - Success
-- Performing Test HAVE_CXX_FLAG_WEXTRA
-- Performing Test HAVE_CXX_FLAG_WEXTRA - Success
-- Performing Test HAVE_CXX_FLAG_WSHADOW
-- Performing Test HAVE_CXX_FLAG_WSHADOW - Success
-- Performing Test HAVE_CXX_FLAG_PEDANTIC
-- Performing Test HAVE_CXX_FLAG_PEDANTIC - Success
-- Performing Test HAVE_CXX_FLAG_PEDANTIC_ERRORS
-- Performing Test HAVE_CXX_FLAG_PEDANTIC_ERRORS - Success
-- Performing Test HAVE_CXX_FLAG_WSHORTEN_64_TO_32
-- Performing Test HAVE_CXX_FLAG_WSHORTEN_64_TO_32 - Failed
-- Performing Test HAVE_CXX_FLAG_WFLOAT_EQUAL
-- Performing Test HAVE_CXX_FLAG_WFLOAT_EQUAL - Success
-- Performing Test HAVE_CXX_FLAG_FSTRICT_ALIASING
-- Performing Test HAVE_CXX_FLAG_FSTRICT_ALIASING - Success
-- Performing Test HAVE_CXX_FLAG_FNO_EXCEPTIONS
-- Performing Test HAVE_CXX_FLAG_FNO_EXCEPTIONS - Success
-- Performing Test HAVE_CXX_FLAG_WSTRICT_ALIASING
-- Performing Test HAVE_CXX_FLAG_WSTRICT_ALIASING - Success
-- Performing Test HAVE_CXX_FLAG_WD654
-- Performing Test HAVE_CXX_FLAG_WD654 - Failed
-- Performing Test HAVE_CXX_FLAG_WTHREAD_SAFETY
-- Performing Test HAVE_CXX_FLAG_WTHREAD_SAFETY - Failed
-- Performing Test HAVE_CXX_FLAG_COVERAGE
-- Performing Test HAVE_CXX_FLAG_COVERAGE - Success
-- Performing Test HAVE_GNU_POSIX_REGEX
-- Performing Test HAVE_GNU_POSIX_REGEX
-- Performing Test HAVE_GNU_POSIX_REGEX -- failed to compile
-- Performing Test HAVE_POSIX_REGEX
-- Performing Test HAVE_POSIX_REGEX
-- Performing Test HAVE_POSIX_REGEX -- success
-- Performing Test HAVE_STEADY_CLOCK
-- Performing Test HAVE_STEADY_CLOCK
-- Performing Test HAVE_STEADY_CLOCK -- success
-- Configuring done
-- Generating done
-- Build files have been written to:
/home/wink/prgs/llvm/llvm-project/build-llvm-clang-compiler-rt-master-0460a3629b2-use-ld-bfd
And then I build:
$ ninja -j11 -v
[1/4348] /usr/bin/c++ -DGTEST_HAS_RTTI=0 -D_GNU_SOURCE
-D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
-Ilib/Demangle -I/home/wink/prgs/llvm/llvm-project/llvm/lib/Demangle
-I/usr/include/libxml2 -Iinclude
-I/home/wink/prgs/llvm/llvm-project/llvm/include -fPIC
-fvisibility-inlines-hidden -Werror=date-time -std=c++11 -Wall -Wextra
-Wno-unused-parameter -Wwrite-strings -Wcast-qual
-Wno-missing-field-initializers -pedantic -Wno-long-long
-Wimplicit-fallthrough -Wno-maybe-uninitialized -Wno-class-memaccess
-Wno-noexcept-type -Wdelete-non-virtual-dtor -Wno-comment
-fdiagnostics-color -ffunction-sections -fdata-sections -O3 -DNDEBUG
-fno-exceptions -fno-rtti -MD -MT
lib/Demangle/CMakeFiles/LLVMDemangle.dir/Demangle.cpp.o -MF
lib/Demangle/CMakeFiles/LLVMDemangle.dir/Demangle.cpp.o.d -o
lib/Demangle/CMakeFiles/LLVMDemangle.dir/Demangle.cpp.o -c
/home/wink/prgs/llvm/llvm-project/llvm/lib/Demangle/Demangle.cpp
...
[4348/4348] : && /usr/bin/c++ -fPIC -fvisibility-inlines-hidden
-Werror=date-time -std=c++11 -Wall -Wextra -Wno-unused-parameter
-Wwrite-strings -Wcast-qual -Wno-missing-field-initializers -pedantic
-Wno-long-long -Wimplicit-fallthrough -Wno-maybe-uninitialized
-Wno-class-memaccess -Wno-noexcept-type -Wdelete-non-virtual-dtor
-Wno-comment -fdiagnostics-color -ffunction-sections -fdata-sections
-O3 -DNDEBUG -fuse-ld=bfd -Wl,-allow-shlib-undefined
-Wl,--export-dynamic
-Wl,-rpath-link,/home/wink/prgs/llvm/llvm-project/build-llvm-clang-compiler-rt-master-0460a3629b2-use-ld-bfd/./lib
-Wl,-O3 tools/opt/CMakeFiles/opt.dir/AnalysisWrappers.cpp.o
tools/opt/CMakeFiles/opt.dir/BreakpointPrinter.cpp.o
tools/opt/CMakeFiles/opt.dir/Debugify.cpp.o
tools/opt/CMakeFiles/opt.dir/GraphPrinters.cpp.o
tools/opt/CMakeFiles/opt.dir/NewPMDriver.cpp.o
tools/opt/CMakeFiles/opt.dir/PassPrinters.cpp.o
tools/opt/CMakeFiles/opt.dir/PrintSCC.cpp.o
tools/opt/CMakeFiles/opt.dir/opt.cpp.o -o bin/opt
-Wl,-rpath,"\$ORIGIN/../lib" lib/libLLVMAArch64CodeGen.a
lib/libLLVMAArch64AsmParser.a lib/libLLVMAArch64AsmPrinter.a
lib/libLLVMAArch64Desc.a lib/libLLVMAArch64Disassembler.a
lib/libLLVMAArch64Info.a lib/libLLVMAArch64Utils.a
lib/libLLVMAMDGPUCodeGen.a lib/libLLVMAMDGPUAsmParser.a
lib/libLLVMAMDGPUAsmPrinter.a lib/libLLVMAMDGPUDesc.a
lib/libLLVMAMDGPUDisassembler.a lib/libLLVMAMDGPUInfo.a
lib/libLLVMAMDGPUUtils.a lib/libLLVMARMCodeGen.a
lib/libLLVMARMAsmParser.a lib/libLLVMARMAsmPrinter.a
lib/libLLVMARMDesc.a lib/libLLVMARMDisassembler.a lib/libLLVMARMInfo.a
lib/libLLVMARMUtils.a lib/libLLVMBPFCodeGen.a
lib/libLLVMBPFAsmParser.a lib/libLLVMBPFAsmPrinter.a
lib/libLLVMBPFDesc.a lib/libLLVMBPFDisassembler.a lib/libLLVMBPFInfo.a
lib/libLLVMHexagonCodeGen.a lib/libLLVMHexagonAsmParser.a
lib/libLLVMHexagonDesc.a lib/libLLVMHexagonDisassembler.a
lib/libLLVMHexagonInfo.a lib/libLLVMLanaiCodeGen.a
lib/libLLVMLanaiAsmParser.a lib/libLLVMLanaiAsmPrinter.a
lib/libLLVMLanaiDesc.a lib/libLLVMLanaiDisassembler.a
lib/libLLVMLanaiInfo.a lib/libLLVMMipsCodeGen.a
lib/libLLVMMipsAsmParser.a lib/libLLVMMipsAsmPrinter.a
lib/libLLVMMipsDesc.a lib/libLLVMMipsDisassembler.a
lib/libLLVMMipsInfo.a lib/libLLVMMSP430CodeGen.a
lib/libLLVMMSP430AsmParser.a lib/libLLVMMSP430AsmPrinter.a
lib/libLLVMMSP430Desc.a lib/libLLVMMSP430Disassembler.a
lib/libLLVMMSP430Info.a lib/libLLVMNVPTXCodeGen.a
lib/libLLVMNVPTXAsmPrinter.a lib/libLLVMNVPTXDesc.a
lib/libLLVMNVPTXInfo.a lib/libLLVMPowerPCCodeGen.a
lib/libLLVMPowerPCAsmParser.a lib/libLLVMPowerPCAsmPrinter.a
lib/libLLVMPowerPCDesc.a lib/libLLVMPowerPCDisassembler.a
lib/libLLVMPowerPCInfo.a lib/libLLVMSparcCodeGen.a
lib/libLLVMSparcAsmParser.a lib/libLLVMSparcAsmPrinter.a
lib/libLLVMSparcDesc.a lib/libLLVMSparcDisassembler.a
lib/libLLVMSparcInfo.a lib/libLLVMSystemZCodeGen.a
lib/libLLVMSystemZAsmParser.a lib/libLLVMSystemZAsmPrinter.a
lib/libLLVMSystemZDesc.a lib/libLLVMSystemZDisassembler.a
lib/libLLVMSystemZInfo.a lib/libLLVMWebAssemblyCodeGen.a
lib/libLLVMWebAssemblyAsmParser.a lib/libLLVMWebAssemblyAsmPrinter.a
lib/libLLVMWebAssemblyDesc.a lib/libLLVMWebAssemblyDisassembler.a
lib/libLLVMWebAssemblyInfo.a lib/libLLVMX86CodeGen.a
lib/libLLVMX86AsmParser.a lib/libLLVMX86AsmPrinter.a
lib/libLLVMX86Desc.a lib/libLLVMX86Disassembler.a lib/libLLVMX86Info.a
lib/libLLVMX86Utils.a lib/libLLVMXCoreCodeGen.a
lib/libLLVMXCoreAsmPrinter.a lib/libLLVMXCoreDesc.a
lib/libLLVMXCoreDisassembler.a lib/libLLVMXCoreInfo.a
lib/libLLVMAggressiveInstCombine.a lib/libLLVMAnalysis.a
lib/libLLVMBitWriter.a lib/libLLVMCodeGen.a lib/libLLVMCore.a
lib/libLLVMCoroutines.a lib/libLLVMipo.a lib/libLLVMIRReader.a
lib/libLLVMInstCombine.a lib/libLLVMInstrumentation.a lib/libLLVMMC.a
lib/libLLVMObjCARCOpts.a lib/libLLVMScalarOpts.a lib/libLLVMSupport.a
lib/libLLVMTarget.a lib/libLLVMTransformUtils.a lib/libLLVMVectorize.a
lib/libLLVMPasses.a -lpthread lib/libLLVMAArch64Desc.a
lib/libLLVMAArch64AsmPrinter.a lib/libLLVMAArch64Info.a
lib/libLLVMAArch64Utils.a lib/libLLVMMIRParser.a
lib/libLLVMAMDGPUDesc.a lib/libLLVMAMDGPUAsmPrinter.a
lib/libLLVMAMDGPUInfo.a lib/libLLVMAMDGPUUtils.a lib/libLLVMARMDesc.a
lib/libLLVMARMAsmPrinter.a lib/libLLVMARMInfo.a lib/libLLVMARMUtils.a
lib/libLLVMBPFAsmPrinter.a lib/libLLVMHexagonDesc.a
lib/libLLVMHexagonInfo.a lib/libLLVMLanaiDesc.a
lib/libLLVMLanaiAsmPrinter.a lib/libLLVMLanaiInfo.a
lib/libLLVMMipsAsmPrinter.a lib/libLLVMMSP430AsmPrinter.a
lib/libLLVMNVPTXAsmPrinter.a lib/libLLVMPowerPCAsmPrinter.a
lib/libLLVMSparcAsmPrinter.a lib/libLLVMSystemZDesc.a
lib/libLLVMSystemZAsmPrinter.a lib/libLLVMSystemZInfo.a
lib/libLLVMWebAssemblyAsmPrinter.a lib/libLLVMGlobalISel.a
lib/libLLVMX86AsmPrinter.a lib/libLLVMX86Utils.a
lib/libLLVMXCoreAsmPrinter.a lib/libLLVMAsmPrinter.a
lib/libLLVMDebugInfoDWARF.a lib/libLLVMSelectionDAG.a
lib/libLLVMMCDisassembler.a lib/libLLVMCodeGen.a lib/libLLVMipo.a
lib/libLLVMBitWriter.a lib/libLLVMIRReader.a lib/libLLVMAsmParser.a
lib/libLLVMLinker.a lib/libLLVMInstrumentation.a
lib/libLLVMScalarOpts.a lib/libLLVMAggressiveInstCombine.a
lib/libLLVMInstCombine.a lib/libLLVMTarget.a lib/libLLVMVectorize.a
lib/libLLVMTransformUtils.a lib/libLLVMAnalysis.a
lib/libLLVMProfileData.a lib/libLLVMObject.a lib/libLLVMMCParser.a
lib/libLLVMMC.a lib/libLLVMDebugInfoCodeView.a
lib/libLLVMDebugInfoMSF.a lib/libLLVMBitReader.a lib/libLLVMCore.a
lib/libLLVMBinaryFormat.a lib/libLLVMRemarks.a lib/libLLVMSupport.a
-lz -lrt -ldl -ltinfo -lpthread -lm /usr/lib/libz3.so
lib/libLLVMDemangle.a && :
Here is the --version of clang I built:
$ /home/wink/prgs/llvm/llvm-project/build-llvm-clang-compiler-rt-master-0460a3629b2-use-ld-bfd/./bin/clang
--version
clang version 9.0.0 (git at github.com:winksaville/llvm-project
0460a3629b2564d9b34702ba05ab3f461533eca9)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/wink/prgs/llvm/llvm-project/build-llvm-clang-compiler-rt-master-0460a3629b2-use-ld-bfd/./bin
And then I check-tsan and get 5 errors:
$ ninja -j11 -v check-tsan
...
Failing Tests (5):
ThreadSanitizer-x86_64 :: Linux/double_race.cc
ThreadSanitizer-x86_64 :: inlined_memcpy_race.cc
ThreadSanitizer-x86_64 :: inlined_memcpy_race2.cc
ThreadSanitizer-x86_64 :: memcmp_race.cc
ThreadSanitizer-x86_64 :: memcpy_race.cc
Expected Passes : 309
Expected Failures : 1
Unsupported Tests : 80
Unexpected Failures: 5
FAILED: projects/compiler-rt/test/tsan/CMakeFiles/check-tsan
cd /home/wink/prgs/llvm/llvm-project/build-llvm-clang-compiler-rt-master-0460a3629b2-use-ld-bfd/projects/compiler-rt/test/tsan
&& /usr/bin/python2.7
/home/wink/prgs/llvm/llvm-project/build-llvm-clang-compiler-rt-master-0460a3629b2-use-ld-bfd/./bin/llvm-lit
-sv /home/wink/prgs/llvm/llvm-project/build-llvm-clang-compiler-rt-master-0460a3629b2-use-ld-bfd/projects/compiler-rt/test/tsan/X86_64Config
/home/wink/prgs/llvm/llvm-project/build-llvm-clang-compiler-rt-master-0460a3629b2-use-ld-bfd/projects/compiler-rt/test/tsan/Unit
ninja: build stopped: subcommand failed.
I looked more closely at the memcpy_race.cc failure:
******************** TEST 'ThreadSanitizer-x86_64 :: memcpy_race.cc'
FAILED ********************
Script:
--
: 'RUN: at line 1';
/home/wink/prgs/llvm/llvm-project/build-llvm-clang-compiler-rt-master-0460a3629b2-use-ld-bfd/./bin/clang
--driver-mode=g++ -fsanitize=thread -Wall -m64 -gline-tables-only
-I/home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/../
-std=c++11 -I/home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/../
-nostdinc++ -I/home/wink/prgs/llvm/llvm-project/build-llvm-clang-compiler-rt-master-0460a3629b2-use-ld-bfd/projects/compiler-rt/lib/tsan/libcxx_tsan_x86_64/include/c++/v1
-O1 /home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/memcpy_race.cc
-o /home/wink/prgs/llvm/llvm-project/build-llvm-clang-compiler-rt-master-0460a3629b2-use-ld-bfd/projects/compiler-rt/test/tsan/X86_64Config/Output/memcpy_race.cc.tmp
&& /home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/deflake.bash
/home/wink/prgs/llvm/llvm-project/build-llvm-clang-compiler-rt-master-0460a3629b2-use-ld-bfd/projects/compiler-rt/test/tsan/X86_64Config/Output/memcpy_race.cc.tmp
| FileCheck /home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/memcpy_race.cc
--
Exit Code: 1
Command Output (stderr):
--
/home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/memcpy_race.cc:38:11:
error: CHECK: expected string not found in input
// CHECK: #1 Thread2
^
<stdin>:5:12: note: scanning from here
#0 memcpy /home/wink/prgs/llvm/llvm-project/compiler-rt/lib/tsan/../sanitizer_common/sanitizer_common_interceptors.inc:801:5
(memcpy_race.cc.tmp+0x480056)
^
<stdin>:7:2: note: possible intended match here
#2 Thread2(void*)
/home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/memcpy_race.cc:19:3
(memcpy_race.cc.tmp+0x4c9994)
^
--
I took the command line from the failure log and compiled
memcpy_race.cc to memcpy_race locally:
$ /home/wink/prgs/llvm/llvm-project/build-llvm-clang-compiler-rt-master-0460a3629b2-use-ld-bfd/./bin/clang
--driver-mode=g++ -fsanitize=thread -Wall -m64 -gline-tables-only
-I/home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/../
-std=c++11 -I/home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/../
-nostdinc++ -I/home/wink/prgs/llvm/llvm-project/build-llvm-clang-compiler-rt-master-0460a3629b2-use-ld-bfd/projects/compiler-rt/lib/tsan/libcxx_tsan_x86_64/include/c++/v1
-O1 /home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/memcpy_race.cc
-o memcpy_race
I then ran the memcpy_race and captured the output to memcpy_race.out,
NOTICE, there are 3 stack frame entries for thread T2 and T1:
$ ./memcpy_race > memcpy_race.out 2>&1
$ cat memcpy_race.out
addr=0x7b0400000005
==================
WARNING: ThreadSanitizer: data race (pid=23765)
Write of size 1 at 0x7b0400000005 by thread T2:
#0 memcpy /home/wink/prgs/llvm/llvm-project/compiler-rt/lib/tsan/../sanitizer_common/sanitizer_common_interceptors.inc:801:5
(memcpy_race+0x480056)
#1 memcpy /home/wink/prgs/llvm/llvm-project/compiler-rt/lib/tsan/../sanitizer_common/sanitizer_common_interceptors.inc:793:1
(memcpy_race+0x480056)
#2 Thread2(void*)
/home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/memcpy_race.cc:19:3
(memcpy_race+0x4c9994)
Previous write of size 1 at 0x7b0400000005 by thread T1:
#0 memcpy /home/wink/prgs/llvm/llvm-project/compiler-rt/lib/tsan/../sanitizer_common/sanitizer_common_interceptors.inc:801:5
(memcpy_race+0x480056)
#1 memcpy /home/wink/prgs/llvm/llvm-project/compiler-rt/lib/tsan/../sanitizer_common/sanitizer_common_interceptors.inc:793:1
(memcpy_race+0x480056)
#2 Thread1(void*)
/home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/memcpy_race.cc:11:3
(memcpy_race+0x4c98df)
Location is heap block of size 10 at 0x7b0400000000 allocated by main thread:
#0 operator new[](unsigned long)
/home/wink/prgs/llvm/llvm-project/compiler-rt/lib/tsan/rtl/tsan_new_delete.cc:70:3
(memcpy_race+0x4c947e)
#1 __cxx_global_var_init
/home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/memcpy_race.cc:5:14
(memcpy_race+0x4203a4)
#2 _GLOBAL__sub_I_memcpy_race.cc
/home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/memcpy_race.cc
(memcpy_race+0x42045f)
#3 __libc_csu_init <null> (memcpy_race+0x4c9b0c)
Thread T2 (tid=23768, running) created by main thread at:
#0 pthread_create
/home/wink/prgs/llvm/llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc:989:3
(memcpy_race+0x451f62)
#1 main /home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/memcpy_race.cc:28:3
(memcpy_race+0x4c9a25)
Thread T1 (tid=23767, finished) created by main thread at:
#0 pthread_create
/home/wink/prgs/llvm/llvm-project/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc:989:3
(memcpy_race+0x451f62)
#1 main /home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/memcpy_race.cc:27:3
(memcpy_race+0x4c9a0f)
SUMMARY: ThreadSanitizer: data race
/home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/memcpy_race.cc:19:3
in Thread2(void*)
==================
ThreadSanitizer: reported 1 warnings
I then use ./bin/FileCheck and get the same failure as the ninja check-tsan:
$ ./bin/FileCheck ../compiler-rt/test/tsan/memcpy_race.cc < memcpy_race.out
../compiler-rt/test/tsan/memcpy_race.cc:38:11: error: CHECK: expected
string not found in input
// CHECK: #1 Thread2
^
<stdin>:5:12: note: scanning from here
#0 memcpy /home/wink/prgs/llvm/llvm-project/compiler-rt/lib/tsan/../sanitizer_common/sanitizer_common_interceptors.inc:801:5
(memcpy_race+0x480056)
^
<stdin>:7:2: note: possible intended match here
#2 Thread2(void*)
/home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/memcpy_race.cc:19:3
(memcpy_race+0x4c9994)
^
I then looked at memcpy_race.cc:
$ cat ../compiler-rt/test/tsan/memcpy_race.cc
// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
#include "test.h"
#include <string.h>
char *data = new char[10];
char *data1 = new char[10];
char *data2 = new char[10];
void *Thread1(void *x) {
static volatile int size = 1;
memcpy(data+5, data1, size);
barrier_wait(&barrier);
return NULL;
}
void *Thread2(void *x) {
static volatile int size = 4;
barrier_wait(&barrier);
memcpy(data+3, data2, size);
return NULL;
}
int main() {
barrier_init(&barrier, 2);
print_address("addr=", 1, &data[5]);
pthread_t t[2];
pthread_create(&t[0], NULL, Thread1, NULL);
pthread_create(&t[1], NULL, Thread2, NULL);
pthread_join(t[0], NULL);
pthread_join(t[1], NULL);
return 0;
}
// CHECK: addr=[[ADDR:0x[0-9,a-f]+]]
// CHECK: WARNING: ThreadSanitizer: data race
// CHECK: Write of size 1 at [[ADDR]] by thread T2:
// CHECK: #0 {{(memcpy|memmove)}}
// CHECK: #1 Thread2
// CHECK: Previous write of size 1 at [[ADDR]] by thread T1:
// CHECK: #0 {{(memcpy|memmove)}}
// CHECK: #1 Thread1
And notice that the test expects there to be only two stack frames for
both thread T2 and T1. If I change
the CHECK lines two include 3 stack frame entries, add another
"{{(memcpy|memmove)}}":
$ git diff
diff --git a/compiler-rt/test/tsan/memcpy_race.cc
b/compiler-rt/test/tsan/memcpy_race.cc
index 4a098c0405f..d39c508c6e2 100644
--- a/compiler-rt/test/tsan/memcpy_race.cc
+++ b/compiler-rt/test/tsan/memcpy_race.cc
@@ -35,7 +35,9 @@ int main() {
// CHECK: WARNING: ThreadSanitizer: data race
// CHECK: Write of size 1 at [[ADDR]] by thread T2:
// CHECK: #0 {{(memcpy|memmove)}}
-// CHECK: #1 Thread2
+// CHECK: #1 {{(memcpy|memmove)}}
+// CHECK: #2 Thread2
// CHECK: Previous write of size 1 at [[ADDR]] by thread T1:
// CHECK: #0 {{(memcpy|memmove)}}
-// CHECK: #1 Thread1
+// CHECK: #1 {{(memcpy|memmove)}}
+// CHECK: #2 Thread1
And now re-run the FileCheck all is well:
$ ./bin/FileCheck ../compiler-rt/test/tsan/memcpy_race.cc < memcpy_race.out
$ echo $?
0
Also, if I compile using my system installed clang:
$ clang --version
clang version 8.0.0 (tags/RELEASE_800/final)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
And compare it to the original version it also works:
$ clang --driver-mode=g++ -fsanitize=thread -Wall -m64
-gline-tables-only
-I/home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/../
-std=c++11 -I/home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/../
-nostdinc++ -I/home/wink/prgs/llvm/llvm-project/build-llvm-clang-compiler-rt-master-0460a3629b2-use-ld-bfd/projects/compiler-rt/lib/tsan/libcxx_tsan_x86_64/include/c++/v1
-O1 /home/wink/prgs/llvm/llvm-project/compiler-rt/test/tsan/memcpy_race.cc
-o memcpy_race.system
$ ./memcpy_race.system > memcpy_race.system.out 2>&1
$ ./bin/FileCheck ../compiler-rt/test/tsan/memcpy_race.original.cc <
memcpy_race.system.out
$ echo $?
0
-- Wink
More information about the llvm-dev
mailing list