Skip to content

Commit 7c72442

Browse files
P-E-Pphilberty
authored andcommitted
Prevent copy from vector implementation
gcc/rust/ChangeLog: * ast/rust-cond-compilation.h: Delete copy constructor for ConfigurationAll and ConfigurationAny. Signed-off-by: Pierre-Emmanuel Patry <[email protected]>
1 parent 42c5b91 commit 7c72442

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

gcc/rust/ast/rust-cond-compilation.h

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,10 @@ class ConfigurationAll : public ConfigurationPredicate
9191
predicate_list; // inlined form
9292

9393
public:
94+
ConfigurationAll (const ConfigurationAll &) = delete;
95+
96+
ConfigurationAll (ConfigurationAll &&) = default;
97+
9498
ConfigurationAll (
9599
std::vector<std::unique_ptr<ConfigurationPredicate>> predicate_list)
96100
: predicate_list (std::move (predicate_list))
@@ -103,7 +107,14 @@ class ConfigurationAll : public ConfigurationPredicate
103107
* than base */
104108
ConfigurationAll *clone_configuration_predicate_impl () const override
105109
{
106-
return new ConfigurationAll (*this);
110+
decltype (predicate_list) predicate_list_clone = {};
111+
predicate_list_clone.reserve (predicate_list.size ());
112+
113+
for (const auto &predicate : predicate_list)
114+
predicate_list_clone.push_back (
115+
predicate->clone_configuration_predicate ());
116+
117+
return new ConfigurationAll (std::move (predicate_list_clone));
107118
}
108119
};
109120

@@ -114,6 +125,10 @@ class ConfigurationAny : public ConfigurationPredicate
114125
predicate_list; // inlined form
115126

116127
public:
128+
ConfigurationAny (const ConfigurationAny &) = delete;
129+
130+
ConfigurationAny (ConfigurationAny &&) = default;
131+
117132
ConfigurationAny (
118133
std::vector<std::unique_ptr<ConfigurationPredicate>> predicate_list)
119134
: predicate_list (std::move (predicate_list))
@@ -126,7 +141,14 @@ class ConfigurationAny : public ConfigurationPredicate
126141
* than base */
127142
ConfigurationAny *clone_configuration_predicate_impl () const override
128143
{
129-
return new ConfigurationAny (*this);
144+
decltype (predicate_list) predicate_list_clone = {};
145+
predicate_list_clone.reserve (predicate_list.size ());
146+
147+
for (const auto &predicate : predicate_list)
148+
predicate_list_clone.push_back (
149+
predicate->clone_configuration_predicate ());
150+
151+
return new ConfigurationAny (std::move (predicate_list_clone));
130152
}
131153
};
132154

0 commit comments

Comments
 (0)