From 4e0e1889990bdf1d6f10c9071144c44eebc80e97 Mon Sep 17 00:00:00 2001 From: varkor Date: Thu, 7 Feb 2019 14:59:59 +0100 Subject: [PATCH] Make name resolution handle consts in GenericParamsFromOuterFunction properly --- src/librustc_resolve/lib.rs | 49 ++++++++++++++----- src/librustc_typeck/diagnostics.rs | 5 +- src/libsyntax/parse/token.rs | 3 +- src/test/ui/bad/bad-type-env-capture.rs | 2 +- src/test/ui/bad/bad-type-env-capture.stderr | 8 +-- src/test/ui/error-codes/E0401.stderr | 16 +++--- src/test/ui/inner-static-type-parameter.rs | 2 +- .../ui/inner-static-type-parameter.stderr | 6 +-- src/test/ui/issues/issue-12796.rs | 2 +- src/test/ui/issues/issue-12796.stderr | 4 +- src/test/ui/issues/issue-3021-c.rs | 4 +- src/test/ui/issues/issue-3021-c.stderr | 16 +++--- src/test/ui/issues/issue-3214.rs | 2 +- src/test/ui/issues/issue-3214.stderr | 8 +-- src/test/ui/issues/issue-5997-enum.rs | 2 +- src/test/ui/issues/issue-5997-enum.stderr | 6 +-- src/test/ui/issues/issue-5997-struct.rs | 2 +- src/test/ui/issues/issue-5997-struct.stderr | 8 +-- src/test/ui/nested-ty-params.rs | 2 +- src/test/ui/nested-ty-params.stderr | 12 ++--- .../resolve-type-param-in-item-in-trait.rs | 8 +-- ...resolve-type-param-in-item-in-trait.stderr | 24 ++++----- src/test/ui/type/type-arg-out-of-scope.rs | 2 +- src/test/ui/type/type-arg-out-of-scope.stderr | 12 ++--- src/test/ui/use-self-in-inner-fn.rs | 4 +- src/test/ui/use-self-in-inner-fn.stderr | 4 +- 26 files changed, 120 insertions(+), 93 deletions(-) diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index ebd6b0eb5dab0..365ba974d5aea 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -142,8 +142,8 @@ impl Ord for BindingError { } enum ResolutionError<'a> { - /// error E0401: can't use type parameters from outer function - TypeParametersFromOuterFunction(Def), + /// error E0401: can't use type or const parameters from outer function + GenericParamsFromOuterFunction(Def), /// error E0403: the name is already used for a type/const parameter in this list of /// generic parameters NameAlreadyUsedInParameterList(Name, &'a Span), @@ -196,13 +196,13 @@ fn resolve_struct_error<'sess, 'a>(resolver: &'sess Resolver<'_>, resolution_error: ResolutionError<'a>) -> DiagnosticBuilder<'sess> { match resolution_error { - ResolutionError::TypeParametersFromOuterFunction(outer_def) => { + ResolutionError::GenericParamsFromOuterFunction(outer_def) => { let mut err = struct_span_err!(resolver.session, span, E0401, - "can't use type parameters from outer function", + "can't use generic parameters from outer function", ); - err.span_label(span, format!("use of type variable from outer function")); + err.span_label(span, format!("use of generic parameter from outer function")); let cm = resolver.session.source_map(); match outer_def { @@ -231,15 +231,20 @@ fn resolve_struct_error<'sess, 'a>(resolver: &'sess Resolver<'_>, err.span_label(span, "type variable from outer function"); } } + Def::ConstParam(def_id) => { + if let Some(span) = resolver.definitions.opt_span(def_id) { + err.span_label(span, "const variable from outer function"); + } + } _ => { - bug!("TypeParametersFromOuterFunction should only be used with Def::SelfTy, \ + bug!("GenericParamsFromOuterFunction should only be used with Def::SelfTy, \ Def::TyParam"); } } // Try to retrieve the span of the function signature and generate a new message with // a local type or const parameter. - let sugg_msg = &format!("try using a local type parameter instead"); + let sugg_msg = &format!("try using a local generic parameter instead"); if let Some((sugg_span, new_snippet)) = cm.generate_local_type_param_snippet(span) { // Suggest the modification to the user err.span_suggestion( @@ -250,9 +255,9 @@ fn resolve_struct_error<'sess, 'a>(resolver: &'sess Resolver<'_>, ); } else if let Some(sp) = cm.generate_fn_name_span(span) { err.span_label(sp, - format!("try adding a local type parameter in this method instead")); + format!("try adding a local generic parameter in this method instead")); } else { - err.help(&format!("try using a local type parameter instead")); + err.help(&format!("try using a local generic parameter instead")); } err @@ -549,8 +554,7 @@ impl<'a> PathSource<'a> { Def::Struct(..) | Def::Union(..) | Def::Enum(..) | Def::Trait(..) | Def::TraitAlias(..) | Def::TyAlias(..) | Def::AssociatedTy(..) | Def::PrimTy(..) | Def::TyParam(..) | - Def::SelfTy(..) | Def::Existential(..) | Def::ConstParam(..) | - Def::ForeignTy(..) => true, + Def::SelfTy(..) | Def::Existential(..) | Def::ForeignTy(..) => true, _ => false, }, PathSource::Trait(AliasPossibility::No) => match def { @@ -803,6 +807,7 @@ impl<'a, 'tcx> Visitor<'tcx> for Resolver<'a> { _: Span, node_id: NodeId) { + debug!("(resolving function) entering function"); let (rib_kind, asyncness) = match function_kind { FnKind::ItemFn(_, ref header, ..) => (ItemRibKind, header.asyncness), @@ -2053,6 +2058,7 @@ impl<'a> Resolver<'a> { let record_used = record_used_id.is_some(); let mut module = self.graph_root; for i in (0 .. self.ribs[ns].len()).rev() { + debug!("walk rib\n{:?}", self.ribs[ns][i].bindings); if let Some(def) = self.ribs[ns][i].bindings.get(&ident).cloned() { // The ident resolves to a type parameter or local variable. return Some(LexicalScopeBinding::Def( @@ -4223,7 +4229,7 @@ impl<'a> Resolver<'a> { resolve_error( self, span, - ResolutionError::TypeParametersFromOuterFunction(def), + ResolutionError::GenericParamsFromOuterFunction(def), ); } return Def::Err; @@ -4231,6 +4237,25 @@ impl<'a> Resolver<'a> { } } } + Def::ConstParam(..) => { + // A const param is always declared in a signature, which is always followed by + // some kind of function rib kind (specifically, ItemRibKind in the case of a + // normal function), so we can skip the first rib as it will be guaranteed to + // (spuriously) conflict with the const param. + for rib in &ribs[1..] { + if let ItemRibKind = rib.kind { + // This was an attempt to use a const parameter outside its scope. + if record_used { + resolve_error( + self, + span, + ResolutionError::GenericParamsFromOuterFunction(def), + ); + } + return Def::Err; + } + } + } _ => {} } def diff --git a/src/librustc_typeck/diagnostics.rs b/src/librustc_typeck/diagnostics.rs index 3ed09dfe99239..e6533ac4b7559 100644 --- a/src/librustc_typeck/diagnostics.rs +++ b/src/librustc_typeck/diagnostics.rs @@ -348,13 +348,14 @@ fn main() { "##, E0044: r##" -You can't use type parameters on foreign items. Example of erroneous code: +You can't use type or const parameters on foreign items. +Example of erroneous code: ```compile_fail,E0044 extern { fn some_func(x: T); } ``` -To fix this, replace the type parameter with the specializations that you +To fix this, replace the generic parameter with the specializations that you need: ``` diff --git a/src/libsyntax/parse/token.rs b/src/libsyntax/parse/token.rs index c3885f0d04d15..d5856c67156c0 100644 --- a/src/libsyntax/parse/token.rs +++ b/src/libsyntax/parse/token.rs @@ -284,6 +284,7 @@ impl Token { match self { OpenDelim(Brace) => true, Interpolated(ref nt) => match nt.0 { + NtExpr(..) => true, NtBlock(..) => true, NtLiteral(..) => true, _ => false, @@ -306,7 +307,7 @@ impl Token { } } - /// Returns `true` if the token is any literal, a minus (which can follow a literal, + /// Returns `true` if the token is any literal, a minus (which can prefix a literal, /// for example a '-42', or one of the boolean idents). crate fn can_begin_literal_or_bool(&self) -> bool { match *self { diff --git a/src/test/ui/bad/bad-type-env-capture.rs b/src/test/ui/bad/bad-type-env-capture.rs index d2e6dff125273..53dfb13139a54 100644 --- a/src/test/ui/bad/bad-type-env-capture.rs +++ b/src/test/ui/bad/bad-type-env-capture.rs @@ -1,4 +1,4 @@ fn foo() { - fn bar(b: T) { } //~ ERROR can't use type parameters from outer + fn bar(b: T) { } //~ ERROR can't use generic parameters from outer } fn main() { } diff --git a/src/test/ui/bad/bad-type-env-capture.stderr b/src/test/ui/bad/bad-type-env-capture.stderr index 5558a44006180..ce803e96801f9 100644 --- a/src/test/ui/bad/bad-type-env-capture.stderr +++ b/src/test/ui/bad/bad-type-env-capture.stderr @@ -1,12 +1,12 @@ -error[E0401]: can't use type parameters from outer function +error[E0401]: can't use generic parameters from outer function --> $DIR/bad-type-env-capture.rs:2:15 | LL | fn foo() { | - type variable from outer function -LL | fn bar(b: T) { } //~ ERROR can't use type parameters from outer - | --- ^ use of type variable from outer function +LL | fn bar(b: T) { } //~ ERROR can't use generic parameters from outer + | --- ^ use of generic parameter from outer function | | - | help: try using a local type parameter instead: `bar` + | help: try using a local generic parameter instead: `bar` error: aborting due to previous error diff --git a/src/test/ui/error-codes/E0401.stderr b/src/test/ui/error-codes/E0401.stderr index c94fa497678e0..27f281ee43786 100644 --- a/src/test/ui/error-codes/E0401.stderr +++ b/src/test/ui/error-codes/E0401.stderr @@ -1,26 +1,26 @@ -error[E0401]: can't use type parameters from outer function +error[E0401]: can't use generic parameters from outer function --> $DIR/E0401.rs:4:39 | LL | fn foo(x: T) { | - type variable from outer function LL | fn bfnr, W: Fn()>(y: T) { //~ ERROR E0401 - | --------------------------- ^ use of type variable from outer function + | --------------------------- ^ use of generic parameter from outer function | | - | help: try using a local type parameter instead: `bfnr, W: Fn(), T>` + | help: try using a local generic parameter instead: `bfnr, W: Fn(), T>` -error[E0401]: can't use type parameters from outer function +error[E0401]: can't use generic parameters from outer function --> $DIR/E0401.rs:9:16 | LL | fn foo(x: T) { | - type variable from outer function ... LL | fn baz $DIR/E0401.rs:22:25 | LL | impl Iterator for A { @@ -29,7 +29,7 @@ LL | impl Iterator for A { LL | fn helper(sel: &Self) -> u8 { //~ ERROR E0401 | ^^^^ | | - | use of type variable from outer function + | use of generic parameter from outer function | use a type here instead error: aborting due to 3 previous errors diff --git a/src/test/ui/inner-static-type-parameter.rs b/src/test/ui/inner-static-type-parameter.rs index 60b4c5b8131b3..c08ccd29d8011 100644 --- a/src/test/ui/inner-static-type-parameter.rs +++ b/src/test/ui/inner-static-type-parameter.rs @@ -4,7 +4,7 @@ enum Bar { What } //~ ERROR parameter `T` is never used fn foo() { static a: Bar = Bar::What; -//~^ ERROR can't use type parameters from outer function +//~^ ERROR can't use generic parameters from outer function } fn main() { diff --git a/src/test/ui/inner-static-type-parameter.stderr b/src/test/ui/inner-static-type-parameter.stderr index 2f2856edb0ca9..87fb364954d96 100644 --- a/src/test/ui/inner-static-type-parameter.stderr +++ b/src/test/ui/inner-static-type-parameter.stderr @@ -1,12 +1,12 @@ -error[E0401]: can't use type parameters from outer function +error[E0401]: can't use generic parameters from outer function --> $DIR/inner-static-type-parameter.rs:6:19 | LL | fn foo() { | --- - type variable from outer function | | - | try adding a local type parameter in this method instead + | try adding a local generic parameter in this method instead LL | static a: Bar = Bar::What; - | ^ use of type variable from outer function + | ^ use of generic parameter from outer function error[E0392]: parameter `T` is never used --> $DIR/inner-static-type-parameter.rs:3:10 diff --git a/src/test/ui/issues/issue-12796.rs b/src/test/ui/issues/issue-12796.rs index acd4584c73700..942d6b9a5686e 100644 --- a/src/test/ui/issues/issue-12796.rs +++ b/src/test/ui/issues/issue-12796.rs @@ -1,7 +1,7 @@ trait Trait { fn outer(&self) { fn inner(_: &Self) { - //~^ ERROR can't use type parameters from outer function + //~^ ERROR can't use generic parameters from outer function } } } diff --git a/src/test/ui/issues/issue-12796.stderr b/src/test/ui/issues/issue-12796.stderr index 4bc29fd37dc4a..a01fd2d65420b 100644 --- a/src/test/ui/issues/issue-12796.stderr +++ b/src/test/ui/issues/issue-12796.stderr @@ -1,10 +1,10 @@ -error[E0401]: can't use type parameters from outer function +error[E0401]: can't use generic parameters from outer function --> $DIR/issue-12796.rs:3:22 | LL | fn inner(_: &Self) { | ^^^^ | | - | use of type variable from outer function + | use of generic parameter from outer function | can't use `Self` here error: aborting due to previous error diff --git a/src/test/ui/issues/issue-3021-c.rs b/src/test/ui/issues/issue-3021-c.rs index 491336206ca94..94ed1fdf78191 100644 --- a/src/test/ui/issues/issue-3021-c.rs +++ b/src/test/ui/issues/issue-3021-c.rs @@ -1,8 +1,8 @@ fn siphash() { trait U { - fn g(&self, x: T) -> T; //~ ERROR can't use type parameters from outer function - //~^ ERROR can't use type parameters from outer function + fn g(&self, x: T) -> T; //~ ERROR can't use generic parameters from outer function + //~^ ERROR can't use generic parameters from outer function } } diff --git a/src/test/ui/issues/issue-3021-c.stderr b/src/test/ui/issues/issue-3021-c.stderr index 323ce4fa30613..5eadf7837c7d0 100644 --- a/src/test/ui/issues/issue-3021-c.stderr +++ b/src/test/ui/issues/issue-3021-c.stderr @@ -1,24 +1,24 @@ -error[E0401]: can't use type parameters from outer function +error[E0401]: can't use generic parameters from outer function --> $DIR/issue-3021-c.rs:4:24 | LL | fn siphash() { | - type variable from outer function ... -LL | fn g(&self, x: T) -> T; //~ ERROR can't use type parameters from outer function - | - ^ use of type variable from outer function +LL | fn g(&self, x: T) -> T; //~ ERROR can't use generic parameters from outer function + | - ^ use of generic parameter from outer function | | - | help: try using a local type parameter instead: `g` + | help: try using a local generic parameter instead: `g` -error[E0401]: can't use type parameters from outer function +error[E0401]: can't use generic parameters from outer function --> $DIR/issue-3021-c.rs:4:30 | LL | fn siphash() { | - type variable from outer function ... -LL | fn g(&self, x: T) -> T; //~ ERROR can't use type parameters from outer function - | - ^ use of type variable from outer function +LL | fn g(&self, x: T) -> T; //~ ERROR can't use generic parameters from outer function + | - ^ use of generic parameter from outer function | | - | help: try using a local type parameter instead: `g` + | help: try using a local generic parameter instead: `g` error: aborting due to 2 previous errors diff --git a/src/test/ui/issues/issue-3214.rs b/src/test/ui/issues/issue-3214.rs index 85eae2686e6a9..9a727aa305797 100644 --- a/src/test/ui/issues/issue-3214.rs +++ b/src/test/ui/issues/issue-3214.rs @@ -1,6 +1,6 @@ fn foo() { struct Foo { - x: T, //~ ERROR can't use type parameters from outer function + x: T, //~ ERROR can't use generic parameters from outer function } impl Drop for Foo { diff --git a/src/test/ui/issues/issue-3214.stderr b/src/test/ui/issues/issue-3214.stderr index 4ecea4f98006e..e6526bad3e0d3 100644 --- a/src/test/ui/issues/issue-3214.stderr +++ b/src/test/ui/issues/issue-3214.stderr @@ -1,13 +1,13 @@ -error[E0401]: can't use type parameters from outer function +error[E0401]: can't use generic parameters from outer function --> $DIR/issue-3214.rs:3:12 | LL | fn foo() { | --- - type variable from outer function | | - | try adding a local type parameter in this method instead + | try adding a local generic parameter in this method instead LL | struct Foo { -LL | x: T, //~ ERROR can't use type parameters from outer function - | ^ use of type variable from outer function +LL | x: T, //~ ERROR can't use generic parameters from outer function + | ^ use of generic parameter from outer function error[E0107]: wrong number of type arguments: expected 0, found 1 --> $DIR/issue-3214.rs:6:26 diff --git a/src/test/ui/issues/issue-5997-enum.rs b/src/test/ui/issues/issue-5997-enum.rs index 0987117ecd402..3ff4e036c60be 100644 --- a/src/test/ui/issues/issue-5997-enum.rs +++ b/src/test/ui/issues/issue-5997-enum.rs @@ -1,6 +1,6 @@ fn f() -> bool { enum E { V(Z) } - //~^ ERROR can't use type parameters from outer function + //~^ ERROR can't use generic parameters from outer function true } diff --git a/src/test/ui/issues/issue-5997-enum.stderr b/src/test/ui/issues/issue-5997-enum.stderr index 5c26dc92c8584..5c778143e13dd 100644 --- a/src/test/ui/issues/issue-5997-enum.stderr +++ b/src/test/ui/issues/issue-5997-enum.stderr @@ -1,12 +1,12 @@ -error[E0401]: can't use type parameters from outer function +error[E0401]: can't use generic parameters from outer function --> $DIR/issue-5997-enum.rs:2:16 | LL | fn f() -> bool { | - - type variable from outer function | | - | try adding a local type parameter in this method instead + | try adding a local generic parameter in this method instead LL | enum E { V(Z) } - | ^ use of type variable from outer function + | ^ use of generic parameter from outer function error: aborting due to previous error diff --git a/src/test/ui/issues/issue-5997-struct.rs b/src/test/ui/issues/issue-5997-struct.rs index 04ac489a55c50..6cf510b0a9d75 100644 --- a/src/test/ui/issues/issue-5997-struct.rs +++ b/src/test/ui/issues/issue-5997-struct.rs @@ -1,5 +1,5 @@ fn f() -> bool { - struct S(T); //~ ERROR can't use type parameters from outer function + struct S(T); //~ ERROR can't use generic parameters from outer function true } diff --git a/src/test/ui/issues/issue-5997-struct.stderr b/src/test/ui/issues/issue-5997-struct.stderr index 1d05d13242e8e..a60987b3f98ba 100644 --- a/src/test/ui/issues/issue-5997-struct.stderr +++ b/src/test/ui/issues/issue-5997-struct.stderr @@ -1,12 +1,12 @@ -error[E0401]: can't use type parameters from outer function +error[E0401]: can't use generic parameters from outer function --> $DIR/issue-5997-struct.rs:2:14 | LL | fn f() -> bool { | - - type variable from outer function | | - | try adding a local type parameter in this method instead -LL | struct S(T); //~ ERROR can't use type parameters from outer function - | ^ use of type variable from outer function + | try adding a local generic parameter in this method instead +LL | struct S(T); //~ ERROR can't use generic parameters from outer function + | ^ use of generic parameter from outer function error: aborting due to previous error diff --git a/src/test/ui/nested-ty-params.rs b/src/test/ui/nested-ty-params.rs index 102f8d02ee416..85413acdb1491 100644 --- a/src/test/ui/nested-ty-params.rs +++ b/src/test/ui/nested-ty-params.rs @@ -1,4 +1,4 @@ -// error-pattern:can't use type parameters from outer function +// error-pattern:can't use generic parameters from outer function fn hd(v: Vec ) -> U { fn hd1(w: [U]) -> U { return w[0]; } diff --git a/src/test/ui/nested-ty-params.stderr b/src/test/ui/nested-ty-params.stderr index 617eddf6525df..37adeffb9b07a 100644 --- a/src/test/ui/nested-ty-params.stderr +++ b/src/test/ui/nested-ty-params.stderr @@ -1,22 +1,22 @@ -error[E0401]: can't use type parameters from outer function +error[E0401]: can't use generic parameters from outer function --> $DIR/nested-ty-params.rs:3:16 | LL | fn hd(v: Vec ) -> U { | - type variable from outer function LL | fn hd1(w: [U]) -> U { return w[0]; } - | --- ^ use of type variable from outer function + | --- ^ use of generic parameter from outer function | | - | help: try using a local type parameter instead: `hd1` + | help: try using a local generic parameter instead: `hd1` -error[E0401]: can't use type parameters from outer function +error[E0401]: can't use generic parameters from outer function --> $DIR/nested-ty-params.rs:3:23 | LL | fn hd(v: Vec ) -> U { | - type variable from outer function LL | fn hd1(w: [U]) -> U { return w[0]; } - | --- ^ use of type variable from outer function + | --- ^ use of generic parameter from outer function | | - | help: try using a local type parameter instead: `hd1` + | help: try using a local generic parameter instead: `hd1` error: aborting due to 2 previous errors diff --git a/src/test/ui/resolve/resolve-type-param-in-item-in-trait.rs b/src/test/ui/resolve/resolve-type-param-in-item-in-trait.rs index 112427a3fceae..c77a66524f73f 100644 --- a/src/test/ui/resolve/resolve-type-param-in-item-in-trait.rs +++ b/src/test/ui/resolve/resolve-type-param-in-item-in-trait.rs @@ -6,7 +6,7 @@ trait TraitA { fn outer(&self) { enum Foo { Variance(A) - //~^ ERROR can't use type parameters from outer function + //~^ ERROR can't use generic parameters from outer function } } } @@ -14,21 +14,21 @@ trait TraitA { trait TraitB { fn outer(&self) { struct Foo(A); - //~^ ERROR can't use type parameters from outer function + //~^ ERROR can't use generic parameters from outer function } } trait TraitC { fn outer(&self) { struct Foo { a: A } - //~^ ERROR can't use type parameters from outer function + //~^ ERROR can't use generic parameters from outer function } } trait TraitD { fn outer(&self) { fn foo(a: A) { } - //~^ ERROR can't use type parameters from outer function + //~^ ERROR can't use generic parameters from outer function } } diff --git a/src/test/ui/resolve/resolve-type-param-in-item-in-trait.stderr b/src/test/ui/resolve/resolve-type-param-in-item-in-trait.stderr index 8eca720d88e8c..f6b8abf4057e5 100644 --- a/src/test/ui/resolve/resolve-type-param-in-item-in-trait.stderr +++ b/src/test/ui/resolve/resolve-type-param-in-item-in-trait.stderr @@ -1,44 +1,44 @@ -error[E0401]: can't use type parameters from outer function +error[E0401]: can't use generic parameters from outer function --> $DIR/resolve-type-param-in-item-in-trait.rs:8:22 | LL | trait TraitA { | - type variable from outer function LL | fn outer(&self) { - | ----- try adding a local type parameter in this method instead + | ----- try adding a local generic parameter in this method instead LL | enum Foo { LL | Variance(A) - | ^ use of type variable from outer function + | ^ use of generic parameter from outer function -error[E0401]: can't use type parameters from outer function +error[E0401]: can't use generic parameters from outer function --> $DIR/resolve-type-param-in-item-in-trait.rs:16:23 | LL | trait TraitB { | - type variable from outer function LL | fn outer(&self) { - | ----- try adding a local type parameter in this method instead + | ----- try adding a local generic parameter in this method instead LL | struct Foo(A); - | ^ use of type variable from outer function + | ^ use of generic parameter from outer function -error[E0401]: can't use type parameters from outer function +error[E0401]: can't use generic parameters from outer function --> $DIR/resolve-type-param-in-item-in-trait.rs:23:28 | LL | trait TraitC { | - type variable from outer function LL | fn outer(&self) { - | ----- try adding a local type parameter in this method instead + | ----- try adding a local generic parameter in this method instead LL | struct Foo { a: A } - | ^ use of type variable from outer function + | ^ use of generic parameter from outer function -error[E0401]: can't use type parameters from outer function +error[E0401]: can't use generic parameters from outer function --> $DIR/resolve-type-param-in-item-in-trait.rs:30:22 | LL | trait TraitD { | - type variable from outer function LL | fn outer(&self) { LL | fn foo(a: A) { } - | ------ ^ use of type variable from outer function + | ------ ^ use of generic parameter from outer function | | - | help: try using a local type parameter instead: `foo` + | help: try using a local generic parameter instead: `foo` error: aborting due to 4 previous errors diff --git a/src/test/ui/type/type-arg-out-of-scope.rs b/src/test/ui/type/type-arg-out-of-scope.rs index b96c9bf6a0e41..d5b815f6a95e9 100644 --- a/src/test/ui/type/type-arg-out-of-scope.rs +++ b/src/test/ui/type/type-arg-out-of-scope.rs @@ -1,4 +1,4 @@ -// error-pattern:can't use type parameters from outer function +// error-pattern:can't use generic parameters from outer function fn foo(x: T) { fn bar(f: Box T>) { } } diff --git a/src/test/ui/type/type-arg-out-of-scope.stderr b/src/test/ui/type/type-arg-out-of-scope.stderr index 62b6a86662d04..645cbb33abec1 100644 --- a/src/test/ui/type/type-arg-out-of-scope.stderr +++ b/src/test/ui/type/type-arg-out-of-scope.stderr @@ -1,22 +1,22 @@ -error[E0401]: can't use type parameters from outer function +error[E0401]: can't use generic parameters from outer function --> $DIR/type-arg-out-of-scope.rs:3:25 | LL | fn foo(x: T) { | - type variable from outer function LL | fn bar(f: Box T>) { } - | --- ^ use of type variable from outer function + | --- ^ use of generic parameter from outer function | | - | help: try using a local type parameter instead: `bar` + | help: try using a local generic parameter instead: `bar` -error[E0401]: can't use type parameters from outer function +error[E0401]: can't use generic parameters from outer function --> $DIR/type-arg-out-of-scope.rs:3:31 | LL | fn foo(x: T) { | - type variable from outer function LL | fn bar(f: Box T>) { } - | --- ^ use of type variable from outer function + | --- ^ use of generic parameter from outer function | | - | help: try using a local type parameter instead: `bar` + | help: try using a local generic parameter instead: `bar` error: aborting due to 2 previous errors diff --git a/src/test/ui/use-self-in-inner-fn.rs b/src/test/ui/use-self-in-inner-fn.rs index cde96dc778bbe..eccb315feb1e2 100644 --- a/src/test/ui/use-self-in-inner-fn.rs +++ b/src/test/ui/use-self-in-inner-fn.rs @@ -4,8 +4,8 @@ impl A { //~^ NOTE `Self` type implicitly declared here, by this `impl` fn banana(&mut self) { fn peach(this: &Self) { - //~^ ERROR can't use type parameters from outer function - //~| NOTE use of type variable from outer function + //~^ ERROR can't use generic parameters from outer function + //~| NOTE use of generic parameter from outer function //~| NOTE use a type here instead } } diff --git a/src/test/ui/use-self-in-inner-fn.stderr b/src/test/ui/use-self-in-inner-fn.stderr index a613804b8038b..966093499241d 100644 --- a/src/test/ui/use-self-in-inner-fn.stderr +++ b/src/test/ui/use-self-in-inner-fn.stderr @@ -1,4 +1,4 @@ -error[E0401]: can't use type parameters from outer function +error[E0401]: can't use generic parameters from outer function --> $DIR/use-self-in-inner-fn.rs:6:25 | LL | impl A { @@ -7,7 +7,7 @@ LL | impl A { LL | fn peach(this: &Self) { | ^^^^ | | - | use of type variable from outer function + | use of generic parameter from outer function | use a type here instead error: aborting due to previous error