diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a83637..0e9313c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,6 +64,18 @@ else() add_compile_options("-mno-vzeroupper" "-mavx2" "-floop-unroll-and-jam" ) endif() +# only set these flags if testing presence of race conditions : +# https://github.com/google/sanitizers/wiki/ThreadSanitizerCppManual +# on linux/gcc it seems that one needs to run with LD_PRELOAD=/lib/x86_64-linux-gnu/libtsan.so.0 prepended +# and do a `sudo sysctl vm.mmap_rnd_bits=28` prior to running +if(DEFINED ENV{SANITIZE_THREAD}) + message(STATUS "Building with thread sanitizing enabled.") + SET(GCC_COVERAGE_COMPILE_FLAGS "-g -O2 -fsanitize=thread") + SET(GCC_COVERAGE_LINK_FLAGS "-fsanitize=thread") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}") +endif() + if(DEFINED ENV{INCLUDE_COVERAGE} AND DEFINED ENV{SANITIZE_ADDRESS}) message(FATAL_ERROR "Conflicting build options: INCLUDE_COVERAGE and SANITIZE_ADDRESS") endif() @@ -72,9 +84,9 @@ endif() if(DEFINED ENV{INCLUDE_COVERAGE}) message(STATUS "Building with code coverage enabled.") SET(GCC_COVERAGE_COMPILE_FLAGS "-g -O0 -coverage -fprofile-arcs -ftest-coverage") - SET(GCC_COVERAGE_LINK_FLAGS "-coverage -lgcov") - SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}" ) - SET( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}" ) + SET(GCC_COVERAGE_LINK_FLAGS "-coverage -lgcov -lpthread") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}") endif() # Enable the address sanitizer with an environment variable. diff --git a/src/lib/onesource.cpp b/src/lib/onesource.cpp index 3e0624a..d70adc4 100644 --- a/src/lib/onesource.cpp +++ b/src/lib/onesource.cpp @@ -903,8 +903,8 @@ void onesource::generatePDF(vector &fulllib, const vector &va, // Catch the name of the local thread in the parallelisation thread_id = omp_get_thread_num(); #pragma omp for schedule(static, 10000) reduction( \ - + : PDFzloc, PDFzqloc, PDFmassloc, PDFSFRloc, PDFsSFRloc, PDFAgeloc) \ - nowait + + : PDFzloc, PDFzqloc, PDFmassloc, PDFSFRloc, PDFsSFRloc, PDFAgeloc, \ + PDFLdustloc, PDFcol1loc, PDFcol2loc, PDFmrefloc) nowait #endif // Loop over all SEDs, which is parallelized for (size_t i = 0; i < va.size(); i++) {