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
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
// 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)
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)
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 ())
{
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)
-// 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
}
--- /dev/null
+// { 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() {}
--- /dev/null
+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() {}