diff options
author | Philip Herron <philip.herron@embecosm.com> | 2021-11-18 13:53:47 +0000 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2021-11-18 13:53:47 +0000 |
commit | 0ecb6ea16bdec84016557536939140fea686f560 (patch) | |
tree | 8a4a116d01cf42ff7507832321618320eed77c3e /gcc | |
parent | 0995184e26f81f8ba6872c3efb59f640a7fe7162 (diff) | |
download | gcc-0ecb6ea16bdec84016557536939140fea686f560.zip gcc-0ecb6ea16bdec84016557536939140fea686f560.tar.gz gcc-0ecb6ea16bdec84016557536939140fea686f560.tar.bz2 |
Remove implicit name hack for trait associated types
Before the TypePath resolution was updated to support associated type paths
and projections, we used an implict name hack of Self::<associated-type> as
well as the usual TraitName::<associates-type> this was a hack in the short
term to get things working which can now be removed.
Addresses: #739
Diffstat (limited to 'gcc')
11 files changed, 4 insertions, 35 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve-item.h b/gcc/rust/resolve/rust-ast-resolve-item.h index 86c9934..f60732c 100644 --- a/gcc/rust/resolve/rust-ast-resolve-item.h +++ b/gcc/rust/resolve/rust-ast-resolve-item.h @@ -35,29 +35,14 @@ class ResolveTraitItems : public ResolverBase using Rust::Resolver::ResolverBase::visit; public: - static void go (AST::TraitItem *item, const CanonicalPath &self) + static void go (AST::TraitItem *item) { - ResolveTraitItems resolver (self); + ResolveTraitItems resolver; item->accept_vis (resolver); }; void visit (AST::TraitItemType &type) override { - // insert Self::type_alias for TypePath lookup - auto path - = self.append (ResolveTraitItemTypeToCanonicalPath::resolve (type)); - resolver->get_type_scope ().insert ( - path, type.get_node_id (), type.get_locus (), false, - [&] (const CanonicalPath &, NodeId, Location locus) -> void { - RichLocation r (type.get_locus ()); - r.add_range (locus); - rust_error_at (r, "redefined multiple times"); - }); - - // FIXME this stops the erronious unused decls which will be fixed later on - resolver->get_type_scope ().append_reference_for_def (type.get_node_id (), - type.get_node_id ()); - for (auto &bound : type.get_type_param_bounds ()) ResolveTypeBound::go (bound.get (), type.get_node_id ()); } @@ -189,11 +174,7 @@ public: } private: - ResolveTraitItems (const CanonicalPath &self) - : ResolverBase (UNKNOWN_NODEID), self (self) - {} - - const CanonicalPath &self; + ResolveTraitItems () : ResolverBase (UNKNOWN_NODEID) {} }; class ResolveItem : public ResolverBase @@ -649,7 +630,7 @@ public: for (auto &item : trait.get_trait_items ()) { - ResolveTraitItems::go (item.get (), Self); + ResolveTraitItems::go (item.get ()); } resolver->get_type_scope ().pop (); diff --git a/gcc/testsuite/rust/compile/torture/issue-808.rs b/gcc/testsuite/rust/compile/torture/issue-808.rs index bfbf774..9aa00fe 100644 --- a/gcc/testsuite/rust/compile/torture/issue-808.rs +++ b/gcc/testsuite/rust/compile/torture/issue-808.rs @@ -1,6 +1,5 @@ pub trait Foo { type Target; - // { dg-warning "unused name" "" { target *-*-* } .-1 } fn bar(&self) -> &Self::Target; // { dg-warning "unused name .self." "" { target *-*-* } .-1 } diff --git a/gcc/testsuite/rust/compile/torture/traits11.rs b/gcc/testsuite/rust/compile/torture/traits11.rs index b5fc023..41c82f0 100644 --- a/gcc/testsuite/rust/compile/torture/traits11.rs +++ b/gcc/testsuite/rust/compile/torture/traits11.rs @@ -1,6 +1,5 @@ trait Foo { type A; - // { dg-warning "unused name" "" { target *-*-* } .-1 } fn test(a: Self::A) -> Self::A { a diff --git a/gcc/testsuite/rust/compile/torture/traits4.rs b/gcc/testsuite/rust/compile/torture/traits4.rs index 1db5f32..10d9479 100644 --- a/gcc/testsuite/rust/compile/torture/traits4.rs +++ b/gcc/testsuite/rust/compile/torture/traits4.rs @@ -1,8 +1,6 @@ trait Foo { type A; - // { dg-warning "unused name" "" { target *-*-* } .-1 } type B; - // { dg-warning "unused name" "" { target *-*-* } .-1 } fn new(a: Self::A, b: Self::B) -> Self; // { dg-warning "unused name .a." "" { target *-*-* } .-1 } diff --git a/gcc/testsuite/rust/compile/torture/traits5.rs b/gcc/testsuite/rust/compile/torture/traits5.rs index 87c0283..4a396a0 100644 --- a/gcc/testsuite/rust/compile/torture/traits5.rs +++ b/gcc/testsuite/rust/compile/torture/traits5.rs @@ -1,8 +1,6 @@ trait Foo { type A; - // { dg-warning "unused name" "" { target *-*-* } .-1 } type B; - // { dg-warning "unused name" "" { target *-*-* } .-1 } fn new(a: Self::A, b: Self::B) -> Self; // { dg-warning "unused name .a." "" { target *-*-* } .-1 } diff --git a/gcc/testsuite/rust/compile/torture/traits6.rs b/gcc/testsuite/rust/compile/torture/traits6.rs index 5aae2e3..a69c6fd 100644 --- a/gcc/testsuite/rust/compile/torture/traits6.rs +++ b/gcc/testsuite/rust/compile/torture/traits6.rs @@ -1,6 +1,5 @@ trait Foo { type A; - // { dg-warning "unused name .Foo::A." "" { target *-*-* } .-1 } fn baz(a: Self::A) -> Self::A; // { dg-warning "unused name .a." "" { target *-*-* } .-1 } diff --git a/gcc/testsuite/rust/execute/torture/operator_overload_1.rs b/gcc/testsuite/rust/execute/torture/operator_overload_1.rs index e52b394..997ab04 100644 --- a/gcc/testsuite/rust/execute/torture/operator_overload_1.rs +++ b/gcc/testsuite/rust/execute/torture/operator_overload_1.rs @@ -6,7 +6,6 @@ extern "C" { #[lang = "add"] pub trait Add<Rhs = Self> { type Output; - // { dg-warning "unused name" "" { target *-*-* } .-1 } fn add(self, rhs: Rhs) -> Self::Output; // { dg-warning "unused name .self." "" { target *-*-* } .-1 } diff --git a/gcc/testsuite/rust/execute/torture/operator_overload_2.rs b/gcc/testsuite/rust/execute/torture/operator_overload_2.rs index 9d5615d..8d6a073 100644 --- a/gcc/testsuite/rust/execute/torture/operator_overload_2.rs +++ b/gcc/testsuite/rust/execute/torture/operator_overload_2.rs @@ -6,7 +6,6 @@ extern "C" { #[lang = "add"] pub trait Add<Rhs = Self> { type Output; - // { dg-warning "unused name" "" { target *-*-* } .-1 } fn add(self, rhs: Rhs) -> Self::Output; // { dg-warning "unused name .self." "" { target *-*-* } .-1 } diff --git a/gcc/testsuite/rust/execute/torture/operator_overload_3.rs b/gcc/testsuite/rust/execute/torture/operator_overload_3.rs index bd99b50..50ff799 100644 --- a/gcc/testsuite/rust/execute/torture/operator_overload_3.rs +++ b/gcc/testsuite/rust/execute/torture/operator_overload_3.rs @@ -6,7 +6,6 @@ extern "C" { #[lang = "add"] pub trait Add<Rhs = Self> { type Output; - // { dg-warning "unused name" "" { target *-*-* } .-1 } fn add(self, rhs: Rhs) -> Self::Output; // { dg-warning "unused name .self." "" { target *-*-* } .-1 } diff --git a/gcc/testsuite/rust/execute/torture/operator_overload_4.rs b/gcc/testsuite/rust/execute/torture/operator_overload_4.rs index eca19de..5ca5c7a 100644 --- a/gcc/testsuite/rust/execute/torture/operator_overload_4.rs +++ b/gcc/testsuite/rust/execute/torture/operator_overload_4.rs @@ -6,7 +6,6 @@ extern "C" { #[lang = "neg"] pub trait Neg { type Output; - // { dg-warning "unused name" "" { target *-*-* } .-1 } fn neg(self) -> Self::Output; // { dg-warning "unused name .self." "" { target *-*-* } .-1 } diff --git a/gcc/testsuite/rust/execute/torture/operator_overload_5.rs b/gcc/testsuite/rust/execute/torture/operator_overload_5.rs index ffdc8c2..5aac3ad 100644 --- a/gcc/testsuite/rust/execute/torture/operator_overload_5.rs +++ b/gcc/testsuite/rust/execute/torture/operator_overload_5.rs @@ -6,7 +6,6 @@ extern "C" { #[lang = "not"] pub trait Not { type Output; - // { dg-warning "unused name" "" { target *-*-* } .-1 } fn not(self) -> Self::Output; // { dg-warning "unused name .self." "" { target *-*-* } .-1 } |