]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[PATCH][libstc++v3]Add new dg-require-thread-fence directive.
authorRenlin Li <renlin.li@arm.com>
Thu, 7 May 2015 12:54:52 +0000 (12:54 +0000)
committerRenlin Li <renlin@gcc.gnu.org>
Thu, 7 May 2015 12:54:52 +0000 (12:54 +0000)
libstdc++-v3/

2015-05-07  Renlin Li  <renlin.li@arm.com>

Backported from mainline
2015-04-22  Renlin Li  <renlin.li@arm.com>

* testsuite/lib/dg-options.exp (dg-require-thread-fence): New.
* testsuite/lib/libstdc++.exp (check_v3_target_thread_fence): New.
* testsuite/29_atomics/atomic_flag/clear/1.cc: Use it.
* testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc: Likewise.
* testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc: Likewise.

From-SVN: r222876

libstdc++-v3/ChangeLog
libstdc++-v3/testsuite/29_atomics/atomic_flag/clear/1.cc
libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc
libstdc++-v3/testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc
libstdc++-v3/testsuite/lib/dg-options.exp
libstdc++-v3/testsuite/lib/libstdc++.exp

index be9060d682f7b97ace52420866eca44bb4f1c9e5..b42c6e74ddac967ebf5ca070f63dfaeecfda74a1 100644 (file)
@@ -1,3 +1,14 @@
+2015-05-07  Renlin Li  <renlin.li@arm.com>
+
+       Backported from mainline
+       2015-04-22  Renlin Li  <renlin.li@arm.com>
+
+       * testsuite/lib/dg-options.exp (dg-require-thread-fence): New.
+       * testsuite/lib/libstdc++.exp (check_v3_target_thread_fence): New.
+       * testsuite/29_atomics/atomic_flag/clear/1.cc: Use it.
+       * testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc: Likewise.
+       * testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc: Likewise.
+
 2015-04-11  Jonathan Wakely  <jwakely@redhat.com>
 
        * testsuite/30_threads/shared_lock/cons/5.cc: Remove
index 7c03a3c33d0514607efd13f7a5ed55f5502967fc..14bd6062b359b8bf46fdfd9da2f196761071e93e 100644 (file)
@@ -1,4 +1,5 @@
 // { dg-options "-std=gnu++0x" }
+// { dg-require-thread-fence "" }
 
 // Copyright (C) 2009-2014 Free Software Foundation, Inc.
 //
index 580309e3b8fc6a6966f4dd2d113a46e8556c3b1f..09394ebcdb6948abab6779a5d6dd0112e1f8af17 100644 (file)
@@ -1,4 +1,5 @@
 // { dg-options "-std=gnu++0x" }
+// { dg-require-thread-fence "" }
 
 // Copyright (C) 2008-2014 Free Software Foundation, Inc.
 //
index c5dbd16b0166245fc85e1a9f6c10394e999063e7..02d0ae57e5089367921fd1e74fb50e0cc0a3ab51 100644 (file)
@@ -1,4 +1,5 @@
 // { dg-options "-std=gnu++0x" }
+// { dg-require-thread-fence "" }
 
 // Copyright (C) 2008-2014 Free Software Foundation, Inc.
 //
index d01bb9116dd07461f06d8267ddb8d28b2e7b2811..5cdc7f368a888a9cbbaab80e3d6236186e92a48e 100644 (file)
@@ -115,6 +115,15 @@ proc dg-require-cmath { args } {
     return
 }
 
+proc dg-require-thread-fence { args } {
+    if { ![ check_v3_target_thread_fence ] } {
+       upvar dg-do-what dg-do-what
+       set dg-do-what [list [lindex ${dg-do-what} 0] "N" "P"]
+       return
+    }
+    return
+}
+
 proc dg-require-atomic-builtins { args } {
     if { ![ check_v3_target_atomic_builtins ] } {
        upvar dg-do-what dg-do-what
index 95954d8dbaceaab9df848204db6361d87cf95869..eb2e8a853522b111aca6fab4cd2618585892d57d 100644 (file)
@@ -1200,6 +1200,62 @@ proc check_v3_target_cmath { } {
     return $et_c99_math
 }
 
+proc check_v3_target_thread_fence { } {
+    global cxxflags
+    global DEFAULT_CXXFLAGS
+    global et_thread_fence
+
+    global tool
+
+    if { ![info exists et_thread_fence_target_name] } {
+       set et_thread_fence_target_name ""
+    }
+
+    # If the target has changed since we set the cached value, clear it.
+    set current_target [current_target_name]
+    if { $current_target != $et_thread_fence_target_name } {
+       verbose "check_v3_target_thread_fence: `$et_thread_fence_target_name'" 2
+       set et_thread_fence_target_name $current_target
+       if [info exists et_thread_fence] {
+           verbose "check_v3_target_thread_fence: removing cached result" 2
+           unset et_thread_fence
+       }
+    }
+
+    if [info exists et_thread_fence] {
+       verbose "check_v3_target_thread_fence: using cached result" 2
+    } else {
+       set et_thread_fence 0
+
+       # Set up and preprocess a C++11 test program that depends
+       # on the thread fence to be available.
+       set src thread_fence[pid].cc
+
+       set f [open $src "w"]
+       puts $f "int main() {"
+       puts $f "__atomic_thread_fence (__ATOMIC_SEQ_CST);"
+       puts $f "return 0;"
+       puts $f "}"
+       close $f
+
+       set cxxflags_saved $cxxflags
+       set cxxflags "$cxxflags $DEFAULT_CXXFLAGS -Werror -std=gnu++11"
+
+       set lines [v3_target_compile $src /dev/null executable ""]
+       set cxxflags $cxxflags_saved
+       file delete $src
+
+       if [string match "" $lines] {
+           # No error message, linking succeeded.
+           set et_thread_fence 1
+       } else {
+           verbose "check_v3_target_thread_fence: compilation failed" 2
+       }
+    }
+    verbose "check_v3_target_thread_fence: $et_thread_fence" 2
+    return $et_thread_fence
+}
+
 proc check_v3_target_atomic_builtins { } {
     global cxxflags
     global DEFAULT_CXXFLAGS