From 30c9604c2c04587094207b3dc91f472acb6f331d Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 4 May 2021 15:26:58 -0600 Subject: [PATCH] libcc1: use unique_ptr more This changes libcc1 to use unique_ptr in a few more places, removing some manual memory management. libcc1 * libcp1.cc (struct libcp1) : Use unique_ptr. (~libcp1): Remove. (libcp1_compile, libcp1_set_triplet_regexp) (libcp1_set_driver_filename): Update. * libcc1.cc (struct libcc1) : Use unique_ptr. (~libcc1): Remove. (libcc1_set_triplet_regexp, libcc1_set_driver_filename) (libcc1_compile): Update. --- libcc1/libcc1.cc | 32 +++++++++++++------------------- libcc1/libcp1.cc | 32 +++++++++++++------------------- 2 files changed, 26 insertions(+), 38 deletions(-) diff --git a/libcc1/libcc1.cc b/libcc1/libcc1.cc index 3432f4e8b21..e00355955b6 100644 --- a/libcc1/libcc1.cc +++ b/libcc1/libcc1.cc @@ -49,7 +49,6 @@ class libcc1_connection; struct libcc1 : public gcc_c_context { libcc1 (const gcc_base_vtable *, const gcc_c_fe_vtable *); - ~libcc1 (); // A convenience function to print something. void print (const char *str) @@ -57,7 +56,7 @@ struct libcc1 : public gcc_c_context this->print_function (this->print_datum, str); } - libcc1_connection *connection; + std::unique_ptr connection; gcc_c_oracle_function *binding_oracle; gcc_c_symbol_address_function *address_oracle; @@ -85,7 +84,9 @@ struct libcc1 : public gcc_c_context virtual ~compiler () { } - } *compilerp; + }; + + std::unique_ptr compilerp; /* Compiler to set by set_triplet_regexp. */ class compiler_triplet_regexp : public compiler @@ -142,8 +143,7 @@ public: libcc1::libcc1 (const gcc_base_vtable *v, const gcc_c_fe_vtable *cv) - : connection (NULL), - binding_oracle (NULL), + : binding_oracle (NULL), address_oracle (NULL), oracle_datum (NULL), print_function (NULL), @@ -157,12 +157,6 @@ libcc1::libcc1 (const gcc_base_vtable *v, c_ops = cv; } -libcc1::~libcc1 () -{ - delete connection; - delete compilerp; -} - // Enclose these functions in an anonymous namespace because they @@ -220,7 +214,7 @@ R rpc (struct gcc_c_context *s, Arg... rest) libcc1 *self = (libcc1 *) s; R result; - if (!cc1_plugin::call (self->connection, NAME, &result, rest...)) + if (!cc1_plugin::call (self->connection.get (), NAME, &result, rest...)) return 0; return result; } @@ -380,8 +374,8 @@ libcc1_set_triplet_regexp (struct gcc_base_context *s, { libcc1 *self = (libcc1 *) s; - delete self->compilerp; - self->compilerp = new libcc1::compiler_triplet_regexp (self, triplet_regexp); + self->compilerp.reset (new libcc1::compiler_triplet_regexp (self, + triplet_regexp)); return NULL; } @@ -391,9 +385,8 @@ libcc1_set_driver_filename (struct gcc_base_context *s, { libcc1 *self = (libcc1 *) s; - delete self->compilerp; - self->compilerp = new libcc1::compiler_driver_filename (self, - driver_filename); + self->compilerp.reset (new libcc1::compiler_driver_filename (self, + driver_filename)); return NULL; } @@ -464,7 +457,8 @@ fork_exec (libcc1 *self, char **argv, int spair_fds[2], int stderr_fds[2]) cc1_plugin::status result = cc1_plugin::FAIL; if (self->connection->send ('H') - && ::cc1_plugin::marshall (self->connection, GCC_C_FE_VERSION_1)) + && ::cc1_plugin::marshall (self->connection.get (), + GCC_C_FE_VERSION_1)) result = self->connection->wait_for_query (); close (spair_fds[0]); @@ -527,7 +521,7 @@ libcc1_compile (struct gcc_base_context *s, if (self->verbose) self->args.push_back ("-v"); - self->connection = new libcc1_connection (fds[0], stderr_fds[0], self); + self->connection.reset (new libcc1_connection (fds[0], stderr_fds[0], self)); cc1_plugin::callback_ftype *fun = cc1_plugin::callbackprint_function (this->print_datum, str); } - libcp1_connection *connection; + std::unique_ptr connection; gcc_cp_oracle_function *binding_oracle; gcc_cp_symbol_address_function *address_oracle; @@ -86,7 +85,9 @@ struct libcp1 : public gcc_cp_context virtual ~compiler () { } - } *compilerp; + }; + + std::unique_ptr compilerp; /* Compiler to set by set_triplet_regexp. */ class compiler_triplet_regexp : public compiler @@ -143,8 +144,7 @@ public: libcp1::libcp1 (const gcc_base_vtable *v, const gcc_cp_fe_vtable *cv) - : connection (NULL), - binding_oracle (NULL), + : binding_oracle (NULL), address_oracle (NULL), oracle_datum (NULL), print_function (NULL), @@ -158,12 +158,6 @@ libcp1::libcp1 (const gcc_base_vtable *v, cp_ops = cv; } -libcp1::~libcp1 () -{ - delete connection; - delete compilerp; -} - // Enclose these functions in an anonymous namespace because they @@ -243,7 +237,7 @@ R rpc (struct gcc_cp_context *s, Arg... rest) libcp1 *self = (libcp1 *) s; R result; - if (!cc1_plugin::call (self->connection, NAME, &result, rest...)) + if (!cc1_plugin::call (self->connection.get (), NAME, &result, rest...)) return 0; return result; } @@ -403,8 +397,8 @@ libcp1_set_triplet_regexp (struct gcc_base_context *s, { libcp1 *self = (libcp1 *) s; - delete self->compilerp; - self->compilerp = new libcp1::compiler_triplet_regexp (self, triplet_regexp); + self->compilerp.reset (new libcp1::compiler_triplet_regexp (self, + triplet_regexp)); return NULL; } @@ -414,9 +408,8 @@ libcp1_set_driver_filename (struct gcc_base_context *s, { libcp1 *self = (libcp1 *) s; - delete self->compilerp; - self->compilerp = new libcp1::compiler_driver_filename (self, - driver_filename); + self->compilerp.reset (new libcp1::compiler_driver_filename (self, + driver_filename)); return NULL; } @@ -487,7 +480,8 @@ fork_exec (libcp1 *self, char **argv, int spair_fds[2], int stderr_fds[2]) cc1_plugin::status result = cc1_plugin::FAIL; if (self->connection->send ('H') - && ::cc1_plugin::marshall (self->connection, GCC_CP_FE_VERSION_0)) + && ::cc1_plugin::marshall (self->connection.get (), + GCC_CP_FE_VERSION_0)) result = self->connection->wait_for_query (); close (spair_fds[0]); @@ -550,7 +544,7 @@ libcp1_compile (struct gcc_base_context *s, if (self->verbose) self->args.push_back ("-v"); - self->connection = new libcp1_connection (fds[0], stderr_fds[0], self); + self->connection.reset (new libcp1_connection (fds[0], stderr_fds[0], self)); cc1_plugin::callback_ftype *fun = cc1_plugin::callback