| // Copyright 2020 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // This file provides macros for Fuchsia handle annotations to better facilitate |
| // Clang static analysis. |
| |
| #ifndef SYSROOT_ZIRCON_ANALYZER_H_ |
| #define SYSROOT_ZIRCON_ANALYZER_H_ |
| |
| #if defined(__clang_analyzer__) |
| // The argument that has this annotation would be generated by callee |
| // and handled back to the caller. Caller is responsible for freeing the handle. |
| #define ZX_HANDLE_ACQUIRE __attribute__((acquire_handle("Fuchsia"))) |
| // The argument that has this annotation would be released by callee. |
| // Caller must not use the handle again after calling the function. |
| #define ZX_HANDLE_RELEASE __attribute__((release_handle("Fuchsia"))) |
| // The argument that has this annotation would be used by callee. Caller still |
| // owns this handle and is responsible for freeing the handle. |
| #define ZX_HANDLE_USE __attribute__((use_handle("Fuchsia"))) |
| // When an argument has this annotation, the caller borrows the argument from |
| // resource (e.g. handle) from the callee. Caller must not free the handle. |
| #define ZX_HANDLE_ACQUIRE_UNOWNED __attribute__((acquire_handle("FuchsiaUnowned"))) |
| #else |
| #define ZX_HANDLE_ACQUIRE |
| #define ZX_HANDLE_RELEASE |
| #define ZX_HANDLE_USE |
| #define ZX_HANDLE_ACQUIRE_UNOWNED |
| #endif // __clang_analyzer__ |
| |
| #endif // SYSROOT_ZIRCON_ANALYZER_H_ |