public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r14-7957] gccrs: Fix invalid call to vector::front in TypeBoundPredicate constructors
@ 2024-01-16 18:08 Arthur Cohen
0 siblings, 0 replies; only message in thread
From: Arthur Cohen @ 2024-01-16 18:08 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:c00624a6c8b9a08b10674abff7826ac990e9248a
commit r14-7957-gc00624a6c8b9a08b10674abff7826ac990e9248a
Author: Owen Avery <powerboat9.gamer@gmail.com>
Date: Wed Aug 23 22:49:30 2023 -0400
gccrs: Fix invalid call to vector::front in TypeBoundPredicate constructors
gcc/rust/ChangeLog:
* typecheck/rust-hir-type-check-expr.cc
(TypeCheckExpr::resolve_fn_trait_call): Add TODO comment.
* typecheck/rust-tyty-bounds.cc
(TypeBoundPredicate::TypeBoundPredicate):
Add assertions, new error constructor.
(TypeBoundPredicate::error): Use new error constructor.
* typecheck/rust-tyty.h
(struct TypeBoundPredicate::mark_is_error): New.
(TypeBoundPredicate::TypeBoundPredicate):
Add new error constructor.
Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
Diff:
---
gcc/rust/typecheck/rust-hir-type-check-expr.cc | 1 +
gcc/rust/typecheck/rust-tyty-bounds.cc | 15 +++++++++++----
gcc/rust/typecheck/rust-tyty.h | 6 ++++++
3 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/gcc/rust/typecheck/rust-hir-type-check-expr.cc b/gcc/rust/typecheck/rust-hir-type-check-expr.cc
index af350ed67d3..f4ffc40fe09 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-expr.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-expr.cc
@@ -1826,6 +1826,7 @@ TypeCheckExpr::resolve_fn_trait_call (HIR::CallExpr &expr,
TyTy::BaseType **result)
{
// we turn this into a method call expr
+ // TODO: add implicit self argument (?)
auto associated_predicate = TyTy::TypeBoundPredicate::error ();
HIR::PathIdentSegment method_name
= resolve_possible_fn_trait_call_method_name (*receiver_tyty,
diff --git a/gcc/rust/typecheck/rust-tyty-bounds.cc b/gcc/rust/typecheck/rust-tyty-bounds.cc
index 6239a83f607..6a87c05dbf4 100644
--- a/gcc/rust/typecheck/rust-tyty-bounds.cc
+++ b/gcc/rust/typecheck/rust-tyty-bounds.cc
@@ -310,6 +310,8 @@ TypeBoundPredicate::TypeBoundPredicate (
reference (trait_reference.get_mappings ().get_defid ()), locus (locus),
error_flag (false), polarity (polarity)
{
+ rust_assert (!trait_reference.get_trait_substs ().empty ());
+
substitutions.clear ();
for (const auto &p : trait_reference.get_trait_substs ())
substitutions.push_back (p.clone ());
@@ -326,6 +328,8 @@ TypeBoundPredicate::TypeBoundPredicate (
reference (reference), locus (locus), error_flag (false),
polarity (polarity)
{
+ rust_assert (!subst.empty ());
+
substitutions.clear ();
for (const auto &p : subst)
substitutions.push_back (p.clone ());
@@ -335,6 +339,12 @@ TypeBoundPredicate::TypeBoundPredicate (
used_arguments.get_mappings ().push_back (placeholder_self);
}
+TypeBoundPredicate::TypeBoundPredicate (mark_is_error)
+ : SubstitutionRef ({}, SubstitutionArgumentMappings::empty ()),
+ reference (UNKNOWN_DEFID), locus (UNDEF_LOCATION), error_flag (true),
+ polarity (BoundPolarity::RegularBound)
+{}
+
TypeBoundPredicate::TypeBoundPredicate (const TypeBoundPredicate &other)
: SubstitutionRef ({}, SubstitutionArgumentMappings::empty ()),
reference (other.reference), locus (other.locus),
@@ -413,10 +423,7 @@ TypeBoundPredicate::operator= (const TypeBoundPredicate &other)
TypeBoundPredicate
TypeBoundPredicate::error ()
{
- auto p = TypeBoundPredicate (UNKNOWN_DEFID, {}, BoundPolarity::RegularBound,
- UNDEF_LOCATION);
- p.error_flag = true;
- return p;
+ return TypeBoundPredicate (mark_is_error ());
}
std::string
diff --git a/gcc/rust/typecheck/rust-tyty.h b/gcc/rust/typecheck/rust-tyty.h
index fa2c88ccb9a..51bf0b463bd 100644
--- a/gcc/rust/typecheck/rust-tyty.h
+++ b/gcc/rust/typecheck/rust-tyty.h
@@ -450,6 +450,12 @@ public:
bool is_equal (const TypeBoundPredicate &other) const;
private:
+ struct mark_is_error
+ {
+ };
+
+ TypeBoundPredicate (mark_is_error);
+
DefId reference;
location_t locus;
bool error_flag;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2024-01-16 18:08 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-16 18:08 [gcc r14-7957] gccrs: Fix invalid call to vector::front in TypeBoundPredicate constructors Arthur Cohen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).