2791730d |
/*
* copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/** |
ba87f080 |
* @file |
2791730d |
* Macro definitions for various function/variable attributes
*/
#ifndef AVUTIL_ATTRIBUTES_H
#define AVUTIL_ATTRIBUTES_H
#ifdef __GNUC__ |
06309fc7 |
# define AV_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > (x) || __GNUC__ == (x) && __GNUC_MINOR__ >= (y)) |
36e1665d |
# define AV_GCC_VERSION_AT_MOST(x,y) (__GNUC__ < (x) || __GNUC__ == (x) && __GNUC_MINOR__ <= (y)) |
2791730d |
#else
# define AV_GCC_VERSION_AT_LEAST(x,y) 0 |
36e1665d |
# define AV_GCC_VERSION_AT_MOST(x,y) 0 |
2791730d |
#endif
#ifndef av_always_inline
#if AV_GCC_VERSION_AT_LEAST(3,1)
# define av_always_inline __attribute__((always_inline)) inline |
4f2c846d |
#elif defined(_MSC_VER)
# define av_always_inline __forceinline |
2791730d |
#else
# define av_always_inline inline
#endif
#endif
|
0719e44b |
#ifndef av_extern_inline |
fbed9317 |
#if defined(__ICL) && __ICL >= 1210 || defined(__GNUC_STDC_INLINE__)
# define av_extern_inline extern inline
#else |
0719e44b |
# define av_extern_inline inline
#endif |
fbed9317 |
#endif |
0719e44b |
|
1d4af04a |
#if AV_GCC_VERSION_AT_LEAST(3,4)
# define av_warn_unused_result __attribute__((warn_unused_result))
#else
# define av_warn_unused_result
#endif
|
2791730d |
#if AV_GCC_VERSION_AT_LEAST(3,1)
# define av_noinline __attribute__((noinline)) |
33b88f2a |
#elif defined(_MSC_VER)
# define av_noinline __declspec(noinline) |
2791730d |
#else
# define av_noinline
#endif
#if AV_GCC_VERSION_AT_LEAST(3,1)
# define av_pure __attribute__((pure))
#else
# define av_pure
#endif
#if AV_GCC_VERSION_AT_LEAST(2,6)
# define av_const __attribute__((const))
#else
# define av_const
#endif
|
820818a3 |
#if AV_GCC_VERSION_AT_LEAST(4,3) |
2791730d |
# define av_cold __attribute__((cold))
#else
# define av_cold
#endif
|
5858a67f |
#if AV_GCC_VERSION_AT_LEAST(4,1) && !defined(__llvm__) |
2791730d |
# define av_flatten __attribute__((flatten))
#else
# define av_flatten
#endif
#if AV_GCC_VERSION_AT_LEAST(3,1)
# define attribute_deprecated __attribute__((deprecated)) |
0f48acf2 |
#elif defined(_MSC_VER)
# define attribute_deprecated __declspec(deprecated) |
2791730d |
#else
# define attribute_deprecated
#endif
|
fb1c30b7 |
/**
* Disable warnings about deprecated features
* This is useful for sections of code kept for backward compatibility and
* scheduled for removal.
*/
#ifndef AV_NOWARN_DEPRECATED
#if AV_GCC_VERSION_AT_LEAST(4,6)
# define AV_NOWARN_DEPRECATED(code) \
_Pragma("GCC diagnostic push") \
_Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \
code \
_Pragma("GCC diagnostic pop") |
0f48acf2 |
#elif defined(_MSC_VER)
# define AV_NOWARN_DEPRECATED(code) \
__pragma(warning(push)) \
__pragma(warning(disable : 4996)) \
code; \
__pragma(warning(pop)) |
fb1c30b7 |
#else
# define AV_NOWARN_DEPRECATED(code) code
#endif
#endif
|
2791730d |
#if defined(__GNUC__)
# define av_unused __attribute__((unused))
#else
# define av_unused
#endif
|
0374152f |
/**
* Mark a variable as used and prevent the compiler from optimizing it
* away. This is useful for variables accessed only from inline
* assembler without the compiler being aware.
*/
#if AV_GCC_VERSION_AT_LEAST(3,1)
# define av_used __attribute__((used))
#else
# define av_used
#endif
|
820818a3 |
#if AV_GCC_VERSION_AT_LEAST(3,3) |
a74d707c |
# define av_alias __attribute__((may_alias))
#else
# define av_alias
#endif
|
6dac8c83 |
#if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(__clang__) |
2791730d |
# define av_uninit(x) x=x
#else
# define av_uninit(x) x
#endif
|
4ed39eed |
#ifdef __GNUC__
# define av_builtin_constant_p __builtin_constant_p |
67e9ae14 |
# define av_printf_format(fmtpos, attrpos) __attribute__((__format__(__printf__, fmtpos, attrpos))) |
4ed39eed |
#else
# define av_builtin_constant_p(x) 0 |
67e9ae14 |
# define av_printf_format(fmtpos, attrpos) |
4ed39eed |
#endif
|
22662ca5 |
#if AV_GCC_VERSION_AT_LEAST(2,5)
# define av_noreturn __attribute__((noreturn))
#else
# define av_noreturn
#endif
|
2791730d |
#endif /* AVUTIL_ATTRIBUTES_H */ |