Prohibit parenthesized params in more types.
This commit is contained in:
parent
bedd7da3d2
commit
63ecd6aa0f
2 changed files with 39 additions and 4 deletions
|
|
@ -161,10 +161,7 @@ impl<'o, 'gcx: 'tcx, 'tcx> AstConv<'gcx, 'tcx>+'o {
|
|||
match item_segment.parameters {
|
||||
hir::AngleBracketedParameters(_) => {}
|
||||
hir::ParenthesizedParameters(..) => {
|
||||
struct_span_err!(tcx.sess, span, E0214,
|
||||
"parenthesized parameters may only be used with a trait")
|
||||
.span_label(span, "only traits may use parentheses")
|
||||
.emit();
|
||||
self.prohibit_parenthesized_params(item_segment);
|
||||
|
||||
return Substs::for_item(tcx, def_id, |_, _| {
|
||||
tcx.types.re_static
|
||||
|
|
@ -948,6 +945,10 @@ impl<'o, 'gcx: 'tcx, 'tcx> AstConv<'gcx, 'tcx>+'o {
|
|||
|
||||
pub fn prohibit_type_params(&self, segments: &[hir::PathSegment]) {
|
||||
for segment in segments {
|
||||
if let hir::ParenthesizedParameters(_) = segment.parameters {
|
||||
self.prohibit_parenthesized_params(segment);
|
||||
break;
|
||||
}
|
||||
for typ in segment.parameters.types() {
|
||||
struct_span_err!(self.tcx().sess, typ.span, E0109,
|
||||
"type parameters are not allowed on this type")
|
||||
|
|
@ -970,6 +971,15 @@ impl<'o, 'gcx: 'tcx, 'tcx> AstConv<'gcx, 'tcx>+'o {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn prohibit_parenthesized_params(&self, segment: &hir::PathSegment) {
|
||||
if let hir::ParenthesizedParameters(ref data) = segment.parameters {
|
||||
struct_span_err!(self.tcx().sess, data.span, E0214,
|
||||
"parenthesized parameters may only be used with a trait")
|
||||
.span_label(data.span, "only traits may use parentheses")
|
||||
.emit();
|
||||
}
|
||||
}
|
||||
|
||||
pub fn prohibit_projection(&self, span: Span) {
|
||||
let mut err = struct_span_err!(self.tcx().sess, span, E0229,
|
||||
"associated type bindings are not allowed here");
|
||||
|
|
|
|||
25
src/test/compile-fail/issue-32995.rs
Normal file
25
src/test/compile-fail/issue-32995.rs
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
fn main() {
|
||||
let s: String() = String::from("foo");
|
||||
//~^ ERROR parenthesized parameters may only be used with a trait
|
||||
|
||||
let x: usize() = 1;
|
||||
//~^ ERROR parenthesized parameters may only be used with a trait
|
||||
|
||||
let b: ::std::boxed()::Box<_> = Box::new(1);
|
||||
//~^ ERROR parenthesized parameters may only be used with a trait
|
||||
}
|
||||
|
||||
fn foo<X:Default>() {
|
||||
let d : X() = Default::default();
|
||||
//~^ ERROR parenthesized parameters may only be used with a trait
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue