aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/typecheck/rust-hir-path-probe.cc3
-rw-r--r--gcc/rust/typecheck/rust-hir-trait-resolve.cc1
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-expr.cc3
-rw-r--r--gcc/rust/typecheck/rust-hir-type-check-item.cc3
-rw-r--r--gcc/rust/typecheck/rust-tyty-bounds.cc19
-rw-r--r--gcc/rust/typecheck/rust-tyty.h7
6 files changed, 24 insertions, 12 deletions
diff --git a/gcc/rust/typecheck/rust-hir-path-probe.cc b/gcc/rust/typecheck/rust-hir-path-probe.cc
index 2b40f5d..85cdc04 100644
--- a/gcc/rust/typecheck/rust-hir-path-probe.cc
+++ b/gcc/rust/typecheck/rust-hir-path-probe.cc
@@ -344,7 +344,8 @@ PathProbeType::process_associated_trait_for_candidates (
break;
}
- const TyTy::TypeBoundPredicate p (*trait_ref, UNDEF_LOCATION);
+ const TyTy::TypeBoundPredicate p (*trait_ref, BoundPolarity::RegularBound,
+ UNDEF_LOCATION);
TyTy::TypeBoundPredicateItem item (&p, trait_item_ref);
TyTy::BaseType *trait_item_tyty = item.get_raw_item ()->get_tyty ();
diff --git a/gcc/rust/typecheck/rust-hir-trait-resolve.cc b/gcc/rust/typecheck/rust-hir-trait-resolve.cc
index 97fec48..f2dd191 100644
--- a/gcc/rust/typecheck/rust-hir-trait-resolve.cc
+++ b/gcc/rust/typecheck/rust-hir-trait-resolve.cc
@@ -214,6 +214,7 @@ TraitResolver::resolve_trait (HIR::Trait *trait_reference)
auto self_hrtb
= TyTy::TypeBoundPredicate (trait_reference->get_mappings ().get_defid (),
std::move (self_subst_copy),
+ BoundPolarity::RegularBound,
trait_reference->get_locus ());
specified_bounds.push_back (self_hrtb);
diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.cc b/gcc/rust/typecheck/rust-hir-type-check-expr.cc
index 7a7b3ac..b7538ab 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-expr.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-expr.cc
@@ -1558,7 +1558,8 @@ TypeCheckExpr::visit (HIR::ClosureExpr &expr)
TraitReference *trait = TraitResolver::Resolve (*trait_item);
rust_assert (!trait->is_error ());
- TyTy::TypeBoundPredicate predicate (*trait, expr.get_locus ());
+ TyTy::TypeBoundPredicate predicate (*trait, BoundPolarity::RegularBound,
+ expr.get_locus ());
// resolve the trait bound where the <(Args)> are the parameter tuple type
HIR::GenericArgs args = HIR::GenericArgs::create_empty (expr.get_locus ());
diff --git a/gcc/rust/typecheck/rust-hir-type-check-item.cc b/gcc/rust/typecheck/rust-hir-type-check-item.cc
index b329ac1..1290065 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-item.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-item.cc
@@ -528,7 +528,8 @@ TypeCheckItem::visit (HIR::Trait &trait)
RustIdent ident{CanonicalPath::create_empty (), trait.get_locus ()};
infered = new TyTy::DynamicObjectType (
trait.get_mappings ().get_hirid (), ident,
- {TyTy::TypeBoundPredicate (*trait_ref, trait.get_locus ())});
+ {TyTy::TypeBoundPredicate (*trait_ref, BoundPolarity::RegularBound,
+ trait.get_locus ())});
}
void
diff --git a/gcc/rust/typecheck/rust-tyty-bounds.cc b/gcc/rust/typecheck/rust-tyty-bounds.cc
index 805028f..5947c21 100644
--- a/gcc/rust/typecheck/rust-tyty-bounds.cc
+++ b/gcc/rust/typecheck/rust-tyty-bounds.cc
@@ -184,7 +184,8 @@ TypeCheckBase::get_predicate_from_bound (HIR::TypePath &type_path,
if (trait->is_error ())
return TyTy::TypeBoundPredicate::error ();
- TyTy::TypeBoundPredicate predicate (*trait, type_path.get_locus ());
+ TyTy::TypeBoundPredicate predicate (*trait, BoundPolarity::RegularBound,
+ type_path.get_locus ());
HIR::GenericArgs args
= HIR::GenericArgs::create_empty (type_path.get_locus ());
@@ -290,10 +291,11 @@ TypeCheckBase::get_predicate_from_bound (HIR::TypePath &type_path,
namespace TyTy {
TypeBoundPredicate::TypeBoundPredicate (
- const Resolver::TraitReference &trait_reference, location_t locus)
+ const Resolver::TraitReference &trait_reference, BoundPolarity polarity,
+ location_t locus)
: SubstitutionRef ({}, SubstitutionArgumentMappings::empty ()),
reference (trait_reference.get_mappings ().get_defid ()), locus (locus),
- error_flag (false)
+ error_flag (false), polarity (polarity)
{
substitutions.clear ();
for (const auto &p : trait_reference.get_trait_substs ())
@@ -306,9 +308,10 @@ TypeBoundPredicate::TypeBoundPredicate (
TypeBoundPredicate::TypeBoundPredicate (
DefId reference, std::vector<SubstitutionParamMapping> subst,
- location_t locus)
+ BoundPolarity polarity, location_t locus)
: SubstitutionRef ({}, SubstitutionArgumentMappings::empty ()),
- reference (reference), locus (locus), error_flag (false)
+ reference (reference), locus (locus), error_flag (false),
+ polarity (polarity)
{
substitutions.clear ();
for (const auto &p : subst)
@@ -322,7 +325,7 @@ TypeBoundPredicate::TypeBoundPredicate (
TypeBoundPredicate::TypeBoundPredicate (const TypeBoundPredicate &other)
: SubstitutionRef ({}, SubstitutionArgumentMappings::empty ()),
reference (other.reference), locus (other.locus),
- error_flag (other.error_flag)
+ error_flag (other.error_flag), polarity (other.polarity)
{
substitutions.clear ();
for (const auto &p : other.get_substs ())
@@ -358,6 +361,7 @@ TypeBoundPredicate::operator= (const TypeBoundPredicate &other)
reference = other.reference;
locus = other.locus;
error_flag = other.error_flag;
+ polarity = other.polarity;
used_arguments = SubstitutionArgumentMappings::empty ();
substitutions.clear ();
@@ -396,7 +400,8 @@ TypeBoundPredicate::operator= (const TypeBoundPredicate &other)
TypeBoundPredicate
TypeBoundPredicate::error ()
{
- auto p = TypeBoundPredicate (UNKNOWN_DEFID, {}, UNDEF_LOCATION);
+ auto p = TypeBoundPredicate (UNKNOWN_DEFID, {}, BoundPolarity::RegularBound,
+ UNDEF_LOCATION);
p.error_flag = true;
return p;
}
diff --git a/gcc/rust/typecheck/rust-tyty.h b/gcc/rust/typecheck/rust-tyty.h
index cb844d7..341a0e7 100644
--- a/gcc/rust/typecheck/rust-tyty.h
+++ b/gcc/rust/typecheck/rust-tyty.h
@@ -381,11 +381,11 @@ class TypeBoundPredicate : public SubstitutionRef
{
public:
TypeBoundPredicate (const Resolver::TraitReference &trait_reference,
- location_t locus);
+ BoundPolarity polarity, location_t locus);
TypeBoundPredicate (DefId reference,
std::vector<SubstitutionParamMapping> substitutions,
- location_t locus);
+ BoundPolarity polarity, location_t locus);
TypeBoundPredicate (const TypeBoundPredicate &other);
@@ -432,6 +432,8 @@ public:
DefId get_id () const { return reference; }
+ BoundPolarity get_polarity () const { return polarity; }
+
std::vector<TypeBoundPredicateItem> get_associated_type_items ();
size_t get_num_associated_bindings () const override final;
@@ -445,6 +447,7 @@ private:
DefId reference;
location_t locus;
bool error_flag;
+ BoundPolarity polarity;
};
// https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.VariantDef.html