aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/ast/rust-cond-compilation.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/rust/ast/rust-cond-compilation.h')
-rw-r--r--gcc/rust/ast/rust-cond-compilation.h32
1 files changed, 27 insertions, 5 deletions
diff --git a/gcc/rust/ast/rust-cond-compilation.h b/gcc/rust/ast/rust-cond-compilation.h
index 56a5646..5d5fba5 100644
--- a/gcc/rust/ast/rust-cond-compilation.h
+++ b/gcc/rust/ast/rust-cond-compilation.h
@@ -91,9 +91,13 @@ 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 (predicate_list)
+ : predicate_list (std::move (predicate_list))
{}
void accept_vis (ASTVisitor &vis) override;
@@ -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,9 +125,13 @@ 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 (predicate_list)
+ : predicate_list (std::move (predicate_list))
{}
void accept_vis (ASTVisitor &vis) override;
@@ -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));
}
};
@@ -226,7 +248,7 @@ public:
CfgAttrAttribute (CfgAttrAttribute const &other)
: config_to_include (
other.config_to_include->clone_configuration_predicate ()),
- cfg_attrs (cfg_attrs)
+ cfg_attrs (other.cfg_attrs)
{}
// Overloaded assignment operator to clone