summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--openmp/cmake/DetectTestCompiler/CMakeLists.txt5
-rw-r--r--openmp/cmake/OpenMPTesting.cmake8
-rw-r--r--openmp/tools/archer/tests/CMakeLists.txt6
-rw-r--r--openmp/tools/archer/tests/lit.cfg6
-rw-r--r--openmp/tools/archer/tests/lit.site.cfg.in5
-rw-r--r--openmp/tools/archer/tests/races/critical-unrelated.c2
-rw-r--r--openmp/tools/archer/tests/races/lock-nested-unrelated.c2
-rw-r--r--openmp/tools/archer/tests/races/lock-unrelated.c2
-rw-r--r--openmp/tools/archer/tests/races/parallel-simple.c2
-rw-r--r--openmp/tools/archer/tests/races/task-dependency.c4
-rw-r--r--openmp/tools/archer/tests/races/task-taskgroup-unrelated.c7
-rw-r--r--openmp/tools/archer/tests/races/task-taskwait-nested.c4
-rw-r--r--openmp/tools/archer/tests/races/task-two.c6
13 files changed, 33 insertions, 26 deletions
diff --git a/openmp/cmake/DetectTestCompiler/CMakeLists.txt b/openmp/cmake/DetectTestCompiler/CMakeLists.txt
index 1fd7cc715f0..c230fc8d4cf 100644
--- a/openmp/cmake/DetectTestCompiler/CMakeLists.txt
+++ b/openmp/cmake/DetectTestCompiler/CMakeLists.txt
@@ -9,6 +9,7 @@ function(write_compiler_information lang)
set(information "${information}\\;${CMAKE_${lang}_COMPILER_ID}")
set(information "${information}\\;${CMAKE_${lang}_COMPILER_VERSION}")
set(information "${information}\\;${${lang}_FLAGS}")
+ set(information "${information}\\;${${lang}_HAS_TSAN_FLAG}")
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${lang}CompilerInformation.txt ${information})
endfunction(write_compiler_information)
@@ -39,5 +40,9 @@ if (CMAKE_C_COMPILER_ID STREQUAL "Clang")
add_experimental_isel_flag(CXX)
endif()
+SET(CMAKE_REQUIRED_FLAGS "-fsanitize=thread")
+check_c_compiler_flag("" C_HAS_TSAN_FLAG)
+check_cxx_compiler_flag("" CXX_HAS_TSAN_FLAG)
+
write_compiler_information(C)
write_compiler_information(CXX)
diff --git a/openmp/cmake/OpenMPTesting.cmake b/openmp/cmake/OpenMPTesting.cmake
index 52e68aa150f..e3d2c6b2c07 100644
--- a/openmp/cmake/OpenMPTesting.cmake
+++ b/openmp/cmake/OpenMPTesting.cmake
@@ -64,11 +64,13 @@ macro(extract_test_compiler_information lang file)
list(GET information 1 id)
list(GET information 2 version)
list(GET information 3 openmp_flags)
+ list(GET information 4 has_tsan_flags)
set(OPENMP_TEST_${lang}_COMPILER_PATH ${path})
set(OPENMP_TEST_${lang}_COMPILER_ID ${id})
set(OPENMP_TEST_${lang}_COMPILER_VERSION ${version})
set(OPENMP_TEST_${lang}_COMPILER_OPENMP_FLAGS ${openmp_flags})
+ set(OPENMP_TEST_${lang}_COMPILER_HAS_TSAN_FLAGS ${has_tsan_flags})
endmacro()
# Function to set variables with information about the test compiler.
@@ -84,6 +86,7 @@ function(set_test_compiler_information dir)
set(OPENMP_TEST_COMPILER_ID "${OPENMP_TEST_C_COMPILER_ID}" PARENT_SCOPE)
set(OPENMP_TEST_COMPILER_VERSION "${OPENMP_TEST_C_COMPILER_VERSION}" PARENT_SCOPE)
set(OPENMP_TEST_COMPILER_OPENMP_FLAGS "${OPENMP_TEST_C_COMPILER_OPENMP_FLAGS}" PARENT_SCOPE)
+ set(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS "${OPENMP_TEST_C_COMPILER_HAS_TSAN_FLAGS}" PARENT_SCOPE)
# Determine major version.
string(REGEX MATCH "[0-9]+" major "${OPENMP_TEST_C_COMPILER_VERSION}")
@@ -128,6 +131,11 @@ else()
else()
set(OPENMP_TEST_COMPILER_THREAD_FLAGS "${CMAKE_THREAD_LIBS_INIT}")
endif()
+ if(TARGET tsan)
+ set(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS 1)
+ else()
+ set(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS 0)
+ endif()
# TODO: Implement blockaddress in GlobalISel and remove this flag!
set(OPENMP_TEST_COMPILER_OPENMP_FLAGS "-fopenmp ${OPENMP_TEST_COMPILER_THREAD_FLAGS} -fno-experimental-isel")
endif()
diff --git a/openmp/tools/archer/tests/CMakeLists.txt b/openmp/tools/archer/tests/CMakeLists.txt
index 4f70b1a826d..baf832a8956 100644
--- a/openmp/tools/archer/tests/CMakeLists.txt
+++ b/openmp/tools/archer/tests/CMakeLists.txt
@@ -16,6 +16,9 @@ endif()
set(LIBARCHER_TEST_PATH ${CMAKE_CURRENT_SOURCE_DIR})
+set(LIBARCHER_TEST_FLAGS "" CACHE STRING
+ "Extra compiler flags to send to the test compiler.")
+
macro(pythonize_bool var)
if (${var})
set(${var} True)
@@ -25,8 +28,9 @@ macro(pythonize_bool var)
endmacro()
pythonize_bool(LIBARCHER_HAVE_LIBATOMIC)
+pythonize_bool(OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS)
-add_openmp_testsuite(check-libarcher "Running libarcher tests" ${CMAKE_CURRENT_BINARY_DIR} DEPENDS archer)
+add_openmp_testsuite(check-libarcher "Running libarcher tests" ${CMAKE_CURRENT_BINARY_DIR} DEPENDS archer omp)
# Configure the lit.site.cfg.in file
set(AUTO_GEN_COMMENT "## Autogenerated by libarcher configuration.\n# Do not edit!")
diff --git a/openmp/tools/archer/tests/lit.cfg b/openmp/tools/archer/tests/lit.cfg
index 286e59322cd..3014c020bb9 100644
--- a/openmp/tools/archer/tests/lit.cfg
+++ b/openmp/tools/archer/tests/lit.cfg
@@ -46,7 +46,7 @@ config.test_flags = " -I " + config.test_source_root + \
" -I " + config.omp_header_dir + \
" -L " + config.omp_library_dir + \
" -Wl,-rpath," + config.omp_library_dir + \
- " " + config.test_extra_flags
+ " " + config.test_archer_flags
config.archer_flags = "-g -O1 -fsanitize=thread"
@@ -63,6 +63,7 @@ for feature in config.test_compiler_features:
# Setup environment to find dynamic library at runtime
append_dynamic_library_path(config.omp_library_dir)
+append_dynamic_library_path(config.libarcher_obj_root+"/..")
# Rpath modifications for Darwin
if config.operating_system == 'Darwin':
@@ -81,6 +82,9 @@ if config.operating_system == 'Darwin':
if 'Linux' in config.operating_system:
config.available_features.add("linux")
+if config.has_tsan == True:
+ config.available_features.add("tsan")
+
# to run with icc INTEL_LICENSE_FILE must be set
if 'INTEL_LICENSE_FILE' in os.environ:
config.environment['INTEL_LICENSE_FILE'] = os.environ['INTEL_LICENSE_FILE']
diff --git a/openmp/tools/archer/tests/lit.site.cfg.in b/openmp/tools/archer/tests/lit.site.cfg.in
index 8ab8821e4f5..cde10b2dd8d 100644
--- a/openmp/tools/archer/tests/lit.site.cfg.in
+++ b/openmp/tools/archer/tests/lit.site.cfg.in
@@ -10,9 +10,10 @@ config.libomp_obj_root = "@CMAKE_CURRENT_BINARY_DIR@"
config.omp_library_dir = "@LIBOMP_LIBRARY_DIR@"
config.omp_header_dir = "@LIBOMP_INCLUDE_DIR@"
config.operating_system = "@CMAKE_SYSTEM_NAME@"
-config.has_libatomic = "@LIBARCHER_HAVE_LIBATOMIC@"
+config.has_libatomic = @LIBARCHER_HAVE_LIBATOMIC@
+config.has_tsan = @OPENMP_TEST_COMPILER_HAS_TSAN_FLAGS@
-config.test_archer_flags = "@OPENMP_TEST_ARCHER_FLAGS@"
+config.test_archer_flags = "@LIBARCHER_TEST_FLAGS@"
config.libarcher_obj_root = "@CMAKE_CURRENT_BINARY_DIR@"
# Let the main config do the real work.
diff --git a/openmp/tools/archer/tests/races/critical-unrelated.c b/openmp/tools/archer/tests/races/critical-unrelated.c
index 736d6f1dd68..58678a4831b 100644
--- a/openmp/tools/archer/tests/races/critical-unrelated.c
+++ b/openmp/tools/archer/tests/races/critical-unrelated.c
@@ -11,7 +11,6 @@
//
//===----------------------------------------------------------------------===//
-
// RUN: %libarcher-compile-and-run-race | FileCheck %s
// REQUIRES: tsan
#include <omp.h>
@@ -40,4 +39,3 @@ int main(int argc, char *argv[]) {
// CHECK-NEXT: #0 {{.*}}critical-unrelated.c:29
// CHECK: DONE
// CHECK: ThreadSanitizer: reported 1 warnings
-
diff --git a/openmp/tools/archer/tests/races/lock-nested-unrelated.c b/openmp/tools/archer/tests/races/lock-nested-unrelated.c
index cd8f515f342..cf6910dadc3 100644
--- a/openmp/tools/archer/tests/races/lock-nested-unrelated.c
+++ b/openmp/tools/archer/tests/races/lock-nested-unrelated.c
@@ -11,7 +11,6 @@
//
//===----------------------------------------------------------------------===//
-
// RUN: %libarcher-compile-and-run-race | FileCheck %s
// REQUIRES: tsan
#include <omp.h>
@@ -46,4 +45,3 @@ int main(int argc, char *argv[]) {
// CHECK-NEXT: #0 {{.*}}lock-nested-unrelated.c:33
// CHECK: DONE
// CHECK: ThreadSanitizer: reported 1 warnings
-
diff --git a/openmp/tools/archer/tests/races/lock-unrelated.c b/openmp/tools/archer/tests/races/lock-unrelated.c
index 358c58488d4..d1ac27af21f 100644
--- a/openmp/tools/archer/tests/races/lock-unrelated.c
+++ b/openmp/tools/archer/tests/races/lock-unrelated.c
@@ -11,7 +11,6 @@
//
//===----------------------------------------------------------------------===//
-
// RUN: %libarcher-compile-and-run-race | FileCheck %s
// REQUIRES: tsan
#include <omp.h>
@@ -46,4 +45,3 @@ int main(int argc, char *argv[]) {
// CHECK-NEXT: #0 {{.*}}lock-unrelated.c:31
// CHECK: DONE
// CHECK: ThreadSanitizer: reported 1 warnings
-
diff --git a/openmp/tools/archer/tests/races/parallel-simple.c b/openmp/tools/archer/tests/races/parallel-simple.c
index c77d18557fe..2dc87acfd16 100644
--- a/openmp/tools/archer/tests/races/parallel-simple.c
+++ b/openmp/tools/archer/tests/races/parallel-simple.c
@@ -11,7 +11,6 @@
//
//===----------------------------------------------------------------------===//
-
// RUN: %libarcher-compile-and-run-race | FileCheck %s
// REQUIRES: tsan
#include <omp.h>
@@ -35,4 +34,3 @@ int main(int argc, char *argv[]) {
// CHECK-NEXT: #0 {{.*}}parallel-simple.c:23
// CHECK: DONE
// CHECK: ThreadSanitizer: reported 1 warnings
-
diff --git a/openmp/tools/archer/tests/races/task-dependency.c b/openmp/tools/archer/tests/races/task-dependency.c
index ce418b8b5a6..0cbd3cf8ef3 100644
--- a/openmp/tools/archer/tests/races/task-dependency.c
+++ b/openmp/tools/archer/tests/races/task-dependency.c
@@ -11,13 +11,12 @@
//
//===----------------------------------------------------------------------===//
-
// RUN: %libarcher-compile-and-run-race | FileCheck %s
// REQUIRES: tsan
+#include "ompt/ompt-signal.h"
#include <omp.h>
#include <stdio.h>
#include <unistd.h>
-#include "ompt/ompt-signal.h"
int main(int argc, char *argv[]) {
int var = 0, a = 0;
@@ -59,4 +58,3 @@ int main(int argc, char *argv[]) {
// CHECK-NEXT: #0 {{.*}}task-dependency.c:30
// CHECK: DONE
// CHECK: ThreadSanitizer: reported 1 warnings
-
diff --git a/openmp/tools/archer/tests/races/task-taskgroup-unrelated.c b/openmp/tools/archer/tests/races/task-taskgroup-unrelated.c
index 2f1228b7be2..244fdd30ac1 100644
--- a/openmp/tools/archer/tests/races/task-taskgroup-unrelated.c
+++ b/openmp/tools/archer/tests/races/task-taskgroup-unrelated.c
@@ -13,10 +13,10 @@
// RUN: %libarcher-compile-and-run-race | FileCheck %s
// REQUIRES: tsan
+#include "ompt/ompt-signal.h"
#include <omp.h>
#include <stdio.h>
#include <unistd.h>
-#include "ompt/ompt-signal.h"
int main(int argc, char *argv[]) {
int var = 0, a = 0;
@@ -54,9 +54,8 @@ int main(int argc, char *argv[]) {
// CHECK: WARNING: ThreadSanitizer: data race
// CHECK-NEXT: {{(Write|Read)}} of size 4
-// CHECK-NEXT: #0 {{.*}}task-taskgroup-unrelated.c:46
+// CHECK-NEXT: #0 {{.*}}task-taskgroup-unrelated.c:47
// CHECK: Previous write of size 4
-// CHECK-NEXT: #0 {{.*}}task-taskgroup-unrelated.c:28
+// CHECK-NEXT: #0 {{.*}}task-taskgroup-unrelated.c:29
// CHECK: DONE
// CHECK: ThreadSanitizer: reported 1 warnings
-
diff --git a/openmp/tools/archer/tests/races/task-taskwait-nested.c b/openmp/tools/archer/tests/races/task-taskwait-nested.c
index d49b1d2a855..193ad417a62 100644
--- a/openmp/tools/archer/tests/races/task-taskwait-nested.c
+++ b/openmp/tools/archer/tests/races/task-taskwait-nested.c
@@ -11,13 +11,12 @@
//
//===----------------------------------------------------------------------===//
-
// RUN: %libarcher-compile-and-run-race | FileCheck %s
// REQUIRES: tsan
+#include "ompt/ompt-signal.h"
#include <omp.h>
#include <stdio.h>
#include <unistd.h>
-#include "ompt/ompt-signal.h"
int main(int argc, char *argv[]) {
int var = 0, a = 0;
@@ -57,4 +56,3 @@ int main(int argc, char *argv[]) {
// CHECK-NEXT: #0 {{.*}}task-taskwait-nested.c:44
// CHECK: DONE
// CHECK: ThreadSanitizer: reported 1 warnings
-
diff --git a/openmp/tools/archer/tests/races/task-two.c b/openmp/tools/archer/tests/races/task-two.c
index ad7b705837a..1af937e0341 100644
--- a/openmp/tools/archer/tests/races/task-two.c
+++ b/openmp/tools/archer/tests/races/task-two.c
@@ -11,7 +11,6 @@
//
//===----------------------------------------------------------------------===//
-
// RUN: %libarcher-compile-and-run-race | FileCheck %s
// REQUIRES: tsan
#include <omp.h>
@@ -24,8 +23,8 @@ int main(int argc, char *argv[]) {
int var = 0;
int i;
-#pragma omp parallel for num_threads(NUM_THREADS) shared(var) schedule(static, \
- 1)
+#pragma omp parallel for num_threads(NUM_THREADS) shared(var) \
+ schedule(static, 1)
for (i = 0; i < NUM_THREADS; i++) {
#pragma omp task shared(var) if (0) // the task is inlined an executed locally
{ var++; }
@@ -43,4 +42,3 @@ int main(int argc, char *argv[]) {
// CHECK-NEXT: #0 {{.*}}task-two.c:30
// CHECK: DONE
// CHECK: ThreadSanitizer: reported 1 warnings
-
OpenPOWER on IntegriCloud