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.
This commit is contained in:
David Malcolm 2020-09-17 09:41:29 -04:00
parent c89956cba9
commit 1df487a520

View file

@ -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");
}