//===-- Portable attributes -------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // This header file defines macros for declaring attributes for functions, // types, and variables. // // These macros are used within llvm-libc and allow the compiler to optimize, // where applicable, certain function calls. // // Most macros here are exposing GCC or Clang features, and are stubbed out for // other compilers. #ifndef LLVM_LIBC_SRC___SUPPORT_MACROS_ATTRIBUTES_H #define LLVM_LIBC_SRC___SUPPORT_MACROS_ATTRIBUTES_H #include "properties/architectures.h" #ifndef __has_attribute #define __has_attribute … #endif #define LIBC_INLINE … #define LIBC_INLINE_VAR … #define LIBC_INLINE_ASM … #define LIBC_UNUSED … #ifdef LIBC_TARGET_ARCH_IS_GPU #define LIBC_THREAD_LOCAL #else #define LIBC_THREAD_LOCAL … #endif #if __cplusplus >= 202002L #define LIBC_CONSTINIT … #elif __has_attribute(__require_constant_initialization__) #define LIBC_CONSTINIT … #else #define LIBC_CONSTINIT #endif #if defined(__clang__) && __has_attribute(preferred_type) #define LIBC_PREFERED_TYPE(TYPE) … #else #define LIBC_PREFERED_TYPE … #endif #endif // LLVM_LIBC_SRC___SUPPORT_MACROS_ATTRIBUTES_H