aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2020-09-17 09:41:29 -0400
committerDavid Malcolm <dmalcolm@redhat.com>2020-09-18 17:39:46 -0400
commit1df487a5204462f1ec0b1eab39b0a463a8d6b89f (patch)
tree3d1b0fb6cb1bae2f174d48d6252ca6752182a2db /gcc
parentc89956cba9d1a5fbf059f7880ff49418718a2965 (diff)
downloadgcc-1df487a5204462f1ec0b1eab39b0a463a8d6b89f.zip
gcc-1df487a5204462f1ec0b1eab39b0a463a8d6b89f.tar.gz
gcc-1df487a5204462f1ec0b1eab39b0a463a8d6b89f.tar.bz2
analyzer: fix warning_event::get_desc for global state changes
When experimenting the a new state_machine with global state I noticed that the fallback handling in warning_event::get_desc assumes we have per-value states, and ICEs on global states. Fixed thusly. gcc/analyzer/ChangeLog: * checker-path.cc (warning_event::get_desc): Handle global state changes.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/analyzer/checker-path.cc29
1 files changed, 21 insertions, 8 deletions
diff --git a/gcc/analyzer/checker-path.cc b/gcc/analyzer/checker-path.cc
index 2503d02..c281316 100644
--- a/gcc/analyzer/checker-path.cc
+++ b/gcc/analyzer/checker-path.cc
@@ -872,11 +872,17 @@ warning_event::get_desc (bool can_colorize) const
{
if (m_sm && flag_analyzer_verbose_state_changes)
{
- label_text result
- = make_label_text (can_colorize,
- "%s (%qE is in state %qs)",
- ev_desc.m_buffer,
- m_var, m_state->get_name ());
+ label_text result;
+ if (m_var)
+ result = make_label_text (can_colorize,
+ "%s (%qE is in state %qs)",
+ ev_desc.m_buffer,
+ m_var, m_state->get_name ());
+ else
+ result = make_label_text (can_colorize,
+ "%s (in global state %qs)",
+ ev_desc.m_buffer,
+ m_state->get_name ());
ev_desc.maybe_free ();
return result;
}
@@ -886,9 +892,16 @@ warning_event::get_desc (bool can_colorize) const
}
if (m_sm)
- return make_label_text (can_colorize,
- "here (%qE is in state %qs)",
- m_var, m_state->get_name ());
+ {
+ if (m_var)
+ return make_label_text (can_colorize,
+ "here (%qE is in state %qs)",
+ m_var, m_state->get_name ());
+ else
+ return make_label_text (can_colorize,
+ "here (in global state %qs)",
+ m_state->get_name ());
+ }
else
return label_text::borrow ("here");
}