1 | /* Various declarations for language-independent diagnostics |
2 | subroutines that are only for use in the compilers proper and not |
3 | the driver or other programs. |
4 | Copyright (C) 2000-2023 Free Software Foundation, Inc. |
5 | |
6 | This file is part of GCC. |
7 | |
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. |
12 | |
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. |
17 | |
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/>. */ |
21 | |
22 | #ifndef GCC_TREE_DIAGNOSTIC_H |
23 | #define GCC_TREE_DIAGNOSTIC_H |
24 | |
25 | /* TREE_BLOCK if the diagnostic is to be reported in some inline |
26 | function inlined into other function, otherwise NULL. */ |
27 | #define diagnostic_abstract_origin(DI) \ |
28 | ((tree) diagnostic_info_auxiliary_data (DI)) |
29 | |
30 | /* Function of last diagnostic message; more generally, function such |
31 | that if next diagnostic message is in it then we don't have to |
32 | mention the function name. */ |
33 | #define diagnostic_last_function(DC) \ |
34 | ((tree) diagnostic_context_auxiliary_data (DC)) |
35 | |
36 | /* True if the last function in which a diagnostic was reported is |
37 | different from the current one. */ |
38 | #define diagnostic_last_function_changed(DC, DI) \ |
39 | (diagnostic_last_function (DC) != (diagnostic_abstract_origin (DI) \ |
40 | ? diagnostic_abstract_origin (DI) \ |
41 | : current_function_decl)) |
42 | |
43 | /* Remember the current function as being the last one in which we report |
44 | a diagnostic. */ |
45 | #define diagnostic_set_last_function(DC, DI) \ |
46 | diagnostic_context_auxiliary_data (DC) \ |
47 | = (((DI) && diagnostic_abstract_origin (DI)) \ |
48 | ? diagnostic_abstract_origin (DI) \ |
49 | : current_function_decl) |
50 | |
51 | void diagnostic_report_current_function (diagnostic_context *, |
52 | diagnostic_info *); |
53 | void virt_loc_aware_diagnostic_finalizer (diagnostic_context *, |
54 | diagnostic_info *); |
55 | |
56 | void tree_diagnostics_defaults (diagnostic_context *context); |
57 | bool default_tree_printer (pretty_printer *, text_info *, const char *, |
58 | int, bool, bool, bool, bool *, const char **); |
59 | |
60 | extern void default_tree_diagnostic_path_printer (diagnostic_context *, |
61 | const diagnostic_path *); |
62 | extern json::value *default_tree_make_json_for_path (diagnostic_context *, |
63 | const diagnostic_path *); |
64 | |
65 | extern void maybe_unwind_expanded_macro_loc (diagnostic_context *context, |
66 | location_t where); |
67 | |
68 | #endif /* ! GCC_TREE_DIAGNOSTIC_H */ |
69 | |