Skip to content

Commit

Permalink
Auto merge of #27353 - arielb1:parenthetical-error, r=steveklabnik
Browse files Browse the repository at this point in the history
This also calls the right API, which e.g. prevents a suggestion
for #![feature(unboxed_closures)] on stable.

Fixes #26970 

r? @steveklabnik
  • Loading branch information
bors committed Jul 29, 2015
2 parents 090ad6f + bd01175 commit 523ee8d
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 19 deletions.
22 changes: 10 additions & 12 deletions src/librustc_typeck/astconv.rs
Expand Up @@ -69,6 +69,7 @@ use util::nodemap::FnvHashSet;
use std::slice;
use syntax::{abi, ast, ast_util};
use syntax::codemap::{Span, Pos};
use syntax::feature_gate::emit_feature_err;
use syntax::parse::token;
use syntax::print::pprust;

Expand Down Expand Up @@ -791,12 +792,11 @@ fn create_substs_for_ast_trait_ref<'a,'tcx>(this: &AstConv<'tcx>,
// For now, require that parenthetical notation be used
// only with `Fn()` etc.
if !this.tcx().sess.features.borrow().unboxed_closures && trait_def.paren_sugar {
span_err!(this.tcx().sess, span, E0215,
"angle-bracket notation is not stable when \
used with the `Fn` family of traits, use parentheses");
fileline_help!(this.tcx().sess, span,
"add `#![feature(unboxed_closures)]` to \
the crate attributes to enable");
emit_feature_err(&this.tcx().sess.parse_sess.span_diagnostic,
"unboxed_closures", span,
"\
the precise format of `Fn`-family traits' type parameters is \
subject to change. Use parenthetical notation (Fn(Foo, Bar) -> Baz) instead");
}

convert_angle_bracketed_parameters(this, rscope, span, &trait_def.generics, data)
Expand All @@ -805,12 +805,10 @@ fn create_substs_for_ast_trait_ref<'a,'tcx>(this: &AstConv<'tcx>,
// For now, require that parenthetical notation be used
// only with `Fn()` etc.
if !this.tcx().sess.features.borrow().unboxed_closures && !trait_def.paren_sugar {
span_err!(this.tcx().sess, span, E0216,
"parenthetical notation is only stable when \
used with the `Fn` family of traits");
fileline_help!(this.tcx().sess, span,
"add `#![feature(unboxed_closures)]` to \
the crate attributes to enable");
emit_feature_err(&this.tcx().sess.parse_sess.span_diagnostic,
"unboxed_closures", span,
"\
parenthetical notation is only stable when used with `Fn`-family traits");
}

convert_parenthesized_parameters(this, rscope, span, &trait_def.generics, data)
Expand Down
8 changes: 4 additions & 4 deletions src/librustc_typeck/diagnostics.rs
Expand Up @@ -2339,14 +2339,14 @@ register_diagnostics! {
E0212, // cannot extract an associated type from a higher-ranked trait bound
E0213, // associated types are not accepted in this context
E0214, // parenthesized parameters may only be used with a trait
E0215, // angle-bracket notation is not stable with `Fn`
E0216, // parenthetical notation is only stable with `Fn`
// E0215, // angle-bracket notation is not stable with `Fn`
// E0216, // parenthetical notation is only stable with `Fn`
E0217, // ambiguous associated type, defined in multiple supertraits
E0218, // no associated type defined
E0219, // associated type defined in higher-ranked supertrait
E0221, // ambiguous associated type in bounds
//E0222, // Error code E0045 (variadic function must have C calling
// convention) duplicate
// E0222, // Error code E0045 (variadic function must have C calling
// convention) duplicate
E0224, // at least one non-builtin train is required for an object type
E0226, // only a single explicit lifetime bound is permitted
E0227, // ambiguous lifetime bound, explicit lifetime bound required
Expand Down
2 changes: 1 addition & 1 deletion src/test/compile-fail/unboxed-closure-feature-gate.rs
Expand Up @@ -21,7 +21,7 @@ trait Foo<A> {

fn main() {
let x: Box<Foo(isize)>;
//~^ ERROR parenthetical notation is only stable when used with the `Fn` family
//~^ ERROR parenthetical notation is only stable when used with `Fn`-family

// No errors with these:
let x: Box<Fn(isize)>;
Expand Down
4 changes: 2 additions & 2 deletions src/test/compile-fail/unboxed-closure-sugar-not-used-on-fn.rs
Expand Up @@ -12,11 +12,11 @@
// Test that the `Fn` traits require `()` form without a feature gate.

fn bar1(x: &Fn<(), Output=()>) {
//~^ ERROR angle-bracket notation is not stable when used with the `Fn` family
//~^ ERROR of `Fn`-family traits' type parameters is subject to change
}

fn bar2<T>(x: &T) where T: Fn<()> {
//~^ ERROR angle-bracket notation is not stable when used with the `Fn` family
//~^ ERROR of `Fn`-family traits' type parameters is subject to change
}

fn main() { }

0 comments on commit 523ee8d

Please sign in to comment.