mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-08 15:42:07 +08:00
libcpp: Improve encapsulation of label_text
This adjusts the API of label_text so that the data members are private and cannot be modified by callers. Add accessors for them instead, and make the accessors const-correct. Also rename moved_from () to the more idiomatic release (). Also remove the unused take_or_copy () member function which has confusing ownership semantics. gcc/analyzer/ChangeLog: * call-info.cc (call_info::print): Adjust to new label_text API. * checker-path.cc (checker_event::dump): Likewise. (region_creation_event::get_desc): Likewise. (state_change_event::get_desc): Likewise. (superedge_event::should_filter_p): Likewise. (start_cfg_edge_event::get_desc): Likewise. (call_event::get_desc): Likewise. (return_event::get_desc): Likewise. (warning_event::get_desc): Likewise. (checker_path::dump): Likewise. (checker_path::debug): Likewise. * diagnostic-manager.cc (diagnostic_manager::prune_for_sm_diagnostic): Likewise. (diagnostic_manager::prune_interproc_events): Likewise. * engine.cc (feasibility_state::maybe_update_for_edge): Likewise. * program-state.cc (sm_state_map::to_json): Likewise. * region-model-impl-calls.cc (region_model::impl_call_analyzer_describe): Likewise. (region_model::impl_call_analyzer_dump_capacity): Likewise. * region.cc (region::to_json): Likewise. * sm-malloc.cc (inform_nonnull_attribute): Likewise. * store.cc (binding_map::to_json): Likewise. (store::to_json): Likewise. * supergraph.cc (superedge::dump): Likewise. * svalue.cc (svalue::to_json): Likewise. gcc/c-family/ChangeLog: * c-format.cc (class range_label_for_format_type_mismatch): Adjust to new label_text API. gcc/ChangeLog: * diagnostic-format-json.cc (json_from_location_range): Adjust to new label_text API. * diagnostic-format-sarif.cc (sarif_builder::make_location_object): Likewise. * diagnostic-show-locus.cc (struct pod_label_text): Likewise. (layout::print_any_labels): Likewise. * tree-diagnostic-path.cc (class path_label): Likewise. (struct event_range): Likewise. (default_tree_diagnostic_path_printer): Likewise. (default_tree_make_json_for_path): Likewise. libcpp/ChangeLog: * include/line-map.h (label_text::take_or_copy): Remove. (label_text::moved_from): Rename to release. (label_text::m_buffer, label_text::m_owned): Make private. (label_text::get, label_text::is_owned): New accessors.
This commit is contained in:
parent
ae69e6f61b
commit
f858fe7a8b
@ -75,7 +75,7 @@ void
|
||||
call_info::print (pretty_printer *pp) const
|
||||
{
|
||||
label_text desc (get_desc (pp_show_color (pp)));
|
||||
pp_string (pp, desc.m_buffer);
|
||||
pp_string (pp, desc.get ());
|
||||
}
|
||||
|
||||
/* Implementation of custom_edge_info::add_events_to_path vfunc for
|
||||
|
@ -195,7 +195,7 @@ checker_event::dump (pretty_printer *pp) const
|
||||
{
|
||||
label_text event_desc (get_desc (false));
|
||||
pp_printf (pp, "\"%s\" (depth %i",
|
||||
event_desc.m_buffer, m_effective_depth);
|
||||
event_desc.get (), m_effective_depth);
|
||||
|
||||
if (m_effective_depth != m_original_depth)
|
||||
pp_printf (pp, " corrected from %i",
|
||||
@ -307,7 +307,7 @@ region_creation_event::get_desc (bool can_colorize) const
|
||||
label_text custom_desc
|
||||
= m_pending_diagnostic->describe_region_creation_event
|
||||
(evdesc::region_creation (can_colorize, m_reg));
|
||||
if (custom_desc.m_buffer)
|
||||
if (custom_desc.get ())
|
||||
return custom_desc;
|
||||
}
|
||||
|
||||
@ -390,7 +390,7 @@ state_change_event::get_desc (bool can_colorize) const
|
||||
= m_pending_diagnostic->describe_state_change
|
||||
(evdesc::state_change (can_colorize, var, origin,
|
||||
m_from, m_to, m_emission_id, *this));
|
||||
if (custom_desc.m_buffer)
|
||||
if (custom_desc.get ())
|
||||
{
|
||||
if (flag_analyzer_verbose_state_changes)
|
||||
{
|
||||
@ -404,7 +404,7 @@ state_change_event::get_desc (bool can_colorize) const
|
||||
return make_label_text
|
||||
(can_colorize,
|
||||
"%s (state of %qE: %qs -> %qs, origin: %qE, meaning: %s)",
|
||||
custom_desc.m_buffer,
|
||||
custom_desc.get (),
|
||||
var,
|
||||
m_from->get_name (),
|
||||
m_to->get_name (),
|
||||
@ -414,7 +414,7 @@ state_change_event::get_desc (bool can_colorize) const
|
||||
return make_label_text
|
||||
(can_colorize,
|
||||
"%s (state of %qE: %qs -> %qs, NULL origin, meaning: %s)",
|
||||
custom_desc.m_buffer,
|
||||
custom_desc.get (),
|
||||
var,
|
||||
m_from->get_name (),
|
||||
m_to->get_name (),
|
||||
@ -435,16 +435,16 @@ state_change_event::get_desc (bool can_colorize) const
|
||||
return make_label_text
|
||||
(can_colorize,
|
||||
"state of %qs: %qs -> %qs (origin: %qs)",
|
||||
sval_desc.m_buffer,
|
||||
sval_desc.get (),
|
||||
m_from->get_name (),
|
||||
m_to->get_name (),
|
||||
origin_desc.m_buffer);
|
||||
origin_desc.get ());
|
||||
}
|
||||
else
|
||||
return make_label_text
|
||||
(can_colorize,
|
||||
"state of %qs: %qs -> %qs (NULL origin)",
|
||||
sval_desc.m_buffer,
|
||||
sval_desc.get (),
|
||||
m_from->get_name (),
|
||||
m_to->get_name ());
|
||||
}
|
||||
@ -509,8 +509,8 @@ superedge_event::should_filter_p (int verbosity) const
|
||||
/* Filter events with empty descriptions. This ought to filter
|
||||
FALLTHRU, but retain true/false/switch edges. */
|
||||
label_text desc = get_desc (false);
|
||||
gcc_assert (desc.m_buffer);
|
||||
if (desc.m_buffer[0] == '\0')
|
||||
gcc_assert (desc.get ());
|
||||
if (desc.get ()[0] == '\0')
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -597,28 +597,28 @@ start_cfg_edge_event::get_desc (bool can_colorize) const
|
||||
label_text edge_desc (m_sedge->get_description (user_facing));
|
||||
if (user_facing)
|
||||
{
|
||||
if (edge_desc.m_buffer && strlen (edge_desc.m_buffer) > 0)
|
||||
if (edge_desc.get () && strlen (edge_desc.get ()) > 0)
|
||||
{
|
||||
label_text cond_desc = maybe_describe_condition (can_colorize);
|
||||
label_text result;
|
||||
if (cond_desc.m_buffer)
|
||||
if (cond_desc.get ())
|
||||
return make_label_text (can_colorize,
|
||||
"following %qs branch (%s)...",
|
||||
edge_desc.m_buffer, cond_desc.m_buffer);
|
||||
edge_desc.get (), cond_desc.get ());
|
||||
else
|
||||
return make_label_text (can_colorize,
|
||||
"following %qs branch...",
|
||||
edge_desc.m_buffer);
|
||||
edge_desc.get ());
|
||||
}
|
||||
else
|
||||
return label_text::borrow ("");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (strlen (edge_desc.m_buffer) > 0)
|
||||
if (strlen (edge_desc.get ()) > 0)
|
||||
return make_label_text (can_colorize,
|
||||
"taking %qs edge SN:%i -> SN:%i",
|
||||
edge_desc.m_buffer,
|
||||
edge_desc.get (),
|
||||
m_sedge->m_src->m_index,
|
||||
m_sedge->m_dest->m_index);
|
||||
else
|
||||
@ -798,7 +798,7 @@ call_event::get_desc (bool can_colorize) const
|
||||
m_dest_snode->m_fun->decl,
|
||||
var,
|
||||
m_critical_state));
|
||||
if (custom_desc.m_buffer)
|
||||
if (custom_desc.get ())
|
||||
return custom_desc;
|
||||
}
|
||||
|
||||
@ -878,7 +878,7 @@ return_event::get_desc (bool can_colorize) const
|
||||
m_dest_snode->m_fun->decl,
|
||||
m_src_snode->m_fun->decl,
|
||||
m_critical_state));
|
||||
if (custom_desc.m_buffer)
|
||||
if (custom_desc.get ())
|
||||
return custom_desc;
|
||||
}
|
||||
return make_label_text (can_colorize,
|
||||
@ -1105,19 +1105,19 @@ warning_event::get_desc (bool can_colorize) const
|
||||
label_text ev_desc
|
||||
= m_pending_diagnostic->describe_final_event
|
||||
(evdesc::final_event (can_colorize, var, m_state));
|
||||
if (ev_desc.m_buffer)
|
||||
if (ev_desc.get ())
|
||||
{
|
||||
if (m_sm && flag_analyzer_verbose_state_changes)
|
||||
{
|
||||
if (var)
|
||||
return make_label_text (can_colorize,
|
||||
"%s (%qE is in state %qs)",
|
||||
ev_desc.m_buffer,
|
||||
ev_desc.get (),
|
||||
var, m_state->get_name ());
|
||||
else
|
||||
return make_label_text (can_colorize,
|
||||
"%s (in global state %qs)",
|
||||
ev_desc.m_buffer,
|
||||
ev_desc.get (),
|
||||
m_state->get_name ());
|
||||
}
|
||||
else
|
||||
@ -1163,7 +1163,7 @@ checker_path::dump (pretty_printer *pp) const
|
||||
if (i > 0)
|
||||
pp_string (pp, ", ");
|
||||
label_text event_desc (e->get_desc (false));
|
||||
pp_printf (pp, "\"%s\"", event_desc.m_buffer);
|
||||
pp_printf (pp, "\"%s\"", event_desc.get ());
|
||||
}
|
||||
pp_character (pp, ']');
|
||||
}
|
||||
@ -1203,7 +1203,7 @@ checker_path::debug () const
|
||||
"[%i]: %s \"%s\"\n",
|
||||
i,
|
||||
event_kind_to_string (m_events[i]->m_kind),
|
||||
event_desc.m_buffer);
|
||||
event_desc.get ());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2297,7 +2297,7 @@ diagnostic_manager::prune_for_sm_diagnostic (checker_path *path,
|
||||
label_text sval_desc = sval->get_desc ();
|
||||
log ("considering event %i (%s), with sval: %qs, state: %qs",
|
||||
idx, event_kind_to_string (base_event->m_kind),
|
||||
sval_desc.m_buffer, state->get_name ());
|
||||
sval_desc.get (), state->get_name ());
|
||||
}
|
||||
else
|
||||
log ("considering event %i (%s), with global state: %qs",
|
||||
@ -2363,8 +2363,8 @@ diagnostic_manager::prune_for_sm_diagnostic (checker_path *path,
|
||||
= state_change->m_origin->get_desc ();
|
||||
log ("event %i:"
|
||||
" switching var of interest from %qs to %qs",
|
||||
idx, sval_desc.m_buffer,
|
||||
origin_sval_desc.m_buffer);
|
||||
idx, sval_desc.get (),
|
||||
origin_sval_desc.get ());
|
||||
}
|
||||
sval = state_change->m_origin;
|
||||
}
|
||||
@ -2386,12 +2386,12 @@ diagnostic_manager::prune_for_sm_diagnostic (checker_path *path,
|
||||
label_text sval_desc = sval->get_desc ();
|
||||
log ("filtering event %i:"
|
||||
" state change to %qs unrelated to %qs",
|
||||
idx, change_sval_desc.m_buffer,
|
||||
sval_desc.m_buffer);
|
||||
idx, change_sval_desc.get (),
|
||||
sval_desc.get ());
|
||||
}
|
||||
else
|
||||
log ("filtering event %i: state change to %qs",
|
||||
idx, change_sval_desc.m_buffer);
|
||||
idx, change_sval_desc.get ());
|
||||
}
|
||||
else
|
||||
log ("filtering event %i: global state change", idx);
|
||||
@ -2460,7 +2460,7 @@ diagnostic_manager::prune_for_sm_diagnostic (checker_path *path,
|
||||
log ("event %i:"
|
||||
" recording critical state for %qs at call"
|
||||
" from %qE in callee to %qE in caller",
|
||||
idx, sval_desc.m_buffer, callee_var, caller_var);
|
||||
idx, sval_desc.get (), callee_var, caller_var);
|
||||
}
|
||||
if (expr.param_p ())
|
||||
event->record_critical_state (caller_var, state);
|
||||
@ -2503,7 +2503,7 @@ diagnostic_manager::prune_for_sm_diagnostic (checker_path *path,
|
||||
log ("event %i:"
|
||||
" recording critical state for %qs at return"
|
||||
" from %qE in caller to %qE in callee",
|
||||
idx, sval_desc.m_buffer, callee_var, callee_var);
|
||||
idx, sval_desc.get (), callee_var, callee_var);
|
||||
}
|
||||
if (expr.return_value_p ())
|
||||
event->record_critical_state (callee_var, state);
|
||||
@ -2586,7 +2586,7 @@ diagnostic_manager::prune_interproc_events (checker_path *path) const
|
||||
(path->get_checker_event (idx)->get_desc (false));
|
||||
log ("filtering events %i-%i:"
|
||||
" irrelevant call/entry/return: %s",
|
||||
idx, idx + 2, desc.m_buffer);
|
||||
idx, idx + 2, desc.get ());
|
||||
}
|
||||
path->delete_event (idx + 2);
|
||||
path->delete_event (idx + 1);
|
||||
@ -2608,7 +2608,7 @@ diagnostic_manager::prune_interproc_events (checker_path *path) const
|
||||
(path->get_checker_event (idx)->get_desc (false));
|
||||
log ("filtering events %i-%i:"
|
||||
" irrelevant call/return: %s",
|
||||
idx, idx + 1, desc.m_buffer);
|
||||
idx, idx + 1, desc.get ());
|
||||
}
|
||||
path->delete_event (idx + 1);
|
||||
path->delete_event (idx);
|
||||
|
@ -4590,7 +4590,7 @@ feasibility_state::maybe_update_for_edge (logger *logger,
|
||||
logger->log (" sedge: SN:%i -> SN:%i %s",
|
||||
sedge->m_src->m_index,
|
||||
sedge->m_dest->m_index,
|
||||
desc.m_buffer);
|
||||
desc.get ());
|
||||
}
|
||||
|
||||
const gimple *last_stmt = src_point.get_supernode ()->get_last_stmt ();
|
||||
|
@ -300,7 +300,7 @@ sm_state_map::to_json () const
|
||||
entry_t e = (*iter).second;
|
||||
|
||||
label_text sval_desc = sval->get_desc ();
|
||||
map_obj->set (sval_desc.m_buffer, e.m_state->to_json ());
|
||||
map_obj->set (sval_desc.get (), e.m_state->to_json ());
|
||||
|
||||
/* This doesn't yet JSONify e.m_origin. */
|
||||
}
|
||||
|
@ -255,7 +255,7 @@ region_model::impl_call_analyzer_describe (const gcall *call,
|
||||
const svalue *sval = get_rvalue (t_val, ctxt);
|
||||
bool simple = zerop (t_verbosity);
|
||||
label_text desc = sval->get_desc (simple);
|
||||
warning_at (call->location, 0, "svalue: %qs", desc.m_buffer);
|
||||
warning_at (call->location, 0, "svalue: %qs", desc.get ());
|
||||
}
|
||||
|
||||
/* Handle a call to "__analyzer_dump_capacity".
|
||||
@ -274,7 +274,7 @@ region_model::impl_call_analyzer_dump_capacity (const gcall *call,
|
||||
const region *base_reg = reg->get_base_region ();
|
||||
const svalue *capacity = get_capacity (base_reg);
|
||||
label_text desc = capacity->get_desc (true);
|
||||
warning_at (call->location, 0, "capacity: %qs", desc.m_buffer);
|
||||
warning_at (call->location, 0, "capacity: %qs", desc.get ());
|
||||
}
|
||||
|
||||
/* Compare D1 and D2 using their names, and then IDs to order them. */
|
||||
|
@ -589,7 +589,7 @@ json::value *
|
||||
region::to_json () const
|
||||
{
|
||||
label_text desc = get_desc (true);
|
||||
json::value *reg_js = new json::string (desc.m_buffer);
|
||||
json::value *reg_js = new json::string (desc.get ());
|
||||
return reg_js;
|
||||
}
|
||||
|
||||
|
@ -1007,7 +1007,7 @@ inform_nonnull_attribute (tree fndecl, int arg_idx)
|
||||
label_text arg_desc = describe_argument_index (fndecl, arg_idx);
|
||||
inform (DECL_SOURCE_LOCATION (fndecl),
|
||||
"argument %s of %qD must be non-null",
|
||||
arg_desc.m_buffer, fndecl);
|
||||
arg_desc.get (), fndecl);
|
||||
/* Ideally we would use the location of the parm and underline the
|
||||
attribute also - but we don't have the location_t values at this point
|
||||
in the middle-end.
|
||||
@ -1065,12 +1065,12 @@ public:
|
||||
if (m_origin_of_unchecked_event.known_p ())
|
||||
result = ev.formatted_print ("argument %s (%qE) from %@ could be NULL"
|
||||
" where non-null expected",
|
||||
arg_desc.m_buffer, ev.m_expr,
|
||||
arg_desc.get (), ev.m_expr,
|
||||
&m_origin_of_unchecked_event);
|
||||
else
|
||||
result = ev.formatted_print ("argument %s (%qE) could be NULL"
|
||||
" where non-null expected",
|
||||
arg_desc.m_buffer, ev.m_expr);
|
||||
arg_desc.get (), ev.m_expr);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -1173,11 +1173,11 @@ public:
|
||||
label_text result;
|
||||
if (zerop (ev.m_expr))
|
||||
result = ev.formatted_print ("argument %s NULL where non-null expected",
|
||||
arg_desc.m_buffer);
|
||||
arg_desc.get ());
|
||||
else
|
||||
result = ev.formatted_print ("argument %s (%qE) NULL"
|
||||
" where non-null expected",
|
||||
arg_desc.m_buffer, ev.m_expr);
|
||||
arg_desc.get (), ev.m_expr);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -675,7 +675,7 @@ binding_map::to_json () const
|
||||
{
|
||||
const svalue *value = *const_cast <map_t &> (m_map).get (key);
|
||||
label_text key_desc = key->get_desc ();
|
||||
map_obj->set (key_desc.m_buffer, value->to_json ());
|
||||
map_obj->set (key_desc.get (), value->to_json ());
|
||||
}
|
||||
|
||||
return map_obj;
|
||||
@ -2402,11 +2402,11 @@ store::to_json () const
|
||||
binding_cluster *cluster
|
||||
= *const_cast<cluster_map_t &> (m_cluster_map).get (base_reg);
|
||||
label_text base_reg_desc = base_reg->get_desc ();
|
||||
clusters_in_parent_reg_obj->set (base_reg_desc.m_buffer,
|
||||
clusters_in_parent_reg_obj->set (base_reg_desc.get (),
|
||||
cluster->to_json ());
|
||||
}
|
||||
label_text parent_reg_desc = parent_reg->get_desc ();
|
||||
store_obj->set (parent_reg_desc.m_buffer, clusters_in_parent_reg_obj);
|
||||
store_obj->set (parent_reg_desc.get (), clusters_in_parent_reg_obj);
|
||||
}
|
||||
|
||||
store_obj->set ("called_unknown_fn", new json::literal (m_called_unknown_fn));
|
||||
|
@ -855,10 +855,10 @@ superedge::dump (pretty_printer *pp) const
|
||||
{
|
||||
pp_printf (pp, "edge: SN: %i -> SN: %i", m_src->m_index, m_dest->m_index);
|
||||
label_text desc (get_description (false));
|
||||
if (strlen (desc.m_buffer) > 0)
|
||||
if (strlen (desc.get ()) > 0)
|
||||
{
|
||||
pp_space (pp);
|
||||
pp_string (pp, desc.m_buffer);
|
||||
pp_string (pp, desc.get ());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -96,7 +96,7 @@ json::value *
|
||||
svalue::to_json () const
|
||||
{
|
||||
label_text desc = get_desc (true);
|
||||
json::value *sval_js = new json::string (desc.m_buffer);
|
||||
json::value *sval_js = new json::string (desc.get ());
|
||||
return sval_js;
|
||||
}
|
||||
|
||||
|
@ -4617,14 +4617,14 @@ class range_label_for_format_type_mismatch
|
||||
label_text get_text (unsigned range_idx) const final override
|
||||
{
|
||||
label_text text = range_label_for_type_mismatch::get_text (range_idx);
|
||||
if (text.m_buffer == NULL)
|
||||
if (text.get () == NULL)
|
||||
return text;
|
||||
|
||||
indirection_suffix suffix (m_pointer_count);
|
||||
char *p = (char *) alloca (suffix.get_buffer_size ());
|
||||
suffix.fill_buffer (p);
|
||||
|
||||
char *result = concat (text.m_buffer, p, NULL);
|
||||
char *result = concat (text.get (), p, NULL);
|
||||
return label_text::take (result);
|
||||
}
|
||||
|
||||
|
@ -102,8 +102,8 @@ json_from_location_range (diagnostic_context *context,
|
||||
if (loc_range->m_label)
|
||||
{
|
||||
label_text text (loc_range->m_label->get_text (range_idx));
|
||||
if (text.m_buffer)
|
||||
result->set ("label", new json::string (text.m_buffer));
|
||||
if (text.get ())
|
||||
result->set ("label", new json::string (text.get ()));
|
||||
}
|
||||
|
||||
return result;
|
||||
|
@ -582,7 +582,7 @@ sarif_builder::make_location_object (const diagnostic_event &event)
|
||||
|
||||
/* "message" property (SARIF v2.1.0 section 3.28.5). */
|
||||
label_text ev_desc = event.get_desc (false);
|
||||
json::object *message_obj = make_message_object (ev_desc.m_buffer);
|
||||
json::object *message_obj = make_message_object (ev_desc.get ());
|
||||
location_obj->set ("message", message_obj);
|
||||
|
||||
return location_obj;
|
||||
|
@ -1877,9 +1877,10 @@ struct pod_label_text
|
||||
{}
|
||||
|
||||
pod_label_text (label_text &&other)
|
||||
: m_buffer (other.m_buffer), m_caller_owned (other.m_owned)
|
||||
: m_buffer (const_cast<char*> (other.get ())),
|
||||
m_caller_owned (other.is_owner ())
|
||||
{
|
||||
other.moved_from ();
|
||||
other.release ();
|
||||
}
|
||||
|
||||
void maybe_free ()
|
||||
@ -1963,7 +1964,7 @@ layout::print_any_labels (linenum_type row)
|
||||
/* Allow for labels that return NULL from their get_text
|
||||
implementation (so e.g. such labels can control their own
|
||||
visibility). */
|
||||
if (text.m_buffer == NULL)
|
||||
if (text.get () == NULL)
|
||||
continue;
|
||||
|
||||
labels.safe_push (line_label (m_policy, i, disp_col, std::move (text)));
|
||||
|
@ -61,11 +61,11 @@ class path_label : public range_label
|
||||
is special-cased for diagnostic paths. */
|
||||
bool colorize = pp_show_color (global_dc->printer);
|
||||
label_text event_text (event.get_desc (colorize));
|
||||
gcc_assert (event_text.m_buffer);
|
||||
gcc_assert (event_text.get ());
|
||||
pretty_printer pp;
|
||||
pp_show_color (&pp) = pp_show_color (global_dc->printer);
|
||||
diagnostic_event_id_t event_id (event_idx);
|
||||
pp_printf (&pp, "%@ %s", &event_id, event_text.m_buffer);
|
||||
pp_printf (&pp, "%@ %s", &event_id, event_text.get ());
|
||||
label_text result = label_text::take (xstrdup (pp_formatted_text (&pp)));
|
||||
return result;
|
||||
}
|
||||
@ -173,7 +173,7 @@ struct event_range
|
||||
diagnostic_event_id_t event_id (i);
|
||||
label_text event_text (iter_event.get_desc (true));
|
||||
pretty_printer *pp = dc->printer;
|
||||
pp_printf (pp, " %@: %s", &event_id, event_text.m_buffer);
|
||||
pp_printf (pp, " %@: %s", &event_id, event_text.get ());
|
||||
pp_newline (pp);
|
||||
}
|
||||
return;
|
||||
@ -459,7 +459,7 @@ default_tree_diagnostic_path_printer (diagnostic_context *context,
|
||||
{
|
||||
const diagnostic_event &event = path->get_event (i);
|
||||
label_text event_text (event.get_desc (false));
|
||||
gcc_assert (event_text.m_buffer);
|
||||
gcc_assert (event_text.get ());
|
||||
diagnostic_event_id_t event_id (i);
|
||||
if (context->show_path_depths)
|
||||
{
|
||||
@ -471,17 +471,17 @@ default_tree_diagnostic_path_printer (diagnostic_context *context,
|
||||
if (fndecl)
|
||||
inform (event.get_location (),
|
||||
"%@ %s (fndecl %qD, depth %i)",
|
||||
&event_id, event_text.m_buffer,
|
||||
&event_id, event_text.get (),
|
||||
fndecl, stack_depth);
|
||||
else
|
||||
inform (event.get_location (),
|
||||
"%@ %s (depth %i)",
|
||||
&event_id, event_text.m_buffer,
|
||||
&event_id, event_text.get (),
|
||||
stack_depth);
|
||||
}
|
||||
else
|
||||
inform (event.get_location (),
|
||||
"%@ %s", &event_id, event_text.m_buffer);
|
||||
"%@ %s", &event_id, event_text.get ());
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -519,7 +519,7 @@ default_tree_make_json_for_path (diagnostic_context *context,
|
||||
json_from_expanded_location (context,
|
||||
event.get_location ()));
|
||||
label_text event_text (event.get_desc (false));
|
||||
event_obj->set ("description", new json::string (event_text.m_buffer));
|
||||
event_obj->set ("description", new json::string (event_text.get ()));
|
||||
if (tree fndecl = event.get_fndecl ())
|
||||
{
|
||||
const char *function
|
||||
|
@ -1851,7 +1851,7 @@ public:
|
||||
label_text (label_text &&other)
|
||||
: m_buffer (other.m_buffer), m_owned (other.m_owned)
|
||||
{
|
||||
other.moved_from ();
|
||||
other.release ();
|
||||
}
|
||||
|
||||
/* Move assignment. */
|
||||
@ -1861,7 +1861,7 @@ public:
|
||||
free (m_buffer);
|
||||
m_buffer = other.m_buffer;
|
||||
m_owned = other.m_owned;
|
||||
other.moved_from ();
|
||||
other.release ();
|
||||
return *this;
|
||||
}
|
||||
|
||||
@ -1882,25 +1882,26 @@ public:
|
||||
return label_text (buffer, true);
|
||||
}
|
||||
|
||||
/* Take ownership of the buffer, copying if necessary. */
|
||||
char *take_or_copy ()
|
||||
{
|
||||
if (m_owned)
|
||||
return m_buffer;
|
||||
else
|
||||
return xstrdup (m_buffer);
|
||||
}
|
||||
|
||||
void moved_from ()
|
||||
void release ()
|
||||
{
|
||||
m_buffer = NULL;
|
||||
m_owned = false;
|
||||
}
|
||||
|
||||
const char *get () const
|
||||
{
|
||||
return m_buffer;
|
||||
}
|
||||
|
||||
bool is_owner () const
|
||||
{
|
||||
return m_owned;
|
||||
}
|
||||
|
||||
private:
|
||||
char *m_buffer;
|
||||
bool m_owned;
|
||||
|
||||
private:
|
||||
label_text (char *buffer, bool owned)
|
||||
: m_buffer (buffer), m_owned (owned)
|
||||
{}
|
||||
|
Loading…
x
Reference in New Issue
Block a user