Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4349 | Serge | 1 | /* |
2 | * copyright (c) 2006 Michael Niedermayer |
||
3 | * |
||
4 | * This file is part of FFmpeg. |
||
5 | * |
||
6 | * FFmpeg 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 | * FFmpeg 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 FFmpeg; 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 | #ifndef av_always_inline |
||
36 | #if AV_GCC_VERSION_AT_LEAST(3,1) |
||
37 | # define av_always_inline __attribute__((always_inline)) inline |
||
38 | #elif defined(_MSC_VER) |
||
39 | # define av_always_inline __forceinline |
||
40 | #else |
||
41 | # define av_always_inline inline |
||
42 | #endif |
||
43 | #endif |
||
44 | |||
45 | #ifndef av_extern_inline |
||
46 | #if defined(__ICL) && __ICL >= 1210 || defined(__GNUC_STDC_INLINE__) |
||
47 | # define av_extern_inline extern inline |
||
48 | #else |
||
49 | # define av_extern_inline inline |
||
50 | #endif |
||
51 | #endif |
||
52 | |||
53 | #if AV_GCC_VERSION_AT_LEAST(3,1) |
||
54 | # define av_noinline __attribute__((noinline)) |
||
55 | #elif defined(_MSC_VER) |
||
56 | # define av_noinline __declspec(noinline) |
||
57 | #else |
||
58 | # define av_noinline |
||
59 | #endif |
||
60 | |||
61 | #if AV_GCC_VERSION_AT_LEAST(3,1) |
||
62 | # define av_pure __attribute__((pure)) |
||
63 | #else |
||
64 | # define av_pure |
||
65 | #endif |
||
66 | |||
67 | #if AV_GCC_VERSION_AT_LEAST(2,6) |
||
68 | # define av_const __attribute__((const)) |
||
69 | #else |
||
70 | # define av_const |
||
71 | #endif |
||
72 | |||
73 | #if AV_GCC_VERSION_AT_LEAST(4,3) |
||
74 | # define av_cold __attribute__((cold)) |
||
75 | #else |
||
76 | # define av_cold |
||
77 | #endif |
||
78 | |||
79 | #if AV_GCC_VERSION_AT_LEAST(4,1) |
||
80 | # define av_flatten __attribute__((flatten)) |
||
81 | #else |
||
82 | # define av_flatten |
||
83 | #endif |
||
84 | |||
85 | #if AV_GCC_VERSION_AT_LEAST(3,1) |
||
86 | # define attribute_deprecated __attribute__((deprecated)) |
||
87 | #elif defined(_MSC_VER) |
||
88 | # define attribute_deprecated __declspec(deprecated) |
||
89 | #else |
||
90 | # define attribute_deprecated |
||
91 | #endif |
||
92 | |||
93 | /** |
||
94 | * Disable warnings about deprecated features |
||
95 | * This is useful for sections of code kept for backward compatibility and |
||
96 | * scheduled for removal. |
||
97 | */ |
||
98 | #ifndef AV_NOWARN_DEPRECATED |
||
99 | #if AV_GCC_VERSION_AT_LEAST(4,6) |
||
100 | # define AV_NOWARN_DEPRECATED(code) \ |
||
101 | _Pragma("GCC diagnostic push") \ |
||
102 | _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ |
||
103 | code \ |
||
104 | _Pragma("GCC diagnostic pop") |
||
105 | #elif defined(_MSC_VER) |
||
106 | # define AV_NOWARN_DEPRECATED(code) \ |
||
107 | __pragma(warning(push)) \ |
||
108 | __pragma(warning(disable : 4996)) \ |
||
109 | code; \ |
||
110 | __pragma(warning(pop)) |
||
111 | #else |
||
112 | # define AV_NOWARN_DEPRECATED(code) code |
||
113 | #endif |
||
114 | #endif |
||
115 | |||
116 | |||
117 | #if defined(__GNUC__) |
||
118 | # define av_unused __attribute__((unused)) |
||
119 | #else |
||
120 | # define av_unused |
||
121 | #endif |
||
122 | |||
123 | /** |
||
124 | * Mark a variable as used and prevent the compiler from optimizing it |
||
125 | * away. This is useful for variables accessed only from inline |
||
126 | * assembler without the compiler being aware. |
||
127 | */ |
||
128 | #if AV_GCC_VERSION_AT_LEAST(3,1) |
||
129 | # define av_used __attribute__((used)) |
||
130 | #else |
||
131 | # define av_used |
||
132 | #endif |
||
133 | |||
134 | #if AV_GCC_VERSION_AT_LEAST(3,3) |
||
135 | # define av_alias __attribute__((may_alias)) |
||
136 | #else |
||
137 | # define av_alias |
||
138 | #endif |
||
139 | |||
140 | #if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(__clang__) |
||
141 | # define av_uninit(x) x=x |
||
142 | #else |
||
143 | # define av_uninit(x) x |
||
144 | #endif |
||
145 | |||
146 | #ifdef __GNUC__ |
||
147 | # define av_builtin_constant_p __builtin_constant_p |
||
148 | # define av_printf_format(fmtpos, attrpos) __attribute__((__format__(__printf__, fmtpos, attrpos))) |
||
149 | #else |
||
150 | # define av_builtin_constant_p(x) 0 |
||
151 | # define av_printf_format(fmtpos, attrpos) |
||
152 | #endif |
||
153 | |||
154 | #if AV_GCC_VERSION_AT_LEAST(2,5) |
||
155 | # define av_noreturn __attribute__((noreturn)) |
||
156 | #else |
||
157 | # define av_noreturn |
||
158 | #endif |
||
159 | |||
160 | #endif /* AVUTIL_ATTRIBUTES_H */ |