diagnostics: use unique_ptr for m_format_postprocessor

No functional change intended.

gcc/cp/ChangeLog:
	* error.cc (cxx_format_postprocessor::clone): Update to use
	unique_ptr.
	(cxx_dump_pretty_printer::cxx_dump_pretty_printer): Likewise.
	(cxx_initialize_diagnostics): Likewise.

gcc/ChangeLog:
	* pretty-print.cc (pretty_printer::pretty_printer): Use "nullptr"
	rather than "NULL".  Remove explicit delete of
	m_format_postprocessor.
	* pretty-print.h (format_postprocessor::clone): Use unique_ptr.
	(pretty_printer::set_format_postprocessor): New.
	(pretty_printer::m_format_postprocessor): Use unique_ptr.
	(pp_format_postprocessor): Update for use of unique_ptr, removing
	reference from return type.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
This commit is contained in:
David Malcolm
2025-05-29 16:57:52 -04:00
parent f4aa6b5a8d
commit afee0b19df
3 changed files with 18 additions and 15 deletions

View File

@@ -182,9 +182,10 @@ class cxx_format_postprocessor : public format_postprocessor
: m_type_a (), m_type_b ()
{}
format_postprocessor *clone() const final override
std::unique_ptr<format_postprocessor>
clone() const final override
{
return new cxx_format_postprocessor ();
return std::make_unique<cxx_format_postprocessor> ();
}
void handle (pretty_printer *pp) final override;
@@ -204,8 +205,7 @@ cxx_dump_pretty_printer (int phase)
if (outf)
{
pp_format_decoder (this) = cp_printer;
/* This gets deleted in ~pretty_printer. */
pp_format_postprocessor (this) = new cxx_format_postprocessor ();
set_format_postprocessor (std::make_unique<cxx_format_postprocessor> ());
set_output_stream (outf);
}
}
@@ -301,7 +301,7 @@ void
cxx_initialize_diagnostics (diagnostic_context *context)
{
cxx_pretty_printer *pp = new cxx_pretty_printer ();
pp_format_postprocessor (pp) = new cxx_format_postprocessor ();
pp->set_format_postprocessor (std::make_unique<cxx_format_postprocessor> ());
context->set_pretty_printer (std::unique_ptr<pretty_printer> (pp));
c_common_diagnostics_set_defaults (context);

View File

@@ -2461,7 +2461,7 @@ pretty_printer::pretty_printer (int maximum_length)
m_indent_skip (0),
m_wrapping (),
m_format_decoder (nullptr),
m_format_postprocessor (NULL),
m_format_postprocessor (nullptr),
m_token_printer (nullptr),
m_emitted_prefix (false),
m_need_newline (false),
@@ -2487,7 +2487,7 @@ pretty_printer::pretty_printer (const pretty_printer &other)
m_indent_skip (other.m_indent_skip),
m_wrapping (other.m_wrapping),
m_format_decoder (other.m_format_decoder),
m_format_postprocessor (NULL),
m_format_postprocessor (nullptr),
m_token_printer (other.m_token_printer),
m_emitted_prefix (other.m_emitted_prefix),
m_need_newline (other.m_need_newline),
@@ -2508,8 +2508,6 @@ pretty_printer::pretty_printer (const pretty_printer &other)
pretty_printer::~pretty_printer ()
{
if (m_format_postprocessor)
delete m_format_postprocessor;
m_buffer->~output_buffer ();
XDELETE (m_buffer);
free (m_prefix);

View File

@@ -196,7 +196,7 @@ class format_postprocessor
{
public:
virtual ~format_postprocessor () {}
virtual format_postprocessor *clone() const = 0;
virtual std::unique_ptr<format_postprocessor> clone() const = 0;
virtual void handle (pretty_printer *) = 0;
};
@@ -229,7 +229,7 @@ inline int & pp_indentation (pretty_printer *pp);
inline bool & pp_translate_identifiers (pretty_printer *pp);
inline bool & pp_show_color (pretty_printer *pp);
inline printer_fn &pp_format_decoder (pretty_printer *pp);
inline format_postprocessor *& pp_format_postprocessor (pretty_printer *pp);
inline format_postprocessor *pp_format_postprocessor (pretty_printer *pp);
inline bool & pp_show_highlight_colors (pretty_printer *pp);
class urlifier;
@@ -256,7 +256,7 @@ public:
friend bool & pp_translate_identifiers (pretty_printer *pp);
friend bool & pp_show_color (pretty_printer *pp);
friend printer_fn &pp_format_decoder (pretty_printer *pp);
friend format_postprocessor *& pp_format_postprocessor (pretty_printer *pp);
friend format_postprocessor * pp_format_postprocessor (pretty_printer *pp);
friend bool & pp_show_highlight_colors (pretty_printer *pp);
friend void pp_output_formatted_text (pretty_printer *,
@@ -316,6 +316,11 @@ public:
void set_real_maximum_length ();
int remaining_character_count_for_line ();
void set_format_postprocessor (std::unique_ptr<format_postprocessor> p)
{
m_format_postprocessor = std::move (p);
}
void dump (FILE *out, int indent) const;
void DEBUG_FUNCTION dump () const { dump (stderr, 0); }
@@ -356,7 +361,7 @@ private:
have been processed, to allow for client-specific postprocessing.
This is used by the C++ frontend for handling the %H and %I
format codes (which interract with each other). */
format_postprocessor *m_format_postprocessor;
std::unique_ptr<format_postprocessor> m_format_postprocessor;
/* This is used by pp_output_formatted_text after it has converted all
formatted chunks into a single list of tokens.
@@ -443,10 +448,10 @@ pp_format_decoder (pretty_printer *pp)
return pp->m_format_decoder;
}
inline format_postprocessor *&
inline format_postprocessor *
pp_format_postprocessor (pretty_printer *pp)
{
return pp->m_format_postprocessor;
return pp->m_format_postprocessor.get ();
}
inline bool &