Transfer ownership of exception string to ada_catchpoint
authorTom Tromey <tromey@adacore.com>
Thu, 16 Feb 2023 17:46:04 +0000 (10:46 -0700)
committerTom Tromey <tromey@adacore.com>
Mon, 12 Jun 2023 17:51:52 +0000 (11:51 -0600)
This changes the ada_catchpoint to require an rvalue ref, so that
ownership of the exception string can be transferred to the catchpoint
object.

gdb/ada-lang.c
gdb/ada-lang.h
gdb/mi/mi-cmd-catch.c

index fc22b3d2ebae47a3b5a1ac9019cf51057f9d4b31..53d5ae04c381945b5e5db1f7601e40ff511c920f 100644 (file)
@@ -12066,8 +12066,10 @@ struct ada_catchpoint : public code_breakpoint
                  const char *addr_string_,
                  bool tempflag,
                  bool enabled,
-                 bool from_tty)
+                 bool from_tty,
+                 std::string &&excep_string_)
     : code_breakpoint (gdbarch_, bp_catchpoint, tempflag),
+      excep_string (std::move (excep_string_)),
       m_kind (kind)
   {
     add_location (sal);
@@ -12732,7 +12734,7 @@ ada_exception_sal (enum ada_exception_catchpoint_kind ex,
 void
 create_ada_exception_catchpoint (struct gdbarch *gdbarch,
                                 enum ada_exception_catchpoint_kind ex_kind,
-                                const std::string &excep_string,
+                                std::string &&excep_string,
                                 const std::string &cond_string,
                                 int tempflag,
                                 int enabled,
@@ -12743,8 +12745,8 @@ create_ada_exception_catchpoint (struct gdbarch *gdbarch,
 
   std::unique_ptr<ada_catchpoint> c
     (new ada_catchpoint (gdbarch, ex_kind, sal, addr_string.c_str (),
-                        tempflag, enabled, from_tty));
-  c->excep_string = excep_string;
+                        tempflag, enabled, from_tty,
+                        std::move (excep_string)));
   create_excep_cond_exprs (c.get (), ex_kind);
   if (!cond_string.empty ())
     set_breakpoint_condition (c.get (), cond_string.c_str (), from_tty, false);
@@ -12771,7 +12773,7 @@ catch_ada_exception_command (const char *arg_entry, int from_tty,
   catch_ada_exception_command_split (arg, false, &ex_kind, &excep_string,
                                     &cond_string);
   create_ada_exception_catchpoint (gdbarch, ex_kind,
-                                  excep_string, cond_string,
+                                  std::move (excep_string), cond_string,
                                   tempflag, 1 /* enabled */,
                                   from_tty);
 }
@@ -12796,7 +12798,7 @@ catch_ada_handlers_command (const char *arg_entry, int from_tty,
   catch_ada_exception_command_split (arg, true, &ex_kind, &excep_string,
                                     &cond_string);
   create_ada_exception_catchpoint (gdbarch, ex_kind,
-                                  excep_string, cond_string,
+                                  std::move (excep_string), cond_string,
                                   tempflag, 1 /* enabled */,
                                   from_tty);
 }
@@ -12863,7 +12865,7 @@ catch_assert_command (const char *arg_entry, int from_tty,
     arg = "";
   catch_ada_assert_command_split (arg, cond_string);
   create_ada_exception_catchpoint (gdbarch, ada_catch_assert,
-                                  "", cond_string,
+                                  {}, cond_string,
                                   tempflag, 1 /* enabled */,
                                   from_tty);
 }
index f5bb54c7d36dd3318436dba69c4f0da7c7e1863a..08620d7ed7c8bb58b8c633a6063978a74562c869 100644 (file)
@@ -341,7 +341,7 @@ extern const char *ada_main_name ();
 
 extern void create_ada_exception_catchpoint
   (struct gdbarch *gdbarch, enum ada_exception_catchpoint_kind ex_kind,
-   const std::string &excep_string, const std::string &cond_string, int tempflag,
+   std::string &&excep_string, const std::string &cond_string, int tempflag,
    int enabled, int from_tty);
 
 /* Return true if BP is an Ada catchpoint.  */
index fdfbe2ed8b19e9cc255cffce124305a9b594ea8c..9669d86562df5f279316c43d02078249f89f1608 100644 (file)
@@ -153,7 +153,7 @@ mi_cmd_catch_exception (const char *cmd, const char *const *argv, int argc)
 
   scoped_restore restore_breakpoint_reporting = setup_breakpoint_reporting ();
   create_ada_exception_catchpoint (gdbarch, ex_kind,
-                                  exception_name,
+                                  std::move (exception_name),
                                   condition, temp, enabled, 0);
 }
 
@@ -217,7 +217,7 @@ mi_cmd_catch_handlers (const char *cmd, const char *const *argv, int argc)
   scoped_restore restore_breakpoint_reporting
     = setup_breakpoint_reporting ();
   create_ada_exception_catchpoint (gdbarch, ada_catch_handlers,
-                                  exception_name,
+                                  std::move (exception_name),
                                   condition, temp, enabled, 0);
 }