aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPhilip Herron <philip.herron@embecosm.com>2021-11-18 13:53:47 +0000
committerPhilip Herron <philip.herron@embecosm.com>2021-11-18 13:53:47 +0000
commit0ecb6ea16bdec84016557536939140fea686f560 (patch)
tree8a4a116d01cf42ff7507832321618320eed77c3e /gcc
parent0995184e26f81f8ba6872c3efb59f640a7fe7162 (diff)
downloadgcc-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')
-rw-r--r--gcc/rust/resolve/rust-ast-resolve-item.h27
-rw-r--r--gcc/testsuite/rust/compile/torture/issue-808.rs1
-rw-r--r--gcc/testsuite/rust/compile/torture/traits11.rs1
-rw-r--r--gcc/testsuite/rust/compile/torture/traits4.rs2
-rw-r--r--gcc/testsuite/rust/compile/torture/traits5.rs2
-rw-r--r--gcc/testsuite/rust/compile/torture/traits6.rs1
-rw-r--r--gcc/testsuite/rust/execute/torture/operator_overload_1.rs1
-rw-r--r--gcc/testsuite/rust/execute/torture/operator_overload_2.rs1
-rw-r--r--gcc/testsuite/rust/execute/torture/operator_overload_3.rs1
-rw-r--r--gcc/testsuite/rust/execute/torture/operator_overload_4.rs1
-rw-r--r--gcc/testsuite/rust/execute/torture/operator_overload_5.rs1
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 }