aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2024-11-13 08:26:58 -0500
committerDavid Malcolm <dmalcolm@redhat.com>2024-11-13 08:26:58 -0500
commit5ace2b23199f4216b0cdb0a41a68617bcdee9b3e (patch)
treee57010b45c79427d8d67631825cf6ef31faa38c9 /gcc
parent5a674367c6da870184f3bdb7ec110b96aa91bb2b (diff)
downloadgcc-5ace2b23199f4216b0cdb0a41a68617bcdee9b3e.zip
gcc-5ace2b23199f4216b0cdb0a41a68617bcdee9b3e.tar.gz
gcc-5ace2b23199f4216b0cdb0a41a68617bcdee9b3e.tar.bz2
diagnostics: avoid using global_dc in path-printing
gcc/analyzer/ChangeLog: * checker-path.cc (checker_path::debug): Explicitly use global_dc's reference printer. * diagnostic-manager.cc (diagnostic_manager::prune_interproc_events): Likewise. (diagnostic_manager::prune_system_headers): Likewise. gcc/ChangeLog: * diagnostic-path.cc (diagnostic_event::get_desc): Add param "ref_pp" and use instead of global_dc. (class path_label): Likewise, adding field m_ref_pp. (event_range::event_range): Add param "ref_pp" and pass to m_path_label. (path_summary::path_summary): Add param "ref_pp" and pass to event_range ctor. (diagnostic_text_output_format::print_path): Pass *pp to path_summary ctor. (selftest::test_empty_path): Pass *event_pp to pass_summary ctor. (selftest::test_intraprocedural_path): Likewise. (selftest::test_interprocedural_path_1): Likewise. (selftest::test_interprocedural_path_2): Likewise. (selftest::test_recursion): Likewise. (selftest::test_control_flow_1): Likewise. (selftest::test_control_flow_2): Likewise. (selftest::test_control_flow_3): Likewise. (selftest::assert_cfg_edge_path_streq): Likewise. (selftest::test_control_flow_5): Likewise. (selftest::test_control_flow_6): Likewise. * diagnostic-path.h (diagnostic_event::get_desc): Add param "ref_pp". * lazy-diagnostic-path.cc (selftest::test_intraprocedural_path): Pass *event_pp to get_desc. * simple-diagnostic-path.cc (selftest::test_intraprocedural_path): Likewise. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
Diffstat (limited to 'gcc')
-rw-r--r--gcc/analyzer/checker-path.cc2
-rw-r--r--gcc/analyzer/diagnostic-manager.cc9
-rw-r--r--gcc/diagnostic-path.cc63
-rw-r--r--gcc/diagnostic-path.h2
-rw-r--r--gcc/lazy-diagnostic-path.cc6
-rw-r--r--gcc/simple-diagnostic-path.cc6
6 files changed, 53 insertions, 35 deletions
diff --git a/gcc/analyzer/checker-path.cc b/gcc/analyzer/checker-path.cc
index 98b5988..d607679 100644
--- a/gcc/analyzer/checker-path.cc
+++ b/gcc/analyzer/checker-path.cc
@@ -136,7 +136,7 @@ checker_path::debug () const
int i;
FOR_EACH_VEC_ELT (m_events, i, e)
{
- label_text event_desc (e->get_desc ());
+ label_text event_desc (e->get_desc (*global_dc->get_reference_printer ()));
fprintf (stderr,
"[%i]: %s \"%s\"\n",
i,
diff --git a/gcc/analyzer/diagnostic-manager.cc b/gcc/analyzer/diagnostic-manager.cc
index 999fb9c..0b2e4ee 100644
--- a/gcc/analyzer/diagnostic-manager.cc
+++ b/gcc/analyzer/diagnostic-manager.cc
@@ -2833,7 +2833,8 @@ diagnostic_manager::prune_interproc_events (checker_path *path) const
if (get_logger ())
{
label_text desc
- (path->get_checker_event (idx)->get_desc ());
+ (path->get_checker_event (idx)->get_desc
+ (*global_dc->get_reference_printer ()));
log ("filtering events %i-%i:"
" irrelevant call/entry/return: %s",
idx, idx + 2, desc.get ());
@@ -2855,7 +2856,8 @@ diagnostic_manager::prune_interproc_events (checker_path *path) const
if (get_logger ())
{
label_text desc
- (path->get_checker_event (idx)->get_desc ());
+ (path->get_checker_event (idx)->get_desc
+ (*global_dc->get_reference_printer ()));
log ("filtering events %i-%i:"
" irrelevant call/return: %s",
idx, idx + 1, desc.get ());
@@ -2952,7 +2954,8 @@ diagnostic_manager::prune_system_headers (checker_path *path) const
{
if (get_logger ())
{
- label_text desc (event->get_desc ());
+ label_text desc
+ (event->get_desc (*global_dc->get_reference_printer ()));
log ("filtering event %i:"
"system header entry event: %s",
idx, desc.get ());
diff --git a/gcc/diagnostic-path.cc b/gcc/diagnostic-path.cc
index 2b1a093..326f2a3 100644
--- a/gcc/diagnostic-path.cc
+++ b/gcc/diagnostic-path.cc
@@ -159,9 +159,9 @@ diagnostic_event::meaning::maybe_get_property_str (enum property p)
(for debugging/logging purposes). */
label_text
-diagnostic_event::get_desc () const
+diagnostic_event::get_desc (pretty_printer &ref_pp) const
{
- auto pp = global_dc->clone_printer ();
+ auto pp = ref_pp.clone ();
pp_show_color (pp.get ()) = false;
print_desc (*pp.get ());
return label_text::take (xstrdup (pp_formatted_text (pp.get ())));
@@ -262,10 +262,13 @@ class path_label : public range_label
{
public:
path_label (const diagnostic_path &path,
+ const pretty_printer &ref_pp,
unsigned start_idx,
bool colorize,
bool allow_emojis)
- : m_path (path), m_start_idx (start_idx), m_effects (*this),
+ : m_path (path),
+ m_ref_pp (ref_pp),
+ m_start_idx (start_idx), m_effects (*this),
m_colorize (colorize), m_allow_emojis (allow_emojis)
{}
@@ -276,7 +279,7 @@ class path_label : public range_label
const diagnostic_event::meaning meaning (event.get_meaning ());
- auto pp = global_dc->clone_printer ();
+ auto pp = m_ref_pp.clone ();
pp_show_color (pp.get ()) = m_colorize;
diagnostic_event_id_t event_id (event_idx);
@@ -349,6 +352,7 @@ class path_label : public range_label
}
const diagnostic_path &m_path;
+ const pretty_printer &m_ref_pp;
unsigned m_start_idx;
path_label_effects m_effects;
const bool m_colorize;
@@ -540,7 +544,9 @@ struct event_range
int m_max_label_source_column;
};
- event_range (const diagnostic_path &path, unsigned start_idx,
+ event_range (const diagnostic_path &path,
+ const pretty_printer &ref_pp,
+ unsigned start_idx,
const diagnostic_event &initial_event,
per_thread_summary &t,
bool show_event_links,
@@ -551,7 +557,8 @@ struct event_range
m_logical_loc (initial_event.get_logical_location ()),
m_stack_depth (initial_event.get_stack_depth ()),
m_start_idx (start_idx), m_end_idx (start_idx),
- m_path_label (path, start_idx, colorize_labels, allow_emojis),
+ m_path_label (path, ref_pp,
+ start_idx, colorize_labels, allow_emojis),
m_richloc (initial_event.get_location (), &m_path_label, nullptr),
m_thread_id (initial_event.get_thread_id ()),
m_per_thread_summary (t),
@@ -716,6 +723,7 @@ struct event_range
struct path_summary
{
path_summary (const path_print_policy &policy,
+ const pretty_printer &ref_pp,
const diagnostic_path &path,
bool check_rich_locations,
bool colorize = false,
@@ -779,6 +787,7 @@ per_thread_summary::interprocedural_p () const
/* path_summary's ctor. */
path_summary::path_summary (const path_print_policy &policy,
+ const pretty_printer &ref_pp,
const diagnostic_path &path,
bool check_rich_locations,
bool colorize,
@@ -804,7 +813,8 @@ path_summary::path_summary (const path_print_policy &policy,
auto theme = policy.get_diagram_theme ();
const bool allow_emojis = theme ? theme->emojis_p () : false;
- cur_event_range = new event_range (path, idx, event, pts,
+ cur_event_range = new event_range (path, ref_pp,
+ idx, event, pts,
show_event_links,
colorize,
allow_emojis);
@@ -1188,6 +1198,7 @@ diagnostic_text_output_format::print_path (const diagnostic_path &path)
const bool show_event_links
= get_context ().m_source_printing.show_event_links_p;
path_summary summary (policy,
+ *pp,
path,
check_rich_locations,
colorize,
@@ -1239,7 +1250,7 @@ test_empty_path (pretty_printer *event_pp)
test_diagnostic_context dc;
diagnostic_text_output_format text_output (dc);
path_print_policy policy (text_output);
- path_summary summary (policy, path, false);
+ path_summary summary (policy, *event_pp, path, false);
ASSERT_EQ (summary.get_num_ranges (), 0);
print_path_summary_as_text (summary, text_output, true);
@@ -1262,7 +1273,7 @@ test_intraprocedural_path (pretty_printer *event_pp)
test_diagnostic_context dc;
diagnostic_text_output_format text_output (dc);
path_print_policy policy (text_output);
- path_summary summary (policy, path, false, false, false);
+ path_summary summary (policy, *event_pp, path, false, false, false);
ASSERT_EQ (summary.get_num_ranges (), 1);
print_path_summary_as_text (summary, text_output, true);
@@ -1299,7 +1310,7 @@ test_interprocedural_path_1 (pretty_printer *event_pp)
test_diagnostic_context dc;
diagnostic_text_output_format text_output (dc, false);
path_print_policy policy (text_output);
- path_summary summary (policy, path, false);
+ path_summary summary (policy, *event_pp, path, false);
ASSERT_EQ (summary.get_num_ranges (), 9);
dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
@@ -1361,7 +1372,7 @@ test_interprocedural_path_1 (pretty_printer *event_pp)
dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_UNICODE);
diagnostic_text_output_format text_output (dc);
path_print_policy policy (text_output);
- path_summary summary (policy, path, false);
+ path_summary summary (policy, *event_pp, path, false);
print_path_summary_as_text (summary, text_output, true);
ASSERT_STREQ
(" `test': events 1-2 (depth 0)\n"
@@ -1438,7 +1449,7 @@ test_interprocedural_path_2 (pretty_printer *event_pp)
test_diagnostic_context dc;
diagnostic_text_output_format text_output (dc);
path_print_policy policy (text_output);
- path_summary summary (policy, path, false);
+ path_summary summary (policy, *event_pp, path, false);
ASSERT_EQ (summary.get_num_ranges (), 5);
dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_ASCII);
print_path_summary_as_text (summary, text_output, true);
@@ -1475,7 +1486,7 @@ test_interprocedural_path_2 (pretty_printer *event_pp)
dc.set_text_art_charset (DIAGNOSTICS_TEXT_ART_CHARSET_UNICODE);
diagnostic_text_output_format text_output (dc);
path_print_policy policy (text_output);
- path_summary summary (policy, path, false);
+ path_summary summary (policy, *event_pp, path, false);
print_path_summary_as_text (summary, text_output, true);
ASSERT_STREQ
(" `foo': events 1-2 (depth 0)\n"
@@ -1527,7 +1538,7 @@ test_recursion (pretty_printer *event_pp)
diagnostic_text_output_format text_output (dc);
path_print_policy policy (text_output);
- path_summary summary (policy, path, false);
+ path_summary summary (policy, *event_pp, path, false);
ASSERT_EQ (summary.get_num_ranges (), 4);
print_path_summary_as_text (summary, text_output, true);
@@ -1559,7 +1570,7 @@ test_recursion (pretty_printer *event_pp)
diagnostic_text_output_format text_output (dc);
path_print_policy policy (text_output);
- path_summary summary (policy, path, false);
+ path_summary summary (policy, *event_pp, path, false);
print_path_summary_as_text (summary, text_output, true);
ASSERT_STREQ
(" `factorial': events 1-2 (depth 0)\n"
@@ -1681,7 +1692,7 @@ test_control_flow_1 (const line_table_case &case_,
dc.m_source_printing.show_event_links_p = true;
diagnostic_text_output_format text_output (dc);
path_print_policy policy (text_output);
- path_summary summary (policy, path, true);
+ path_summary summary (policy, *event_pp, path, true);
print_path_summary_as_text (summary, text_output, false);
ASSERT_STREQ
(" events 1-3\n"
@@ -1707,7 +1718,7 @@ test_control_flow_1 (const line_table_case &case_,
dc.m_source_printing.show_event_links_p = false;
diagnostic_text_output_format text_output (dc);
path_print_policy policy (text_output);
- path_summary summary (policy, path, true);
+ path_summary summary (policy, *event_pp, path, true);
print_path_summary_as_text (summary, text_output, false);
ASSERT_STREQ
(" events 1-3\n"
@@ -1731,7 +1742,7 @@ test_control_flow_1 (const line_table_case &case_,
dc.m_source_printing.show_event_links_p = true;
diagnostic_text_output_format text_output (dc);
path_print_policy policy (text_output);
- path_summary summary (policy, path, true);
+ path_summary summary (policy, *event_pp, path, true);
print_path_summary_as_text (summary, text_output, false);
ASSERT_STREQ
(" events 1-3\n"
@@ -1758,7 +1769,7 @@ test_control_flow_1 (const line_table_case &case_,
dc.m_source_printing.show_event_links_p = false;
diagnostic_text_output_format text_output (dc);
path_print_policy policy (text_output);
- path_summary summary (policy, path, true);
+ path_summary summary (policy, *event_pp, path, true);
print_path_summary_as_text (summary, text_output, false);
ASSERT_STREQ
(" events 1-3\n"
@@ -1781,7 +1792,7 @@ test_control_flow_1 (const line_table_case &case_,
dc.m_source_printing.show_event_links_p = true;
diagnostic_text_output_format text_output (dc);
path_print_policy policy (text_output);
- path_summary summary (policy, path, true);
+ path_summary summary (policy, *event_pp, path, true);
print_path_summary_as_text (summary, text_output, false);
ASSERT_STREQ
(" events 1-3\n"
@@ -1808,7 +1819,7 @@ test_control_flow_1 (const line_table_case &case_,
dc.m_source_printing.show_line_numbers_p = true;
diagnostic_text_output_format text_output (dc);
path_print_policy policy (text_output);
- path_summary summary (policy, path, true);
+ path_summary summary (policy, *event_pp, path, true);
print_path_summary_as_text (summary, text_output, false);
ASSERT_STREQ
(" events 1-3\n"
@@ -1879,7 +1890,7 @@ test_control_flow_2 (const line_table_case &case_,
dc.m_source_printing.show_line_numbers_p = true;
diagnostic_text_output_format text_output (dc);
path_print_policy policy (text_output);
- path_summary summary (policy, path, true);
+ path_summary summary (policy, *event_pp, path, true);
print_path_summary_as_text (summary, text_output, false);
ASSERT_STREQ
(" events 1-3\n"
@@ -1966,7 +1977,7 @@ test_control_flow_3 (const line_table_case &case_,
dc.m_source_printing.show_line_numbers_p = true;
diagnostic_text_output_format text_output (dc);
path_print_policy policy (text_output);
- path_summary summary (policy, path, true);
+ path_summary summary (policy, *event_pp, path, true);
print_path_summary_as_text (summary, text_output, false);
ASSERT_STREQ
(" events 1-2\n"
@@ -2024,7 +2035,7 @@ assert_cfg_edge_path_streq (const location &loc,
dc.m_source_printing.show_line_numbers_p = true;
diagnostic_text_output_format text_output (dc);
path_print_policy policy (text_output);
- path_summary summary (policy, path, true);
+ path_summary summary (policy, *event_pp, path, true);
print_path_summary_as_text (summary, text_output, false);
ASSERT_STREQ_AT (loc, expected_str,
pp_formatted_text (text_output.get_printer ()));
@@ -2348,7 +2359,7 @@ test_control_flow_5 (const line_table_case &case_,
dc.m_source_printing.show_line_numbers_p = true;
diagnostic_text_output_format text_output (dc);
path_print_policy policy (text_output);
- path_summary summary (policy, path, true);
+ path_summary summary (policy, *event_pp, path, true);
print_path_summary_as_text (summary, text_output, false);
ASSERT_STREQ
(" events 1-5\n"
@@ -2437,7 +2448,7 @@ test_control_flow_6 (const line_table_case &case_,
dc.m_source_printing.show_line_numbers_p = true;
diagnostic_text_output_format text_output (dc);
path_print_policy policy (text_output);
- path_summary summary (policy, path, true);
+ path_summary summary (policy, *event_pp, path, true);
print_path_summary_as_text (summary, text_output, false);
ASSERT_STREQ
(" events 1-3\n"
diff --git a/gcc/diagnostic-path.h b/gcc/diagnostic-path.h
index 3b2048b..1f2e47b 100644
--- a/gcc/diagnostic-path.h
+++ b/gcc/diagnostic-path.h
@@ -167,7 +167,7 @@ class diagnostic_event
{
}
- label_text get_desc () const;
+ label_text get_desc (pretty_printer &ref_pp) const;
};
/* Abstract base class representing a thread of execution within
diff --git a/gcc/lazy-diagnostic-path.cc b/gcc/lazy-diagnostic-path.cc
index 0650065..683388c 100644
--- a/gcc/lazy-diagnostic-path.cc
+++ b/gcc/lazy-diagnostic-path.cc
@@ -119,8 +119,10 @@ test_intraprocedural_path (pretty_printer *event_pp)
ASSERT_TRUE (path.generated_p ());
ASSERT_EQ (path.num_threads (), 1);
ASSERT_FALSE (path.interprocedural_p ());
- ASSERT_STREQ (path.get_event (0).get_desc ().get (), "first `free'");
- ASSERT_STREQ (path.get_event (1).get_desc ().get (), "double `free'");
+ ASSERT_STREQ (path.get_event (0).get_desc (*event_pp).get (),
+ "first `free'");
+ ASSERT_STREQ (path.get_event (1).get_desc (*event_pp).get (),
+ "double `free'");
}
/* Implementation of diagnostic_option_manager for which all
diff --git a/gcc/simple-diagnostic-path.cc b/gcc/simple-diagnostic-path.cc
index 6414cf2..f92ea16 100644
--- a/gcc/simple-diagnostic-path.cc
+++ b/gcc/simple-diagnostic-path.cc
@@ -215,8 +215,10 @@ test_intraprocedural_path (pretty_printer *event_pp)
ASSERT_EQ (path.num_events (), 2);
ASSERT_EQ (path.num_threads (), 1);
ASSERT_FALSE (path.interprocedural_p ());
- ASSERT_STREQ (path.get_event (0).get_desc ().get (), "first `free'");
- ASSERT_STREQ (path.get_event (1).get_desc ().get (), "double `free'");
+ ASSERT_STREQ (path.get_event (0).get_desc (*event_pp).get (),
+ "first `free'");
+ ASSERT_STREQ (path.get_event (1).get_desc (*event_pp).get (),
+ "double `free'");
}
/* Run all of the selftests within this file. */