Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / lldb / source / Host / macosx / objcxx / PosixSpawnResponsible.h
blob90f8ea9a3be99c141acc5c3ca5aed7bccff2132b
1 //===-- PosixSpawnResponsible.h ---------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
9 #ifndef LLDB_HOST_POSIXSPAWNRESPONSIBLE_H
10 #define LLDB_HOST_POSIXSPAWNRESPONSIBLE_H
12 #include <spawn.h>
14 #if __has_include(<responsibility.h>)
15 #include <dispatch/dispatch.h>
16 #include <dlfcn.h>
17 #include <responsibility.h>
19 // Older SDKs have responsibility.h but not this particular function. Let's
20 // include the prototype here.
21 errno_t responsibility_spawnattrs_setdisclaim(posix_spawnattr_t *attrs,
22 bool disclaim);
24 #endif
26 static inline int setup_posix_spawn_responsible_flag(posix_spawnattr_t *attr) {
27 if (@available(macOS 10.14, *)) {
28 #if __has_include(<responsibility.h>)
29 static __typeof__(responsibility_spawnattrs_setdisclaim)
30 *responsibility_spawnattrs_setdisclaim_ptr;
31 static dispatch_once_t pred;
32 dispatch_once(&pred, ^{
33 responsibility_spawnattrs_setdisclaim_ptr =
34 reinterpret_cast<__typeof__(&responsibility_spawnattrs_setdisclaim)>
35 (dlsym(RTLD_DEFAULT, "responsibility_spawnattrs_setdisclaim"));
36 });
37 if (responsibility_spawnattrs_setdisclaim_ptr)
38 return responsibility_spawnattrs_setdisclaim_ptr(attr, true);
39 #endif
41 return 0;
44 #endif // LLDB_HOST_POSIXSPAWNRESPONSIBLE_H