diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/rust/resolve/rust-ast-resolve-item.cc | 18 | ||||
-rw-r--r-- | gcc/rust/typecheck/rust-hir-type-check-path.cc | 15 | ||||
-rw-r--r-- | gcc/rust/typecheck/rust-hir-type-check-type.cc | 18 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/const_generics_5.rs | 15 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/issue-2039.rs | 22 | ||||
-rw-r--r-- | gcc/testsuite/rust/compile/issue-2043.rs | 12 |
6 files changed, 46 insertions, 54 deletions
diff --git a/gcc/rust/resolve/rust-ast-resolve-item.cc b/gcc/rust/resolve/rust-ast-resolve-item.cc index 0605acc..9758984 100644 --- a/gcc/rust/resolve/rust-ast-resolve-item.cc +++ b/gcc/rust/resolve/rust-ast-resolve-item.cc @@ -142,13 +142,8 @@ ResolveTraitItems::visit (AST::TraitItemMethod &func) if (self_param.has_type ()) { - if (self_param.get_has_ref ()) - { - // FIXME is this true? - rust_error_at ( - self_param.get_locus (), - "it is not possible to mark self as reference and specify type"); - } + // This shouldn't happen the parser should already error for this + rust_assert (!self_param.get_has_ref ()); ResolveType::go (self_param.get_type ().get ()); } else @@ -655,13 +650,8 @@ ResolveItem::visit (AST::Method &method) if (self_param.has_type ()) { - if (self_param.get_has_ref ()) - { - // FIXME is this true? - rust_error_at ( - self_param.get_locus (), - "it is not possible to mark self as reference and specify type"); - } + // This shouldn't happen the parser should already error for this + rust_assert (!self_param.get_has_ref ()); ResolveType::go (self_param.get_type ().get ()); } else diff --git a/gcc/rust/typecheck/rust-hir-type-check-path.cc b/gcc/rust/typecheck/rust-hir-type-check-path.cc index 88c927d..68ff995 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-path.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-path.cc @@ -280,14 +280,6 @@ TypeCheckExpr::resolve_root_path (HIR::PathInExpression &expr, size_t *offset, // turbo-fish segment path::<ty> if (seg.has_generic_args ()) { - if (!lookup->has_subsititions_defined ()) - { - rust_error_at (expr.get_locus (), - "substitutions not supported for %s", - root_tyty->as_string ().c_str ()); - return new TyTy::ErrorType (expr.get_mappings ().get_hirid ()); - } - lookup = SubstMapper::Resolve (lookup, expr.get_locus (), &seg.get_generic_args ()); if (lookup->get_kind () == TyTy::TypeKind::ERROR) @@ -456,13 +448,6 @@ TypeCheckExpr::resolve_segments (NodeId root_resolved_node_id, if (seg.has_generic_args ()) { - if (!tyseg->has_subsititions_defined ()) - { - rust_error_at (expr_locus, "substitutions not supported for %s", - tyseg->as_string ().c_str ()); - return; - } - tyseg = SubstMapper::Resolve (tyseg, expr_locus, &seg.get_generic_args ()); if (tyseg->get_kind () == TyTy::TypeKind::ERROR) diff --git a/gcc/rust/typecheck/rust-hir-type-check-type.cc b/gcc/rust/typecheck/rust-hir-type-check-type.cc index ee683d8..dad0c41 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-type.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-type.cc @@ -398,17 +398,10 @@ TypeCheckType::resolve_root_path (HIR::TypePath &path, size_t *offset, HIR::TypePathSegmentGeneric *generic_segment = static_cast<HIR::TypePathSegmentGeneric *> (seg.get ()); - if (!lookup->has_subsititions_defined ()) - { - rust_error_at (path.get_locus (), - "TypePath %s declares generic arguments but the " - "type %s does not have any", - path.as_string ().c_str (), - lookup->as_string ().c_str ()); - return new TyTy::ErrorType (lookup->get_ref ()); - } lookup = SubstMapper::Resolve (lookup, path.get_locus (), &generic_segment->get_generic_args ()); + if (lookup->get_kind () == TyTy::TypeKind::ERROR) + return new TyTy::ErrorType (seg->get_mappings ().get_hirid ()); } else if (lookup->needs_generic_substitutions ()) { @@ -494,13 +487,6 @@ TypeCheckType::resolve_segments ( HIR::TypePathSegmentGeneric *generic_segment = static_cast<HIR::TypePathSegmentGeneric *> (seg.get ()); - if (!tyseg->has_subsititions_defined ()) - { - rust_error_at (expr_locus, "substitutions not supported for %s", - tyseg->as_string ().c_str ()); - return new TyTy::ErrorType (expr_id); - } - tyseg = SubstMapper::Resolve (tyseg, expr_locus, &generic_segment->get_generic_args ()); if (tyseg->get_kind () == TyTy::TypeKind::ERROR) diff --git a/gcc/testsuite/rust/compile/const_generics_5.rs b/gcc/testsuite/rust/compile/const_generics_5.rs index 46cf6c9..685229e 100644 --- a/gcc/testsuite/rust/compile/const_generics_5.rs +++ b/gcc/testsuite/rust/compile/const_generics_5.rs @@ -1,15 +1,12 @@ -// bogus errors but shows the type checking system needs to support const -// generics with defaults - +// { dg-options "-w" } struct Foo<const N: usize = { 14 }>; const M: usize = 15; -type N = Foo<3>; // { dg-error "TypePath Foo<> declares generic arguments but the type Foo{Foo {}} does not have any" } +type N = Foo<3>; fn main() { - let _: Foo<15> = Foo; // { dg-error "TypePath Foo<> declares generic arguments but the type Foo{Foo {}} does not have any" } - let _: Foo<{ M }> = Foo; // { dg-error "TypePath Foo<> declares generic arguments but the type Foo{Foo {}} does not have any" } - let _: Foo<M> = Foo; // { dg-error "TypePath Foo<> declares generic arguments but the type Foo{Foo {}} does not have any" } - - let _: Foo<N> = Foo; // { dg-error "TypePath Foo<N> declares generic arguments but the type Foo{Foo {}} does not have any" } + let _: Foo<15> = Foo; + let _: Foo<{ M }> = Foo; + let _: Foo<M> = Foo; + // let _: Foo<N> = Foo; this causes an ICE we need to do const generics } diff --git a/gcc/testsuite/rust/compile/issue-2039.rs b/gcc/testsuite/rust/compile/issue-2039.rs new file mode 100644 index 0000000..70eb0ee --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2039.rs @@ -0,0 +1,22 @@ +// { dg-options "-w" } +pub struct Lexer<'a> { + input: &'a str, +} + +impl<'a> Lexer<'a> { + pub fn new(input: &'a str) -> Lexer<'a> { + Lexer { input: input } + } +} + +struct Parser<'a> { + lexer: &'a mut Lexer<'a>, +} + +impl<'a> Parser<'a> { + pub fn new(lexer: &'a mut Lexer) -> Parser<'a> { + Parser { lexer: lexer } + } +} + +fn main() {} diff --git a/gcc/testsuite/rust/compile/issue-2043.rs b/gcc/testsuite/rust/compile/issue-2043.rs new file mode 100644 index 0000000..efa1ded --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2043.rs @@ -0,0 +1,12 @@ +struct Foo<'a> { + // { dg-warning "struct is never constructed: .Foo." "" { target *-*-* } .-1 } + data: &'a [u8], +} + +impl<'a> Foo<'a> { + fn bar(self: &mut Foo<'a>) {} + // { dg-warning "associated function is never used: .bar." "" { target *-*-* } .-1 } + // { dg-warning "unused name .self." "" { target *-*-* } .-2 } +} + +fn main() {} |