]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
drd/tests/std_atomic: Add
authorBart Van Assche <bvanassche@acm.org>
Tue, 10 Dec 2013 17:56:20 +0000 (17:56 +0000)
committerBart Van Assche <bvanassche@acm.org>
Tue, 10 Dec 2013 17:56:20 +0000 (17:56 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13756

drd/tests/Makefile.am
drd/tests/std_atomic.cpp [new file with mode: 0644]
drd/tests/std_atomic.stderr.exp [new file with mode: 0644]
drd/tests/std_atomic.vgtest [new file with mode: 0644]

index a9417b158097abdfb04d8d75a1d3a6b1f3b732a7..007b7b2c559e376f50e59fd346dcc1ba59425c13 100644 (file)
@@ -230,6 +230,8 @@ EXTRA_DIST =                                        \
        sigalrm.vgtest                              \
        sigaltstack.stderr.exp                      \
        sigaltstack.vgtest                          \
+       std_atomic.stderr.exp                       \
+       std_atomic.vgtest                                   \
        std_list.stderr.exp                         \
        std_list.vgtest                             \
        std_string.stderr.exp                       \
@@ -376,6 +378,7 @@ endif
 if CXX_CAN_INCLUDE_THREAD_HEADER
 if HAVE_SHARED_POINTER_ANNOTATION
 check_PROGRAMS += \
+  std_atomic      \
   std_list        \
   std_string      \
   std_thread
@@ -458,6 +461,9 @@ if HAVE_PTHREAD_BARRIER
 matinv_LDADD                = $(LDADD) -lm
 endif
 
+std_atomic_SOURCES          = std_atomic.cpp
+std_atomic_CXXFLAGS         = $(AM_CXXFLAGS) -std=c++0x -Wno-sign-compare
+
 std_list_SOURCES            = std_list.cpp
 std_list_CXXFLAGS           = $(AM_CXXFLAGS) -std=c++0x -Wno-sign-compare
 
diff --git a/drd/tests/std_atomic.cpp b/drd/tests/std_atomic.cpp
new file mode 100644 (file)
index 0000000..9cdc1e5
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Test program for std::atomic<>
+ *
+ * See also https://bugs.kde.org/show_bug.cgi?id=328490.
+ */
+
+#include "../drd.h"
+#include <atomic>
+#include <iostream>
+#include <string>
+#include <pthread.h>
+
+std::atomic<bool> g_b;
+
+void *func1(void *instance)
+{
+  while (!g_b) {
+    timespec delay = { 0, 100 * 1000 * 1000 };
+    nanosleep(&delay, NULL);
+  }
+  return NULL;
+}
+
+void *func2(void *instance)
+{
+  g_b = true;
+  return NULL;
+}
+
+int main(int argc, char* argv[])
+{
+  int err;
+  pthread_t thread1;
+  pthread_t thread2;
+
+  std::cerr << "Started.\n";
+
+  if (argc > 1)
+    DRD_IGNORE_VAR(g_b);
+
+  err = pthread_create(&thread1, NULL, &func1, NULL);
+  if (err != 0)
+    throw std::string("failed to create a thread.");
+  err = pthread_create(&thread2, NULL, &func2, NULL);
+  if (err != 0)
+    throw std::string("failed to create a thread.");
+
+  err = pthread_join(thread1, NULL);
+  if (err != 0)
+    throw std::string("Thread::join(): failed to join.");
+  err = pthread_join(thread2, NULL);
+  if (err != 0)
+    throw std::string("Thread::join(): failed to join.");
+
+  std::cerr << "Done.\n";
+}
diff --git a/drd/tests/std_atomic.stderr.exp b/drd/tests/std_atomic.stderr.exp
new file mode 100644 (file)
index 0000000..2582960
--- /dev/null
@@ -0,0 +1,5 @@
+
+Started.
+Done.
+
+ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
diff --git a/drd/tests/std_atomic.vgtest b/drd/tests/std_atomic.vgtest
new file mode 100644 (file)
index 0000000..c675375
--- /dev/null
@@ -0,0 +1,4 @@
+prereq: test -e std_atomic && ./supported_libpthread
+vgopts: --check-stack-var=yes --show-confl-seg=no
+prog: std_atomic 1
+stderr_filter: filter_stderr