Fix file cache tunables documentation
[official-gcc.git] / gcc / diagnostic-core.h
blob8724fa2fd21174439d54e411afb5841cff3028f6
1 /* Declarations of core diagnostic functionality for code that does
2 not need to deal with diagnostic contexts or diagnostic info
3 structures.
4 Copyright (C) 1998-2025 Free Software Foundation, Inc.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
11 version.
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16 for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
22 #ifndef GCC_DIAGNOSTIC_CORE_H
23 #define GCC_DIAGNOSTIC_CORE_H
25 #include "bversion.h"
27 /* Constants used to discriminate diagnostics. */
28 typedef enum
30 #define DEFINE_DIAGNOSTIC_KIND(K, msgid, C) K,
31 #include "diagnostic.def"
32 #undef DEFINE_DIAGNOSTIC_KIND
33 DK_LAST_DIAGNOSTIC_KIND,
34 /* This is used for tagging pragma pops in the diagnostic
35 classification history chain. */
36 DK_POP,
37 /* This is used internally to note that a diagnostic is enabled
38 without mandating any specific type. */
39 DK_ANY,
40 } diagnostic_t;
42 /* RAII-style class for grouping related diagnostics. */
44 class auto_diagnostic_group
46 public:
47 auto_diagnostic_group ();
48 ~auto_diagnostic_group ();
51 /* RAII-style class for nesting hierarchical diagnostics.
52 Any diagnostics emitted within the lifetime of this object
53 will be treated as one level of nesting deeper than diagnostics
54 emitted outside the lifetime of the object. */
56 class auto_diagnostic_nesting_level
58 public:
59 auto_diagnostic_nesting_level ();
60 ~auto_diagnostic_nesting_level ();
63 /* Forward decl. */
64 class diagnostic_metadata; /* See diagnostic-metadata.h. */
66 /* A class to use for the ID of an option that controls
67 a particular diagnostic.
68 This is just a wrapper around "int", but better documents
69 the intent of the code. */
71 struct diagnostic_option_id
73 diagnostic_option_id () : m_idx (0) {}
75 diagnostic_option_id (int idx) : m_idx (idx) {}
76 /* Ideally we'd take an enum opt_code here, but we don't
77 want to depend on its decl. */
79 bool operator== (diagnostic_option_id other) const
81 return m_idx == other.m_idx;
84 int m_idx;
87 extern const char *progname;
89 extern const char *trim_filename (const char *);
91 /* If we haven't already defined a front-end-specific diagnostics
92 style, use the generic one. */
93 #ifndef GCC_DIAG_STYLE
94 #define GCC_DIAG_STYLE __gcc_tdiag__
95 #endif
96 /* None of these functions are suitable for ATTRIBUTE_PRINTF, because
97 each language front end can extend them with its own set of format
98 specifiers. We must use custom format checks. */
99 #if (CHECKING_P && GCC_VERSION >= 4001) || GCC_VERSION == BUILDING_GCC_VERSION
100 #define ATTRIBUTE_GCC_DIAG(m, n) __attribute__ ((__format__ (GCC_DIAG_STYLE, m, n))) ATTRIBUTE_NONNULL(m)
101 #else
102 #define ATTRIBUTE_GCC_DIAG(m, n) ATTRIBUTE_NONNULL(m)
103 #endif
104 extern void internal_error (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2)
105 ATTRIBUTE_NORETURN;
106 extern void internal_error_no_backtrace (const char *, ...)
107 ATTRIBUTE_GCC_DIAG(1,2) ATTRIBUTE_NORETURN;
108 /* Pass one of the OPT_W* from options.h as the first parameter. */
109 extern bool warning (diagnostic_option_id,
110 const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
111 extern bool warning_n (location_t,
112 diagnostic_option_id,
113 unsigned HOST_WIDE_INT,
114 const char *, const char *, ...)
115 ATTRIBUTE_GCC_DIAG(4,6) ATTRIBUTE_GCC_DIAG(5,6);
116 extern bool warning_n (rich_location *,
117 diagnostic_option_id,
118 unsigned HOST_WIDE_INT,
119 const char *, const char *, ...)
120 ATTRIBUTE_GCC_DIAG(4, 6) ATTRIBUTE_GCC_DIAG(5, 6);
121 extern bool warning_at (location_t,
122 diagnostic_option_id,
123 const char *, ...)
124 ATTRIBUTE_GCC_DIAG(3,4);
125 extern bool warning_at (rich_location *,
126 diagnostic_option_id,
127 const char *, ...)
128 ATTRIBUTE_GCC_DIAG(3,4);
129 extern bool warning_meta (rich_location *,
130 const diagnostic_metadata &,
131 diagnostic_option_id,
132 const char *, ...)
133 ATTRIBUTE_GCC_DIAG(4,5);
134 extern void error (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2);
135 extern void error_n (location_t, unsigned HOST_WIDE_INT, const char *,
136 const char *, ...)
137 ATTRIBUTE_GCC_DIAG(3,5) ATTRIBUTE_GCC_DIAG(4,5);
138 extern void error_at (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
139 extern void error_at (rich_location *, const char *, ...)
140 ATTRIBUTE_GCC_DIAG(2,3);
141 extern void error_meta (rich_location *, const diagnostic_metadata &,
142 const char *, ...)
143 ATTRIBUTE_GCC_DIAG(3,4);
144 extern void fatal_error (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3)
145 ATTRIBUTE_NORETURN;
146 /* Pass one of the OPT_W* from options.h as the second parameter. */
147 extern bool pedwarn (location_t,
148 diagnostic_option_id,
149 const char *, ...)
150 ATTRIBUTE_GCC_DIAG(3,4);
151 extern bool pedwarn (rich_location *,
152 diagnostic_option_id,
153 const char *, ...)
154 ATTRIBUTE_GCC_DIAG(3,4);
155 extern bool permerror (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
156 extern bool permerror (rich_location *, const char *,
157 ...) ATTRIBUTE_GCC_DIAG(2,3);
158 extern bool permerror_opt (location_t,
159 diagnostic_option_id,
160 const char *, ...)
161 ATTRIBUTE_GCC_DIAG(3,4);
162 extern bool permerror_opt (rich_location *,
163 diagnostic_option_id,
164 const char *, ...)
165 ATTRIBUTE_GCC_DIAG(3,4);
166 extern void sorry (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2);
167 extern void sorry_at (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
168 extern void inform (location_t, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
169 extern void inform (rich_location *, const char *, ...) ATTRIBUTE_GCC_DIAG(2,3);
170 extern void inform_n (location_t, unsigned HOST_WIDE_INT, const char *,
171 const char *, ...)
172 ATTRIBUTE_GCC_DIAG(3,5) ATTRIBUTE_GCC_DIAG(4,5);
173 extern void verbatim (const char *, ...) ATTRIBUTE_GCC_DIAG(1,2);
174 extern bool emit_diagnostic (diagnostic_t,
175 location_t,
176 diagnostic_option_id,
177 const char *, ...) ATTRIBUTE_GCC_DIAG(4,5);
178 extern bool emit_diagnostic (diagnostic_t,
179 rich_location *,
180 diagnostic_option_id,
181 const char *, ...) ATTRIBUTE_GCC_DIAG(4,5);
182 extern bool emit_diagnostic_valist (diagnostic_t,
183 location_t,
184 diagnostic_option_id,
185 const char *, va_list *)
186 ATTRIBUTE_GCC_DIAG (4,0);
187 extern bool emit_diagnostic_valist_meta (diagnostic_t,
188 rich_location *,
189 const diagnostic_metadata *,
190 diagnostic_option_id,
191 const char *,
192 va_list *) ATTRIBUTE_GCC_DIAG (5,0);
193 extern bool seen_error (void);
195 #ifdef BUFSIZ
196 /* N.B. Unlike all the others, fnotice is just gettext+fprintf, and
197 therefore it can have ATTRIBUTE_PRINTF. */
198 extern void fnotice (FILE *, const char *, ...)
199 ATTRIBUTE_PRINTF_2;
200 #endif
202 #endif /* ! GCC_DIAGNOSTIC_CORE_H */