提交 2d1d4d19 编写于 作者: B bors 提交者: GitHub

Auto merge of #36713 - TimNN:fix-36708, r=arielb1

don't unwrap non-local span

Fixes #36708.
......@@ -110,30 +110,40 @@ pub fn compare_impl_method<'a, 'tcx>(ccx: &CrateCtxt<'a, 'tcx>,
_ => bug!("{:?} is not a method", impl_m)
};
struct_span_err!(tcx.sess, span, E0049,
let mut err = struct_span_err!(tcx.sess, span, E0049,
"method `{}` has {} type parameter{} \
but its trait declaration has {} type parameter{}",
trait_m.name,
num_impl_m_type_params,
if num_impl_m_type_params == 1 {""} else {"s"},
num_trait_m_type_params,
if num_trait_m_type_params == 1 {""} else {"s"})
.span_label(trait_item_span.unwrap(),
&format!("expected {}",
&if num_trait_m_type_params != 1 {
format!("{} type parameters",
num_trait_m_type_params)
} else {
format!("{} type parameter",
num_trait_m_type_params)
}))
.span_label(span, &format!("found {}",
&if num_impl_m_type_params != 1 {
format!("{} type parameters", num_impl_m_type_params)
} else {
format!("1 type parameter")
}))
.emit();
if num_trait_m_type_params == 1 {""} else {"s"});
let mut suffix = None;
if let Some(span) = trait_item_span {
err.span_label(span,
&format!("expected {}",
&if num_trait_m_type_params != 1 {
format!("{} type parameters", num_trait_m_type_params)
} else {
format!("{} type parameter", num_trait_m_type_params)
}));
} else {
suffix = Some(format!(", expected {}", num_trait_m_type_params));
}
err.span_label(span,
&format!("found {}{}",
&if num_impl_m_type_params != 1 {
format!("{} type parameters", num_impl_m_type_params)
} else {
format!("1 type parameter")
},
suffix.as_ref().map(|s| &s[..]).unwrap_or("")));
err.emit();
return;
}
......
// Copyright 2016 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.
#![crate_type = "lib"]
pub trait Foo {
fn foo();
}
// Copyright 2016 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.
// aux-build:issue-36708.rs
extern crate issue_36708 as lib;
struct Bar;
impl lib::Foo for Bar {
fn foo<T>() {}
//~^ ERROR E0049
//~| NOTE found 1 type parameter, expected 0
}
fn main() {}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册