Auto merge of #56688 - GuillaumeGomez:rollup, r=GuillaumeGomez
Rollup of 5 pull requests Successful merges: - #56491 (emit error with span for empty asserts) - #56633 (Fix right arrow size for crate filter) - #56641 (fix span for invalid number of parameters in trait method) - #56656 (Fix typo) - #56661 (Add regression test for ICE) Failed merges: r? @ghost
This commit is contained in:
commit
da1527cb06
@ -2169,7 +2169,7 @@ impl<T: fmt::Display + ?Sized> ToString for T {
|
||||
use core::fmt::Write;
|
||||
let mut buf = String::new();
|
||||
buf.write_fmt(format_args!("{}", self))
|
||||
.expect("a Display implementation return an error unexpectedly");
|
||||
.expect("a Display implementation returned an error unexpectedly");
|
||||
buf.shrink_to_fit();
|
||||
buf
|
||||
}
|
||||
|
@ -648,12 +648,19 @@ fn compare_number_of_method_arguments<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||
let trait_span = if let Some(trait_id) = trait_m_node_id {
|
||||
match tcx.hir().expect_trait_item(trait_id).node {
|
||||
TraitItemKind::Method(ref trait_m_sig, _) => {
|
||||
if let Some(arg) = trait_m_sig.decl.inputs.get(if trait_number_args > 0 {
|
||||
let pos = if trait_number_args > 0 {
|
||||
trait_number_args - 1
|
||||
} else {
|
||||
0
|
||||
}) {
|
||||
Some(arg.span)
|
||||
};
|
||||
if let Some(arg) = trait_m_sig.decl.inputs.get(pos) {
|
||||
Some(if pos == 0 {
|
||||
arg.span
|
||||
} else {
|
||||
Span::new(trait_m_sig.decl.inputs[0].span.lo(),
|
||||
arg.span.hi(),
|
||||
arg.span.ctxt())
|
||||
})
|
||||
} else {
|
||||
trait_item_span
|
||||
}
|
||||
@ -666,12 +673,19 @@ fn compare_number_of_method_arguments<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||
let impl_m_node_id = tcx.hir().as_local_node_id(impl_m.def_id).unwrap();
|
||||
let impl_span = match tcx.hir().expect_impl_item(impl_m_node_id).node {
|
||||
ImplItemKind::Method(ref impl_m_sig, _) => {
|
||||
if let Some(arg) = impl_m_sig.decl.inputs.get(if impl_number_args > 0 {
|
||||
let pos = if impl_number_args > 0 {
|
||||
impl_number_args - 1
|
||||
} else {
|
||||
0
|
||||
}) {
|
||||
arg.span
|
||||
};
|
||||
if let Some(arg) = impl_m_sig.decl.inputs.get(pos) {
|
||||
if pos == 0 {
|
||||
arg.span
|
||||
} else {
|
||||
Span::new(impl_m_sig.decl.inputs[0].span.lo(),
|
||||
arg.span.hi(),
|
||||
arg.span.ctxt())
|
||||
}
|
||||
} else {
|
||||
impl_m_span
|
||||
}
|
||||
|
@ -641,7 +641,7 @@ a {
|
||||
text-overflow: "";
|
||||
background-repeat: no-repeat;
|
||||
background-color: transparent;
|
||||
background-size: 16%;
|
||||
background-size: 20px;
|
||||
background-position: calc(100% - 1px) 56%;
|
||||
}
|
||||
.search-container > .top-button {
|
||||
|
@ -24,6 +24,14 @@ pub fn expand_assert<'cx>(
|
||||
tts: &[TokenTree],
|
||||
) -> Box<dyn MacResult + 'cx> {
|
||||
let mut parser = cx.new_parser_from_tts(tts);
|
||||
|
||||
if parser.token == token::Eof {
|
||||
cx.struct_span_err(sp, "macro requires a boolean expression as an argument")
|
||||
.span_label(sp, "boolean expression required")
|
||||
.emit();
|
||||
return DummyResult::expr(sp);
|
||||
}
|
||||
|
||||
let cond_expr = panictry!(parser.parse_expr());
|
||||
let custom_msg_args = if parser.eat(&token::Comma) {
|
||||
let ts = parser.parse_tokens();
|
||||
|
@ -2,7 +2,7 @@ error[E0050]: method `foo` has 1 parameter but the declaration in trait `Foo::fo
|
||||
--> $DIR/E0050.rs:20:12
|
||||
|
|
||||
LL | fn foo(&self, x: u8) -> bool;
|
||||
| -- trait requires 2 parameters
|
||||
| ------------ trait requires 2 parameters
|
||||
...
|
||||
LL | fn foo(&self) -> bool { true } //~ ERROR E0050
|
||||
| ^^^^^ expected 2 parameters, found 1
|
||||
@ -11,19 +11,19 @@ error[E0050]: method `bar` has 1 parameter but the declaration in trait `Foo::ba
|
||||
--> $DIR/E0050.rs:21:12
|
||||
|
|
||||
LL | fn bar(&self, x: u8, y: u8, z: u8);
|
||||
| -- trait requires 4 parameters
|
||||
| -------------------------- trait requires 4 parameters
|
||||
...
|
||||
LL | fn bar(&self) { } //~ ERROR E0050
|
||||
| ^^^^^ expected 4 parameters, found 1
|
||||
|
||||
error[E0050]: method `less` has 4 parameters but the declaration in trait `Foo::less` has 1
|
||||
--> $DIR/E0050.rs:22:37
|
||||
--> $DIR/E0050.rs:22:13
|
||||
|
|
||||
LL | fn less(&self);
|
||||
| ----- trait requires 1 parameter
|
||||
...
|
||||
LL | fn less(&self, x: u8, y: u8, z: u8) { } //~ ERROR E0050
|
||||
| ^^ expected 1 parameter, found 4
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ expected 1 parameter, found 4
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
39
src/test/ui/issue-55846.rs
Normal file
39
src/test/ui/issue-55846.rs
Normal file
@ -0,0 +1,39 @@
|
||||
// run-pass
|
||||
|
||||
// Regression test for #55846, which once caused an ICE.
|
||||
|
||||
use std::marker::PhantomData;
|
||||
|
||||
struct Foo;
|
||||
|
||||
struct Bar<A> {
|
||||
a: PhantomData<A>,
|
||||
}
|
||||
|
||||
impl Fooifier for Foo {
|
||||
type Assoc = Foo;
|
||||
}
|
||||
|
||||
trait Fooifier {
|
||||
type Assoc;
|
||||
}
|
||||
|
||||
trait Barifier<H> {
|
||||
fn barify();
|
||||
}
|
||||
|
||||
impl<H> Barifier<H> for Bar<H> {
|
||||
fn barify() {
|
||||
println!("All correct!");
|
||||
}
|
||||
}
|
||||
|
||||
impl Bar<<Foo as Fooifier>::Assoc> {
|
||||
fn this_shouldnt_crash() {
|
||||
<Self as Barifier<<Foo as Fooifier>::Assoc>>::barify();
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
Bar::<Foo>::this_shouldnt_crash();
|
||||
}
|
4
src/test/ui/macros/assert.rs
Normal file
4
src/test/ui/macros/assert.rs
Normal file
@ -0,0 +1,4 @@
|
||||
fn main() {
|
||||
assert!(); //~ ERROR requires a boolean expression
|
||||
debug_assert!(); //~ ERROR requires a boolean expression
|
||||
}
|
16
src/test/ui/macros/assert.stderr
Normal file
16
src/test/ui/macros/assert.stderr
Normal file
@ -0,0 +1,16 @@
|
||||
error: macro requires a boolean expression as an argument
|
||||
--> $DIR/assert.rs:2:5
|
||||
|
|
||||
LL | assert!(); //~ ERROR requires a boolean expression
|
||||
| ^^^^^^^^^^ boolean expression required
|
||||
|
||||
error: macro requires a boolean expression as an argument
|
||||
--> $DIR/assert.rs:3:5
|
||||
|
|
||||
LL | debug_assert!(); //~ ERROR requires a boolean expression
|
||||
| ^^^^^^^^^^^^^^^^ boolean expression required
|
||||
|
|
||||
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
23
src/test/ui/trait-method-number-parameters.rs
Normal file
23
src/test/ui/trait-method-number-parameters.rs
Normal file
@ -0,0 +1,23 @@
|
||||
// Copyright 2018 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.
|
||||
|
||||
trait Foo {
|
||||
fn foo(&mut self, x: i32, y: i32) -> i32;
|
||||
}
|
||||
|
||||
impl Foo for i32 {
|
||||
fn foo(
|
||||
&mut self, //~ ERROR
|
||||
x: i32,
|
||||
) {
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
13
src/test/ui/trait-method-number-parameters.stderr
Normal file
13
src/test/ui/trait-method-number-parameters.stderr
Normal file
@ -0,0 +1,13 @@
|
||||
error[E0050]: method `foo` has 2 parameters but the declaration in trait `Foo::foo` has 3
|
||||
--> $DIR/trait-method-number-parameters.rs:17:9
|
||||
|
|
||||
LL | fn foo(&mut self, x: i32, y: i32) -> i32;
|
||||
| ------------------------- trait requires 3 parameters
|
||||
...
|
||||
LL | / &mut self, //~ ERROR
|
||||
LL | | x: i32,
|
||||
| |______________^ expected 3 parameters, found 2
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0050`.
|
@ -2,7 +2,7 @@ error[E0050]: method `bar` has 1 parameter but the declaration in trait `foo::ba
|
||||
--> $DIR/trait-impl-different-num-params.rs:15:12
|
||||
|
|
||||
LL | fn bar(&self, x: usize) -> Self;
|
||||
| ----- trait requires 2 parameters
|
||||
| --------------- trait requires 2 parameters
|
||||
...
|
||||
LL | fn bar(&self) -> isize {
|
||||
| ^^^^^ expected 2 parameters, found 1
|
||||
|
Loading…
x
Reference in New Issue
Block a user