xref: /dflybsd-src/contrib/binutils-2.34/include/diagnostics.h (revision b52ef7118d1621abed722c5bbbd542210290ecef)
1*fae548d3Szrj /* Copyright (C) 2017-2020 Free Software Foundation, Inc.
2*fae548d3Szrj 
3*fae548d3Szrj    This program is free software; you can redistribute it and/or modify
4*fae548d3Szrj    it under the terms of the GNU General Public License as published by
5*fae548d3Szrj    the Free Software Foundation; either version 3 of the License, or
6*fae548d3Szrj    (at your option) any later version.
7*fae548d3Szrj 
8*fae548d3Szrj    This program is distributed in the hope that it will be useful,
9*fae548d3Szrj    but WITHOUT ANY WARRANTY; without even the implied warranty of
10*fae548d3Szrj    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11*fae548d3Szrj    GNU General Public License for more details.
12*fae548d3Szrj 
13*fae548d3Szrj    You should have received a copy of the GNU General Public License
14*fae548d3Szrj    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
15*fae548d3Szrj 
16*fae548d3Szrj #ifndef DIAGNOSTICS_H
17*fae548d3Szrj #define DIAGNOSTICS_H
18*fae548d3Szrj 
19*fae548d3Szrj /* If at all possible, fix the source rather than using these macros
20*fae548d3Szrj    to silence warnings.  If you do use these macros be aware that
21*fae548d3Szrj    you'll need to condition their use on particular compiler versions,
22*fae548d3Szrj    which can be done for gcc using ansidecl.h's GCC_VERSION macro.
23*fae548d3Szrj 
24*fae548d3Szrj    gcc versions between 4.2 and 4.6 do not allow pragma control of
25*fae548d3Szrj    diagnostics inside functions, giving a hard error if you try to use
26*fae548d3Szrj    the finer control available with later versions.
27*fae548d3Szrj    gcc prior to 4.2 warns about diagnostic push and pop.
28*fae548d3Szrj 
29*fae548d3Szrj    The other macros have restrictions too, for example gcc-5, gcc-6
30*fae548d3Szrj    and gcc-7 warn that -Wstringop-truncation is unknown, unless you
31*fae548d3Szrj    also add DIAGNOSTIC_IGNORE ("-Wpragma").  */
32*fae548d3Szrj 
33*fae548d3Szrj #ifdef __GNUC__
34*fae548d3Szrj # define DIAGNOSTIC_PUSH _Pragma ("GCC diagnostic push")
35*fae548d3Szrj # define DIAGNOSTIC_POP _Pragma ("GCC diagnostic pop")
36*fae548d3Szrj 
37*fae548d3Szrj /* Stringification.  */
38*fae548d3Szrj # define DIAGNOSTIC_STRINGIFY_1(x) #x
39*fae548d3Szrj # define DIAGNOSTIC_STRINGIFY(x) DIAGNOSTIC_STRINGIFY_1 (x)
40*fae548d3Szrj 
41*fae548d3Szrj # define DIAGNOSTIC_IGNORE(option) \
42*fae548d3Szrj   _Pragma (DIAGNOSTIC_STRINGIFY (GCC diagnostic ignored option))
43*fae548d3Szrj #else
44*fae548d3Szrj # define DIAGNOSTIC_PUSH
45*fae548d3Szrj # define DIAGNOSTIC_POP
46*fae548d3Szrj # define DIAGNOSTIC_IGNORE(option)
47*fae548d3Szrj #endif
48*fae548d3Szrj 
49*fae548d3Szrj #if defined (__clang__) /* clang */
50*fae548d3Szrj 
51*fae548d3Szrj # define DIAGNOSTIC_IGNORE_SELF_MOVE DIAGNOSTIC_IGNORE ("-Wself-move")
52*fae548d3Szrj # define DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS \
53*fae548d3Szrj   DIAGNOSTIC_IGNORE ("-Wdeprecated-declarations")
54*fae548d3Szrj # define DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER \
55*fae548d3Szrj   DIAGNOSTIC_IGNORE ("-Wdeprecated-register")
56*fae548d3Szrj # if __has_warning ("-Wenum-compare-switch")
57*fae548d3Szrj #  define DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES \
58*fae548d3Szrj    DIAGNOSTIC_IGNORE ("-Wenum-compare-switch")
59*fae548d3Szrj # endif
60*fae548d3Szrj 
61*fae548d3Szrj # define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL \
62*fae548d3Szrj   DIAGNOSTIC_IGNORE ("-Wformat-nonliteral")
63*fae548d3Szrj 
64*fae548d3Szrj #elif defined (__GNUC__) /* GCC */
65*fae548d3Szrj 
66*fae548d3Szrj # define DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION \
67*fae548d3Szrj   DIAGNOSTIC_IGNORE ("-Wstringop-truncation")
68*fae548d3Szrj 
69*fae548d3Szrj # define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL \
70*fae548d3Szrj   DIAGNOSTIC_IGNORE ("-Wformat-nonliteral")
71*fae548d3Szrj 
72*fae548d3Szrj #endif
73*fae548d3Szrj 
74*fae548d3Szrj #ifndef DIAGNOSTIC_IGNORE_SELF_MOVE
75*fae548d3Szrj # define DIAGNOSTIC_IGNORE_SELF_MOVE
76*fae548d3Szrj #endif
77*fae548d3Szrj 
78*fae548d3Szrj #ifndef DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS
79*fae548d3Szrj # define DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS
80*fae548d3Szrj #endif
81*fae548d3Szrj 
82*fae548d3Szrj #ifndef DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER
83*fae548d3Szrj # define DIAGNOSTIC_IGNORE_DEPRECATED_REGISTER
84*fae548d3Szrj #endif
85*fae548d3Szrj 
86*fae548d3Szrj #ifndef DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES
87*fae548d3Szrj # define DIAGNOSTIC_IGNORE_SWITCH_DIFFERENT_ENUM_TYPES
88*fae548d3Szrj #endif
89*fae548d3Szrj 
90*fae548d3Szrj #ifndef DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION
91*fae548d3Szrj # define DIAGNOSTIC_IGNORE_STRINGOP_TRUNCATION
92*fae548d3Szrj #endif
93*fae548d3Szrj 
94*fae548d3Szrj #ifndef DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
95*fae548d3Szrj # define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
96*fae548d3Szrj #endif
97*fae548d3Szrj 
98*fae548d3Szrj #endif /* DIAGNOSTICS_H */
99