X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=blobdiff_plain;f=folly%2FCppAttributes.h;h=2ebbae8cff35a164d3f778da3db64da12c91ead9;hp=f1ed1c23bcf9b9c7beb057e633df82c395090a39;hb=0fd994133fbaafa1e4b6c86f5c14a101f2086e8c;hpb=4b807f9ef3410b33923c6575cc57a667eeb53a76 diff --git a/folly/CppAttributes.h b/folly/CppAttributes.h index f1ed1c23..2ebbae8c 100644 --- a/folly/CppAttributes.h +++ b/folly/CppAttributes.h @@ -22,6 +22,12 @@ #pragma once +#ifndef __has_attribute +#define FOLLY_HAS_ATTRIBUTE(x) 0 +#else +#define FOLLY_HAS_ATTRIBUTE(x) __has_attribute(x) +#endif + #ifndef __has_cpp_attribute #define FOLLY_HAS_CPP_ATTRIBUTE(x) 0 #else @@ -47,8 +53,12 @@ * FOLLY_FALLTHROUGH; // no warning: annotated fall-through * } */ -#if FOLLY_HAS_CPP_ATTRIBUTE(clang::fallthrough) +#if FOLLY_HAS_CPP_ATTRIBUTE(fallthrough) +#define FOLLY_FALLTHROUGH [[fallthrough]] +#elif FOLLY_HAS_CPP_ATTRIBUTE(clang::fallthrough) #define FOLLY_FALLTHROUGH [[clang::fallthrough]] +#elif FOLLY_HAS_CPP_ATTRIBUTE(gnu::fallthrough) +#define FOLLY_FALLTHROUGH [[gnu::fallthrough]] #else #define FOLLY_FALLTHROUGH #endif @@ -65,7 +75,9 @@ * #endif * } */ -#if FOLLY_HAS_CPP_ATTRIBUTE(__unused__) +#if FOLLY_HAS_CPP_ATTRIBUTE(maybe_unused) +#define FOLLY_MAYBE_UNUSED [[maybe_unused]] +#elif FOLLY_HAS_ATTRIBUTE(__unused__) || __GNUC__ #define FOLLY_MAYBE_UNUSED __attribute__((__unused__)) #else #define FOLLY_MAYBE_UNUSED @@ -90,6 +102,20 @@ */ #if FOLLY_HAS_EXTENSION(nullability) #define FOLLY_NULLABLE _Nullable +#define FOLLY_NONNULL _Nonnull #else #define FOLLY_NULLABLE +#define FOLLY_NONNULL +#endif + +/** + * "Cold" indicates to the compiler that a function is only expected to be + * called from unlikely code paths. It can affect decisions made by the + * optimizer both when processing the function body and when analyzing + * call-sites. + */ +#if __GNUC__ +#define FOLLY_COLD __attribute__((__cold__)) +#else +#define FOLLY_COLD #endif