Line data Source code
1 : /* Selftest support for diagnostics.
2 : Copyright (C) 2016-2026 Free Software Foundation, Inc.
3 :
4 : This file is part of GCC.
5 :
6 : GCC is free software; you can redistribute it and/or modify it under
7 : the terms of the GNU General Public License as published by the Free
8 : Software Foundation; either version 3, or (at your option) any later
9 : version.
10 :
11 : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 : WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 : FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 : for more details.
15 :
16 : You should have received a copy of the GNU General Public License
17 : along with GCC; see the file COPYING3. If not see
18 : <http://www.gnu.org/licenses/>. */
19 :
20 : #ifndef GCC_DIAGNOSTICS_SELFTEST_CONTEXT_H
21 : #define GCC_DIAGNOSTICS_SELFTEST_CONTEXT_H
22 :
23 : /* The selftest code should entirely disappear in a production
24 : configuration, hence we guard all of it with #if CHECKING_P. */
25 :
26 : #if CHECKING_P
27 :
28 : namespace diagnostics {
29 : namespace selftest {
30 :
31 : /* Convenience subclass of diagnostics::context for testing
32 : the diagnostic subsystem. */
33 :
34 : class test_context : public context
35 : {
36 : public:
37 : test_context ();
38 : ~test_context ();
39 :
40 : /* Implementation of diagnostics::start_span_fn, hiding the
41 : real filename (to avoid printing the names of tempfiles). */
42 : static void
43 : start_span_cb (const location_print_policy &,
44 : to_text &sink,
45 : expanded_location exploc);
46 :
47 : /* Report a diagnostic to this context. For a selftest, this
48 : should only be called on a context that uses a non-standard formatter
49 : that e.g. gathers the results in memory, rather than emits to stderr. */
50 : bool
51 : report (enum kind kind,
52 : rich_location &richloc,
53 : const metadata *,
54 : option_id opt_id,
55 : const char * fmt, ...) ATTRIBUTE_GCC_DIAG(6,7);
56 :
57 : const char *test_show_locus (rich_location &richloc);
58 :
59 : /* Setters for the context's source_printing_options
60 : for use in selftests. */
61 64 : void colorize_source (bool val)
62 : {
63 64 : get_source_printing_options ().colorize_source_p = val;
64 : }
65 64 : void show_labels (bool val)
66 : {
67 64 : get_source_printing_options ().show_labels_p = val;
68 : }
69 3700 : void show_line_numbers (bool val)
70 : {
71 3700 : get_source_printing_options ().show_line_numbers_p = val;
72 : }
73 320 : void show_ruler (bool val)
74 : {
75 320 : get_source_printing_options ().show_ruler_p = val;
76 : }
77 1252 : void show_event_links (bool val)
78 : {
79 1252 : get_source_printing_options ().show_event_links_p = val;
80 : }
81 384 : void set_caret_char (unsigned idx, char ch)
82 : {
83 384 : gcc_assert (idx < rich_location::STATICALLY_ALLOCATED_RANGES);
84 384 : get_source_printing_options ().caret_chars[idx] = ch;
85 : }
86 : };
87 :
88 : } // namespace selftest
89 : } // namespace diagnostics
90 :
91 : #endif /* #if CHECKING_P */
92 :
93 : #endif /* GCC_DIAGNOSTICS_SELFTEST_CONTEXT_H */
|