[compiler-rt] 40ae296 - [TSan][libdispatch] Guard test execution on old platforms

Julian Lettner via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 18 18:35:33 PDT 2020


Author: Julian Lettner
Date: 2020-08-18T18:34:14-07:00
New Revision: 40ae296bc39a2780ec4cd99edd87cce35585b9ad

URL: https://github.com/llvm/llvm-project/commit/40ae296bc39a2780ec4cd99edd87cce35585b9ad
DIFF: https://github.com/llvm/llvm-project/commit/40ae296bc39a2780ec4cd99edd87cce35585b9ad.diff

LOG: [TSan][libdispatch] Guard test execution on old platforms

`dispatch_async_and_wait()` was introduced in macOS 10.14.  Let's
forward declare it to ensure we can compile the test with older SDKs and
guard execution by checking if the symbol is available.  (We can't use
`__builtin_available()`, because that itself requires a higher minimum
deployment target.)  We also need to specify the `-undefined
dynamic_lookup` compiler flag.

Differential Revision: https://reviews.llvm.org/D85995

Added: 
    

Modified: 
    compiler-rt/test/tsan/libdispatch/async_and_wait.c

Removed: 
    


################################################################################
diff  --git a/compiler-rt/test/tsan/libdispatch/async_and_wait.c b/compiler-rt/test/tsan/libdispatch/async_and_wait.c
index 5e63c118aef5..b8d239824a10 100644
--- a/compiler-rt/test/tsan/libdispatch/async_and_wait.c
+++ b/compiler-rt/test/tsan/libdispatch/async_and_wait.c
@@ -1,13 +1,25 @@
-// RUN: %clang_tsan %s -o %t
+// RUN: %clang_tsan %s -o %t -undefined dynamic_lookup
 // RUN: %run %t 2>&1 | FileCheck %s --implicit-check-not='ThreadSanitizer'
 
 #include "dispatch/dispatch.h"
 
 #include <stdio.h>
 
+// Allow compilation with pre-macOS 10.14 (and aligned) SDKs
+API_AVAILABLE(macos(10.14), ios(12.0), tvos(12.0), watchos(5.0))
+DISPATCH_EXPORT DISPATCH_NONNULL_ALL DISPATCH_NOTHROW
+void dispatch_async_and_wait(dispatch_queue_t queue,
+           DISPATCH_NOESCAPE dispatch_block_t block);
+
 long global;
 
 int main() {
+  // Guard execution on pre-macOS 10.14 (and aligned) platforms
+  if (dispatch_async_and_wait == NULL) {
+    fprintf(stderr, "Done.\n");
+    return 0;
+  }
+
   dispatch_queue_t q = dispatch_queue_create("my.queue", DISPATCH_QUEUE_SERIAL);
   dispatch_semaphore_t s = dispatch_semaphore_create(0);
 
@@ -26,6 +38,7 @@ int main() {
   global++;
 
   fprintf(stderr, "Done.\n");
+  return 0;
 }
 
 // CHECK: Done.


        


More information about the llvm-commits mailing list