aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/rust/typecheck/rust-tyty-bounds.cc8
-rw-r--r--gcc/rust/typecheck/rust-tyty-subst.cc20
-rw-r--r--gcc/rust/typecheck/rust-tyty-subst.h5
3 files changed, 23 insertions, 10 deletions
diff --git a/gcc/rust/typecheck/rust-tyty-bounds.cc b/gcc/rust/typecheck/rust-tyty-bounds.cc
index af9c5e2..0fb6e7d 100644
--- a/gcc/rust/typecheck/rust-tyty-bounds.cc
+++ b/gcc/rust/typecheck/rust-tyty-bounds.cc
@@ -271,7 +271,7 @@ namespace TyTy {
TypeBoundPredicate::TypeBoundPredicate (
const Resolver::TraitReference &trait_reference, Location locus)
- : SubstitutionRef ({}, SubstitutionArgumentMappings::error ()),
+ : SubstitutionRef ({}, SubstitutionArgumentMappings::empty ()),
reference (trait_reference.get_mappings ().get_defid ()), locus (locus),
error_flag (false)
{
@@ -286,7 +286,7 @@ TypeBoundPredicate::TypeBoundPredicate (
TypeBoundPredicate::TypeBoundPredicate (
DefId reference, std::vector<SubstitutionParamMapping> subst, Location locus)
- : SubstitutionRef ({}, SubstitutionArgumentMappings::error ()),
+ : SubstitutionRef ({}, SubstitutionArgumentMappings::empty ()),
reference (reference), locus (locus), error_flag (false)
{
substitutions.clear ();
@@ -299,7 +299,7 @@ TypeBoundPredicate::TypeBoundPredicate (
}
TypeBoundPredicate::TypeBoundPredicate (const TypeBoundPredicate &other)
- : SubstitutionRef ({}, SubstitutionArgumentMappings::error ()),
+ : SubstitutionRef ({}, SubstitutionArgumentMappings::empty ()),
reference (other.reference), locus (other.locus),
error_flag (other.error_flag)
{
@@ -337,7 +337,7 @@ TypeBoundPredicate::operator= (const TypeBoundPredicate &other)
reference = other.reference;
locus = other.locus;
error_flag = other.error_flag;
- used_arguments = SubstitutionArgumentMappings::error ();
+ used_arguments = SubstitutionArgumentMappings::empty ();
substitutions.clear ();
for (const auto &p : other.get_substs ())
diff --git a/gcc/rust/typecheck/rust-tyty-subst.cc b/gcc/rust/typecheck/rust-tyty-subst.cc
index db31ff9..60bf219 100644
--- a/gcc/rust/typecheck/rust-tyty-subst.cc
+++ b/gcc/rust/typecheck/rust-tyty-subst.cc
@@ -236,16 +236,17 @@ SubstitutionArg::as_string () const
SubstitutionArgumentMappings::SubstitutionArgumentMappings (
std::vector<SubstitutionArg> mappings,
std::map<std::string, BaseType *> binding_args, Location locus,
- ParamSubstCb param_subst_cb, bool trait_item_flag)
+ ParamSubstCb param_subst_cb, bool trait_item_flag, bool error_flag)
: mappings (mappings), binding_args (binding_args), locus (locus),
- param_subst_cb (param_subst_cb), trait_item_flag (trait_item_flag)
+ param_subst_cb (param_subst_cb), trait_item_flag (trait_item_flag),
+ error_flag (error_flag)
{}
SubstitutionArgumentMappings::SubstitutionArgumentMappings (
const SubstitutionArgumentMappings &other)
: mappings (other.mappings), binding_args (other.binding_args),
locus (other.locus), param_subst_cb (nullptr),
- trait_item_flag (other.trait_item_flag)
+ trait_item_flag (other.trait_item_flag), error_flag (other.error_flag)
{}
SubstitutionArgumentMappings &
@@ -257,6 +258,7 @@ SubstitutionArgumentMappings::operator= (
locus = other.locus;
param_subst_cb = nullptr;
trait_item_flag = other.trait_item_flag;
+ error_flag = other.error_flag;
return *this;
}
@@ -264,13 +266,21 @@ SubstitutionArgumentMappings::operator= (
SubstitutionArgumentMappings
SubstitutionArgumentMappings::error ()
{
- return SubstitutionArgumentMappings ({}, {}, Location (), nullptr, false);
+ return SubstitutionArgumentMappings ({}, {}, Location (), nullptr, false,
+ true);
+}
+
+SubstitutionArgumentMappings
+SubstitutionArgumentMappings::empty ()
+{
+ return SubstitutionArgumentMappings ({}, {}, Location (), nullptr, false,
+ false);
}
bool
SubstitutionArgumentMappings::is_error () const
{
- return mappings.size () == 0;
+ return error_flag;
}
bool
diff --git a/gcc/rust/typecheck/rust-tyty-subst.h b/gcc/rust/typecheck/rust-tyty-subst.h
index b5a4181..639a275 100644
--- a/gcc/rust/typecheck/rust-tyty-subst.h
+++ b/gcc/rust/typecheck/rust-tyty-subst.h
@@ -109,7 +109,8 @@ public:
std::map<std::string, BaseType *> binding_args,
Location locus,
ParamSubstCb param_subst_cb = nullptr,
- bool trait_item_flag = false);
+ bool trait_item_flag = false,
+ bool error_flag = false);
SubstitutionArgumentMappings (const SubstitutionArgumentMappings &other);
SubstitutionArgumentMappings &
@@ -120,6 +121,7 @@ public:
= default;
static SubstitutionArgumentMappings error ();
+ static SubstitutionArgumentMappings empty ();
bool is_error () const;
@@ -161,6 +163,7 @@ private:
Location locus;
ParamSubstCb param_subst_cb;
bool trait_item_flag;
+ bool error_flag;
};
class SubstitutionRef