]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Prevent copy from vector implementation
authorPierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
Tue, 5 Aug 2025 15:58:26 +0000 (17:58 +0200)
committerArthur Cohen <arthur.cohen@embecosm.com>
Thu, 30 Oct 2025 19:58:35 +0000 (20:58 +0100)
gcc/rust/ChangeLog:

* ast/rust-cond-compilation.h: Delete copy constructor for
ConfigurationAll and ConfigurationAny.

Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
gcc/rust/ast/rust-cond-compilation.h

index 9cfc9b590d7616a65aa7d0fb9b5167220955ecc5..5d5fba5e1c94b00352cafb81f2bf7fa7637a484f 100644 (file)
@@ -91,6 +91,10 @@ class ConfigurationAll : public ConfigurationPredicate
     predicate_list; // inlined form
 
 public:
+  ConfigurationAll (const ConfigurationAll &) = delete;
+
+  ConfigurationAll (ConfigurationAll &&) = default;
+
   ConfigurationAll (
     std::vector<std::unique_ptr<ConfigurationPredicate>> predicate_list)
     : predicate_list (std::move (predicate_list))
@@ -103,7 +107,14 @@ protected:
    * than base */
   ConfigurationAll *clone_configuration_predicate_impl () const override
   {
-    return new ConfigurationAll (*this);
+    decltype (predicate_list) predicate_list_clone = {};
+    predicate_list_clone.reserve (predicate_list.size ());
+
+    for (const auto &predicate : predicate_list)
+      predicate_list_clone.push_back (
+       predicate->clone_configuration_predicate ());
+
+    return new ConfigurationAll (std::move (predicate_list_clone));
   }
 };
 
@@ -114,6 +125,10 @@ class ConfigurationAny : public ConfigurationPredicate
     predicate_list; // inlined form
 
 public:
+  ConfigurationAny (const ConfigurationAny &) = delete;
+
+  ConfigurationAny (ConfigurationAny &&) = default;
+
   ConfigurationAny (
     std::vector<std::unique_ptr<ConfigurationPredicate>> predicate_list)
     : predicate_list (std::move (predicate_list))
@@ -126,7 +141,14 @@ protected:
    * than base */
   ConfigurationAny *clone_configuration_predicate_impl () const override
   {
-    return new ConfigurationAny (*this);
+    decltype (predicate_list) predicate_list_clone = {};
+    predicate_list_clone.reserve (predicate_list.size ());
+
+    for (const auto &predicate : predicate_list)
+      predicate_list_clone.push_back (
+       predicate->clone_configuration_predicate ());
+
+    return new ConfigurationAny (std::move (predicate_list_clone));
   }
 };