Wireshark
2.9.0-477-g68ec514b
The Wireshark network protocol analyzer
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
/home/wireshark/builders/wireshark-master/ubuntu-16.04-x64/build/ws_diag_control.h
1
/* ws_diag_control.h
2
* Turn compiler diagnostic messages on and off.
3
*
4
* From FreeRADIUS build.h.
5
*
6
* @copyright 2013 The FreeRADIUS server project
7
*
8
* That project is covered by the GPLv2, so:
9
*
10
* SPDX-License-Identifier: GPL-2.0-or-later
11
*/
12
13
#ifndef __WS_DIAG_CONTROL_H__
14
#define __WS_DIAG_CONTROL_H__
15
16
#include "ws_compiler_tests.h"
17
18
#ifdef __cplusplus
19
extern
"C"
{
20
#endif
21
22
#define XSTRINGIFY(x) #x
23
24
/*
25
* Macros for controlling warnings in various compilers.
26
*/
27
#define DIAG_JOINSTR(x,y) XSTRINGIFY(x ## y)
28
29
/*
30
* XXX - this is only for GCC or GCC-compatible compilers, and we only use
31
* it to have a macro that takes a warning as an argument and turns it
32
* off in the appropriate fashion for Clang and GCC; it should only be
33
* used internally in this header.
34
*/
35
#define DIAG_DO_PRAGMA(x) _Pragma (#x)
36
37
#if defined(__clang__)
38
/*
39
* Clang, so we'd use _Pragma("clang diagnostic XXX"), if it's
40
* supported.
41
*/
42
#if WS_IS_AT_LEAST_CLANG_VERSION(2,8)
43
/*
44
* This is Clang 2.8 or later: we can use "clang diagnostic ignored -Wxxx"
45
* and "clang diagnostic push/pop".
46
*/
47
#define DIAG_PRAGMA(x) DIAG_DO_PRAGMA(clang diagnostic x)
48
#define DIAG_OFF(x) DIAG_PRAGMA(push) DIAG_PRAGMA(ignored DIAG_JOINSTR(-W,x))
49
#define DIAG_ON(x) DIAG_PRAGMA(pop)
50
#endif
51
#elif defined(__GNUC__)
52
/*
53
* GCC, or a compiler (other than Clang) that claims to be GCC.
54
* We assume that the compiler accepts _Pragma("GCC diagnostic xxx")
55
* even if it's only claiming to be GCC.
56
*/
57
#if WS_IS_AT_LEAST_GNUC_VERSION(4,8)
58
/*
59
* This is GCC 4.8 or later, or a compiler claiming to be that.
60
* We can use "GCC diagnostic ignored -Wxxx" (introduced in 4.2)
61
* and "GCC diagnostic push/pop" (introduced in 4.6), *and* gcc
62
* supports "-Wpedantic" (introduced in 4.8), allowing us to
63
* turn off pedantic warnings with DIAG_OFF().
64
*/
65
#define DIAG_PRAGMA(x) DIAG_DO_PRAGMA(GCC diagnostic x)
66
#define DIAG_OFF(x) DIAG_PRAGMA(push) DIAG_PRAGMA(ignored DIAG_JOINSTR(-W,x))
67
#define DIAG_ON(x) DIAG_PRAGMA(pop)
68
#endif
69
#endif
70
71
#ifndef DIAG_OFF
72
/*
73
* This is none of the above; we don't have any way to turn diagnostics
74
* on or off.
75
*
76
* XXX - you can do that in MSVC, but it's done differently; we'd
77
* have to have macros for *particular* diagnostics, using the
78
* warning flag for GCC and Clang and the error number for MSVC.
79
*/
80
#define DIAG_OFF(x)
81
#define DIAG_ON(x)
82
#endif
83
84
/* Use for clang specific pragmas, so we can keep -Wpragmas enabled */
85
#ifdef __clang__
86
# define DIAG_OFF_CLANG(x) DIAG_OFF(x)
87
# define DIAG_ON_CLANG(x) DIAG_ON(x)
88
#else
89
# define DIAG_OFF_CLANG(x)
90
# define DIAG_ON_CLANG(x)
91
#endif
92
93
/*
94
* Suppress complaints about narrowing converstions and about signed vs.
95
* unsigned comparison.
96
*
97
* XXX - this is done solely to squelch complaints from code generated
98
* by Flex, but newer versions of Flex might fix the code; can we
99
* check the version of Flex and suppress only the checks that code
100
* generated by that version of Flex triggers?
101
*/
102
#if defined(_MSC_VER)
103
/*
104
* Suppress:
105
*
106
* warning C4018: signed/unsigned mismatch
107
* warning C4244: 'initializing' : conversion from '__int64' to 'int', possible loss of data
108
* warning C4267: 'argument' : conversion from 'size_t' to 'int', possible loss of data
109
*
110
* as well as Visual Studio Code Analyzer warnings:
111
*
112
* warning C6011: Dereferencing NULL pointer
113
* warning C6308: 'realloc' might return null pointer
114
* warning C6386: Buffer overrun
115
* warning C6387: 'XXX' could be '0'
116
* warning C28182: Dereferencing NULL pointer
117
*/
118
#define DIAG_OFF_FLEX \
119
__pragma(warning(push)) \
120
__pragma(warning(disable:4018)) \
121
__pragma(warning(disable:4244)) \
122
__pragma(warning(disable:4267)) \
123
__pragma(warning(disable:6011)) \
124
__pragma(warning(disable:6308)) \
125
__pragma(warning(disable:6386)) \
126
__pragma(warning(disable:6387)) \
127
__pragma(warning(disable:28182))
128
#define DIAG_ON_FLEX __pragma(warning(pop))
129
130
/*
131
* XXX - is there an issue with shadowed definitions with MSVC if
132
* somebody were to happen to use Berkeley YACC rather than Bison?
133
*/
134
#define DIAG_OFF_BYACC
135
#define DIAG_ON_BYACC
136
#else
137
/*
138
* Suppress:
139
*
140
* -Wsigned-compare warnings
141
* -Wshorten-64-to-32 warnings, if the compiler *has* -Wshorten-64-to-32
142
* -Wunreachable-code warnings
143
*
144
* We use DIAG_OFF() and DIAG_ON(), so we only use features that the
145
* compiler supports.
146
*
147
* We disable -Wshorten-64-to-32 if we're using Clang, or if __APPLE__
148
* is defined; that option was originally added to an Apple version of
149
* GCC, and at least some versions of Clang support it - given that
150
* the Clang work started at Apple, it may be in all versions of Clang.
151
*
152
* (Does no version of GCC or Clang support the same generic "you're
153
* narrowing a value, and you didn't throw in a cast to assert that
154
* you know what you're doing" warning that MSVC does?)
155
*/
156
#if defined(__clang__) || defined(__APPLE__)
157
#define DIAG_OFF_FLEX \
158
DIAG_OFF(sign-compare) \
159
DIAG_OFF(shorten-64-to-32) \
160
DIAG_OFF(unreachable-code)
161
#define DIAG_ON_FLEX \
162
DIAG_OFF(unreachable-code) \
163
DIAG_ON(shorten-64-to-32) \
164
DIAG_ON(sign-compare)
165
#else
166
#define DIAG_OFF_FLEX \
167
DIAG_OFF(sign-compare)
168
#define DIAG_ON_FLEX \
169
DIAG_ON(sign-compare)
170
#endif
171
172
/*
173
* Berkeley YACC generates a global declaration of yylval, or the
174
* appropriately prefixed version of yylval, in grammar.h, *even
175
* though it's been told to generate a pure parser, meaning it
176
* doesn't have any global variables*. Bison doesn't do this.
177
*
178
* That causes a warning due to the local declaration in the parser
179
* shadowing the global declaration.
180
*
181
* So, if this is Berkeley YACC, and we have _Pragma, and have pragmas
182
* to suppress diagnostics, we use it to turn off -Wshadow warnings.
183
*/
184
#ifdef YYBYACC
185
#define DIAG_OFF_BYACC \
186
DIAG_OFF(shadow)
187
#define DIAG_ON_BYACC \
188
DIAG_ON(shadow)
189
#else
190
#define DIAG_OFF_BYACC
191
#define DIAG_ON_BYACC
192
#endif
193
#endif
194
195
/*
196
* For dealing with APIs which are only deprecated in macOS (like the
197
* OpenSSL and MIT/Heimdal Kerberos APIs).
198
*
199
* Dear Apple: this is a cross-platform program, and we're not
200
* going to use your Shiny New Frameworks on macOS unless there's
201
* a sufficiently clear benefit to make it worth our while to have
202
* both macOS and non-macOS versions of the code.
203
*/
204
#ifdef __APPLE__
205
# define USES_APPLE_DEPRECATED_API DIAG_OFF(deprecated-declarations)
206
# define USES_APPLE_RST DIAG_ON(deprecated-declarations)
207
#else
208
# define USES_APPLE_DEPRECATED_API
209
# define USES_APPLE_RST
210
#endif
211
212
#ifdef __cplusplus
213
}
214
#endif
215
#endif
/* __WS_DIAG_CONTROL_H__ */
Generated by
1.8.11