misc/winutils/include/libavutil/attributes.h
changeset 15388 262003f2e19a
parent 15387 90a79670de52
child 15389 7718bdf60d45
equal deleted inserted replaced
15387:90a79670de52 15388:262003f2e19a
     1 /*
       
     2  * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
       
     3  *
       
     4  * This file is part of Libav.
       
     5  *
       
     6  * Libav is free software; you can redistribute it and/or
       
     7  * modify it under the terms of the GNU Lesser General Public
       
     8  * License as published by the Free Software Foundation; either
       
     9  * version 2.1 of the License, or (at your option) any later version.
       
    10  *
       
    11  * Libav is distributed in the hope that it will be useful,
       
    12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
       
    14  * Lesser General Public License for more details.
       
    15  *
       
    16  * You should have received a copy of the GNU Lesser General Public
       
    17  * License along with Libav; if not, write to the Free Software
       
    18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
       
    19  */
       
    20 
       
    21 /**
       
    22  * @file
       
    23  * Macro definitions for various function/variable attributes
       
    24  */
       
    25 
       
    26 #ifndef AVUTIL_ATTRIBUTES_H
       
    27 #define AVUTIL_ATTRIBUTES_H
       
    28 
       
    29 #ifdef __GNUC__
       
    30 #    define AV_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > x || __GNUC__ == x && __GNUC_MINOR__ >= y)
       
    31 #else
       
    32 #    define AV_GCC_VERSION_AT_LEAST(x,y) 0
       
    33 #endif
       
    34 
       
    35 #if AV_GCC_VERSION_AT_LEAST(3,1)
       
    36 #    define av_always_inline __attribute__((always_inline)) inline
       
    37 #elif defined(_MSC_VER)
       
    38 #    define av_always_inline __forceinline
       
    39 #else
       
    40 #    define av_always_inline inline
       
    41 #endif
       
    42 
       
    43 #if AV_GCC_VERSION_AT_LEAST(3,1)
       
    44 #    define av_noinline __attribute__((noinline))
       
    45 #else
       
    46 #    define av_noinline
       
    47 #endif
       
    48 
       
    49 #if AV_GCC_VERSION_AT_LEAST(3,1)
       
    50 #    define av_pure __attribute__((pure))
       
    51 #else
       
    52 #    define av_pure
       
    53 #endif
       
    54 
       
    55 #if AV_GCC_VERSION_AT_LEAST(2,6)
       
    56 #    define av_const __attribute__((const))
       
    57 #else
       
    58 #    define av_const
       
    59 #endif
       
    60 
       
    61 #if AV_GCC_VERSION_AT_LEAST(4,3)
       
    62 #    define av_cold __attribute__((cold))
       
    63 #else
       
    64 #    define av_cold
       
    65 #endif
       
    66 
       
    67 #if AV_GCC_VERSION_AT_LEAST(4,1)
       
    68 #    define av_flatten __attribute__((flatten))
       
    69 #else
       
    70 #    define av_flatten
       
    71 #endif
       
    72 
       
    73 #if AV_GCC_VERSION_AT_LEAST(3,1)
       
    74 #    define attribute_deprecated __attribute__((deprecated))
       
    75 #else
       
    76 #    define attribute_deprecated
       
    77 #endif
       
    78 
       
    79 #if defined(__GNUC__)
       
    80 #    define av_unused __attribute__((unused))
       
    81 #else
       
    82 #    define av_unused
       
    83 #endif
       
    84 
       
    85 /**
       
    86  * Mark a variable as used and prevent the compiler from optimizing it
       
    87  * away.  This is useful for variables accessed only from inline
       
    88  * assembler without the compiler being aware.
       
    89  */
       
    90 #if AV_GCC_VERSION_AT_LEAST(3,1)
       
    91 #    define av_used __attribute__((used))
       
    92 #else
       
    93 #    define av_used
       
    94 #endif
       
    95 
       
    96 #if AV_GCC_VERSION_AT_LEAST(3,3)
       
    97 #   define av_alias __attribute__((may_alias))
       
    98 #else
       
    99 #   define av_alias
       
   100 #endif
       
   101 
       
   102 #if defined(__GNUC__) && !defined(__ICC)
       
   103 #    define av_uninit(x) x=x
       
   104 #else
       
   105 #    define av_uninit(x) x
       
   106 #endif
       
   107 
       
   108 #ifdef __GNUC__
       
   109 #    define av_builtin_constant_p __builtin_constant_p
       
   110 #    define av_printf_format(fmtpos, attrpos) __attribute__((__format__(__printf__, fmtpos, attrpos)))
       
   111 #else
       
   112 #    define av_builtin_constant_p(x) 0
       
   113 #    define av_printf_format(fmtpos, attrpos)
       
   114 #endif
       
   115 
       
   116 #if AV_GCC_VERSION_AT_LEAST(2,5)
       
   117 #    define av_noreturn __attribute__((noreturn))
       
   118 #else
       
   119 #    define av_noreturn
       
   120 #endif
       
   121 
       
   122 #endif /* AVUTIL_ATTRIBUTES_H */