Auto merge of #36049 - jonathandturner:rollup, r=jonathandturner
Rollup of 6 pull requests - Successful merges: #35657, #35980, #35985, #35989, #36003, #36044 - Failed merges:
This commit is contained in:
commit
e17d6db80a
@ -1721,6 +1721,50 @@ fn cookie() -> ! { // error: definition of an unknown language item: `cookie`
|
||||
```
|
||||
"##,
|
||||
|
||||
E0525: r##"
|
||||
A closure was attempted to get used whereas it doesn't implement the expected
|
||||
trait.
|
||||
|
||||
Erroneous code example:
|
||||
|
||||
```compile_fail,E0525
|
||||
struct X;
|
||||
|
||||
fn foo<T>(_: T) {}
|
||||
fn bar<T: Fn(u32)>(_: T) {}
|
||||
|
||||
fn main() {
|
||||
let x = X;
|
||||
let closure = |_| foo(x); // error: expected a closure that implements
|
||||
// the `Fn` trait, but this closure only
|
||||
// implements `FnOnce`
|
||||
bar(closure);
|
||||
}
|
||||
```
|
||||
|
||||
In the example above, `closure` is an `FnOnce` closure whereas the `bar`
|
||||
function expected an `Fn` closure. In this case, it's simple to fix the issue,
|
||||
you just have to implement `Copy` and `Clone` traits on `struct X` and it'll
|
||||
be ok:
|
||||
|
||||
```
|
||||
#[derive(Clone, Copy)] // We implement `Clone` and `Copy` traits.
|
||||
struct X;
|
||||
|
||||
fn foo<T>(_: T) {}
|
||||
fn bar<T: Fn(u32)>(_: T) {}
|
||||
|
||||
fn main() {
|
||||
let x = X;
|
||||
let closure = |_| foo(x);
|
||||
bar(closure); // ok!
|
||||
}
|
||||
```
|
||||
|
||||
To understand better how closures work in Rust, read:
|
||||
https://doc.rust-lang.org/book/closures.html
|
||||
"##,
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -1760,5 +1804,4 @@ register_diagnostics! {
|
||||
E0490, // a value of type `..` is borrowed for too long
|
||||
E0491, // in type `..`, reference has a longer lifetime than the data it...
|
||||
E0495, // cannot infer an appropriate lifetime due to conflicting requirements
|
||||
E0525 // expected a closure that implements `..` but this closure only implements `..`
|
||||
}
|
||||
|
@ -606,11 +606,12 @@ pub trait LintContext: Sized {
|
||||
"{}({}) overruled by outer forbid({})",
|
||||
level.as_str(), lint_name,
|
||||
lint_name);
|
||||
diag_builder.span_label(span, &format!("overruled by previous forbid"));
|
||||
match now_source {
|
||||
LintSource::Default => &mut diag_builder,
|
||||
LintSource::Node(forbid_source_span) => {
|
||||
diag_builder.span_note(forbid_source_span,
|
||||
"`forbid` lint level set here")
|
||||
diag_builder.span_label(forbid_source_span,
|
||||
&format!("`forbid` level set here"))
|
||||
},
|
||||
LintSource::CommandLine => {
|
||||
diag_builder.note("`forbid` lint level was set on command line")
|
||||
|
@ -477,10 +477,11 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
|
||||
return;
|
||||
}
|
||||
|
||||
let mut err = struct_span_err!(
|
||||
self.tcx.sess, span, E0277,
|
||||
let mut err = struct_span_err!(self.tcx.sess, span, E0277,
|
||||
"the trait bound `{}` is not satisfied",
|
||||
trait_ref.to_predicate());
|
||||
err.span_label(span, &format!("trait `{}` not satisfied",
|
||||
trait_ref.to_predicate()));
|
||||
|
||||
// Try to report a help message
|
||||
|
||||
|
@ -926,9 +926,11 @@ impl<'a, 'tcx> BorrowckCtxt<'a, 'tcx> {
|
||||
err
|
||||
}
|
||||
mc::AliasableBorrowed => {
|
||||
struct_span_err!(
|
||||
let mut e = struct_span_err!(
|
||||
self.tcx.sess, span, E0389,
|
||||
"{} in a `&` reference", prefix)
|
||||
"{} in a `&` reference", prefix);
|
||||
e.span_label(span, &"assignment into an immutable reference");
|
||||
e
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -56,7 +56,6 @@ let Wrapping(x) = x;
|
||||
let y: usize = 1.wrapping_neg();
|
||||
assert_eq!(x, y);
|
||||
```
|
||||
|
||||
"##
|
||||
}
|
||||
|
||||
|
@ -444,13 +444,32 @@ impl<'a, 'tcx, 'v> Visitor<'v> for PrivacyVisitor<'a, 'tcx> {
|
||||
}), ..}) => ty,
|
||||
_ => expr_ty
|
||||
}.ty_adt_def().unwrap();
|
||||
let any_priv = def.struct_variant().fields.iter().any(|f| {
|
||||
!f.vis.is_accessible_from(self.curitem, &self.tcx.map)
|
||||
});
|
||||
if any_priv {
|
||||
span_err!(self.tcx.sess, expr.span, E0450,
|
||||
"cannot invoke tuple struct constructor with private \
|
||||
fields");
|
||||
|
||||
let private_indexes : Vec<_> = def.struct_variant().fields.iter().enumerate()
|
||||
.filter(|&(_,f)| {
|
||||
!f.vis.is_accessible_from(self.curitem, &self.tcx.map)
|
||||
}).map(|(n,&_)|n).collect();
|
||||
|
||||
if !private_indexes.is_empty() {
|
||||
|
||||
let mut error = struct_span_err!(self.tcx.sess, expr.span, E0450,
|
||||
"cannot invoke tuple struct constructor \
|
||||
with private fields");
|
||||
error.span_label(expr.span,
|
||||
&format!("cannot construct with a private field"));
|
||||
|
||||
if let Some(def_id) = self.tcx.map.as_local_node_id(def.did) {
|
||||
if let Some(hir::map::NodeItem(node)) = self.tcx.map.find(def_id) {
|
||||
if let hir::Item_::ItemStruct(ref tuple_data, _) = node.node {
|
||||
|
||||
for i in private_indexes {
|
||||
error.span_label(tuple_data.fields()[i].span,
|
||||
&format!("private field declared here"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
error.emit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -23,8 +23,10 @@ extern "platform-intrinsic" {
|
||||
fn simd_add<T>(a: T, b: T) -> T;
|
||||
}
|
||||
|
||||
unsafe { simd_add(0, 1); }
|
||||
// error: invalid monomorphization of `simd_add` intrinsic
|
||||
fn main() {
|
||||
unsafe { simd_add(0, 1); }
|
||||
// error: invalid monomorphization of `simd_add` intrinsic
|
||||
}
|
||||
```
|
||||
|
||||
The generic type has to be a SIMD type. Example:
|
||||
|
@ -51,12 +51,17 @@ fn equate_intrinsic_type<'a, 'tcx>(ccx: &CrateCtxt<'a, 'tcx>,
|
||||
}));
|
||||
let i_n_tps = i_ty.generics.types.len();
|
||||
if i_n_tps != n_tps {
|
||||
struct_span_err!(tcx.sess, it.span, E0094,
|
||||
"intrinsic has wrong number of type \
|
||||
parameters: found {}, expected {}",
|
||||
i_n_tps, n_tps)
|
||||
.span_label(it.span, &format!("expected {} type parameter", n_tps))
|
||||
.emit();
|
||||
let span = match it.node {
|
||||
hir::ForeignItemFn(_, ref generics) => generics.span().unwrap_or(it.span),
|
||||
hir::ForeignItemStatic(_, _) => it.span
|
||||
};
|
||||
|
||||
struct_span_err!(tcx.sess, span, E0094,
|
||||
"intrinsic has wrong number of type \
|
||||
parameters: found {}, expected {}",
|
||||
i_n_tps, n_tps)
|
||||
.span_label(span, &format!("expected {} type parameter", n_tps))
|
||||
.emit();
|
||||
} else {
|
||||
require_same_types(ccx,
|
||||
TypeOrigin::IntrinsicType(it.span),
|
||||
|
@ -15,11 +15,13 @@
|
||||
#![plugin(lint_plugin_test)]
|
||||
#![forbid(test_lint)]
|
||||
//~^ NOTE lint level defined here
|
||||
//~| NOTE `forbid` lint level set here
|
||||
//~| NOTE `forbid` level set here
|
||||
|
||||
fn lintme() { } //~ ERROR item is named 'lintme'
|
||||
|
||||
#[allow(test_lint)] //~ ERROR allow(test_lint) overruled by outer forbid(test_lint)
|
||||
#[allow(test_lint)]
|
||||
//~^ ERROR allow(test_lint) overruled by outer forbid(test_lint)
|
||||
//~| NOTE overruled by previous forbid
|
||||
pub fn main() {
|
||||
lintme();
|
||||
}
|
||||
|
@ -17,5 +17,8 @@ fn some_func<T: Foo>(foo: T) {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
some_func(5i32); //~ ERROR E0277
|
||||
some_func(5i32);
|
||||
//~^ ERROR the trait bound `i32: Foo` is not satisfied
|
||||
//~| NOTE trait `i32: Foo` not satisfied
|
||||
//~| NOTE required by `some_func`
|
||||
}
|
||||
|
@ -16,5 +16,6 @@ fn main() {
|
||||
let mut fancy = FancyNum{ num: 5 };
|
||||
let fancy_ref = &(&mut fancy);
|
||||
fancy_ref.num = 6; //~ ERROR E0389
|
||||
//~^ NOTE assignment into an immutable reference
|
||||
println!("{}", fancy_ref.num);
|
||||
}
|
||||
|
@ -9,9 +9,13 @@
|
||||
// except according to those terms.
|
||||
|
||||
mod Bar {
|
||||
pub struct Foo(isize);
|
||||
pub struct Foo( bool, pub i32, f32, bool);
|
||||
//~^ NOTE private field declared here
|
||||
//~| NOTE private field declared here
|
||||
//~| NOTE private field declared here
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let f = Bar::Foo(0); //~ ERROR E0450
|
||||
let f = Bar::Foo(false,1,0.1, true); //~ ERROR E0450
|
||||
//~^ NOTE cannot construct with a private field
|
||||
}
|
||||
|
@ -9,7 +9,10 @@
|
||||
// except according to those terms.
|
||||
|
||||
#![forbid(non_snake_case)]
|
||||
//~^ NOTE `forbid` level set here
|
||||
|
||||
#[allow(non_snake_case)] //~ ERROR E0453
|
||||
#[allow(non_snake_case)]
|
||||
//~^ ERROR allow(non_snake_case) overruled by outer forbid(non_snake_case)
|
||||
//~| NOTE overruled by previous forbid
|
||||
fn main() {
|
||||
}
|
||||
|
18
src/test/compile-fail/E0502.rs
Normal file
18
src/test/compile-fail/E0502.rs
Normal file
@ -0,0 +1,18 @@
|
||||
// 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.
|
||||
|
||||
fn bar(x: &mut i32) {}
|
||||
fn foo(a: &mut i32) {
|
||||
let ref y = a;
|
||||
bar(a); //~ ERROR E0502
|
||||
}
|
||||
|
||||
fn main() {
|
||||
}
|
15
src/test/compile-fail/E0503.rs
Normal file
15
src/test/compile-fail/E0503.rs
Normal file
@ -0,0 +1,15 @@
|
||||
// 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.
|
||||
|
||||
fn main() {
|
||||
let mut value = 3;
|
||||
let _borrow = &mut value;
|
||||
let _sum = value + 1; //~ ERROR E0503
|
||||
}
|
25
src/test/compile-fail/E0504.rs
Normal file
25
src/test/compile-fail/E0504.rs
Normal file
@ -0,0 +1,25 @@
|
||||
// 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.
|
||||
|
||||
struct FancyNum {
|
||||
num: u8,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let fancy_num = FancyNum { num: 5 };
|
||||
let fancy_ref = &fancy_num;
|
||||
|
||||
let x = move || {
|
||||
println!("child function: {}", fancy_num.num); //~ ERROR E0504
|
||||
};
|
||||
|
||||
x();
|
||||
println!("main function: {}", fancy_ref.num);
|
||||
}
|
21
src/test/compile-fail/E0505.rs
Normal file
21
src/test/compile-fail/E0505.rs
Normal file
@ -0,0 +1,21 @@
|
||||
// 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.
|
||||
|
||||
struct Value {}
|
||||
|
||||
fn eat(val: Value) {}
|
||||
|
||||
fn main() {
|
||||
let x = Value{};
|
||||
{
|
||||
let _ref_to_val: &Value = &x;
|
||||
eat(x); //~ ERROR E0505
|
||||
}
|
||||
}
|
21
src/test/compile-fail/E0506.rs
Normal file
21
src/test/compile-fail/E0506.rs
Normal file
@ -0,0 +1,21 @@
|
||||
// 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.
|
||||
|
||||
struct FancyNum {
|
||||
num: u8,
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut fancy_num = FancyNum { num: 5 };
|
||||
let fancy_ref = &fancy_num;
|
||||
fancy_num = FancyNum { num: 6 }; //~ ERROR E0506
|
||||
|
||||
println!("Num: {}, Ref: {}", fancy_num.num, fancy_ref.num);
|
||||
}
|
23
src/test/compile-fail/E0507.rs
Normal file
23
src/test/compile-fail/E0507.rs
Normal file
@ -0,0 +1,23 @@
|
||||
// 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.
|
||||
|
||||
use std::cell::RefCell;
|
||||
|
||||
struct TheDarkKnight;
|
||||
|
||||
impl TheDarkKnight {
|
||||
fn nothing_is_true(self) {}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let x = RefCell::new(TheDarkKnight);
|
||||
|
||||
x.borrow().nothing_is_true(); //~ ERROR E0507
|
||||
}
|
16
src/test/compile-fail/E0508.rs
Normal file
16
src/test/compile-fail/E0508.rs
Normal file
@ -0,0 +1,16 @@
|
||||
// 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.
|
||||
|
||||
struct NonCopy;
|
||||
|
||||
fn main() {
|
||||
let array = [NonCopy; 1];
|
||||
let _value = array[0]; //~ ERROR E0508
|
||||
}
|
28
src/test/compile-fail/E0509.rs
Normal file
28
src/test/compile-fail/E0509.rs
Normal file
@ -0,0 +1,28 @@
|
||||
// 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.
|
||||
|
||||
struct FancyNum {
|
||||
num: usize
|
||||
}
|
||||
|
||||
struct DropStruct {
|
||||
fancy: FancyNum
|
||||
}
|
||||
|
||||
impl Drop for DropStruct {
|
||||
fn drop(&mut self) {
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let drop_struct = DropStruct{fancy: FancyNum{num: 5}};
|
||||
let fancy_field = drop_struct.fancy; //~ ERROR E0509
|
||||
println!("Fancy: {}", fancy_field.num);
|
||||
}
|
19
src/test/compile-fail/E0511.rs
Normal file
19
src/test/compile-fail/E0511.rs
Normal file
@ -0,0 +1,19 @@
|
||||
// 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.
|
||||
|
||||
#![feature(platform_intrinsics)]
|
||||
|
||||
extern "platform-intrinsic" {
|
||||
fn simd_add<T>(a: T, b: T) -> T;
|
||||
}
|
||||
|
||||
fn main() {
|
||||
unsafe { simd_add(0, 1); } //~ ERROR E0511
|
||||
}
|
15
src/test/compile-fail/E0512.rs
Normal file
15
src/test/compile-fail/E0512.rs
Normal file
@ -0,0 +1,15 @@
|
||||
// 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.
|
||||
|
||||
fn takes_u8(_: u8) {}
|
||||
|
||||
fn main() {
|
||||
unsafe { takes_u8(::std::mem::transmute(0u16)); } //~ ERROR E0512
|
||||
}
|
13
src/test/compile-fail/E0516.rs
Normal file
13
src/test/compile-fail/E0516.rs
Normal file
@ -0,0 +1,13 @@
|
||||
// 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.
|
||||
|
||||
fn main() {
|
||||
let x: typeof(92) = 92; //~ ERROR E0516
|
||||
}
|
25
src/test/compile-fail/E0517.rs
Normal file
25
src/test/compile-fail/E0517.rs
Normal file
@ -0,0 +1,25 @@
|
||||
// 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.
|
||||
|
||||
#[repr(C)] //~ ERROR E0517
|
||||
type Foo = u8;
|
||||
|
||||
#[repr(packed)] //~ ERROR E0517
|
||||
enum Foo2 {Bar, Baz}
|
||||
|
||||
#[repr(u8)] //~ ERROR E0517
|
||||
struct Foo3 {bar: bool, baz: bool}
|
||||
|
||||
#[repr(C)] //~ ERROR E0517
|
||||
impl Foo3 {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
}
|
19
src/test/compile-fail/E0518.rs
Normal file
19
src/test/compile-fail/E0518.rs
Normal file
@ -0,0 +1,19 @@
|
||||
// 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.
|
||||
|
||||
#[inline(always)] //~ ERROR E0518
|
||||
struct Foo;
|
||||
|
||||
#[inline(never)] //~ ERROR E0518
|
||||
impl Foo {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
}
|
30
src/test/compile-fail/E0520.rs
Normal file
30
src/test/compile-fail/E0520.rs
Normal file
@ -0,0 +1,30 @@
|
||||
// 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.
|
||||
|
||||
#![feature(specialization)]
|
||||
|
||||
trait SpaceLlama {
|
||||
fn fly(&self);
|
||||
}
|
||||
|
||||
impl<T> SpaceLlama for T {
|
||||
default fn fly(&self) {}
|
||||
}
|
||||
|
||||
impl<T: Clone> SpaceLlama for T {
|
||||
fn fly(&self) {}
|
||||
}
|
||||
|
||||
impl SpaceLlama for i32 {
|
||||
default fn fly(&self) {} //~ ERROR E0520
|
||||
}
|
||||
|
||||
fn main() {
|
||||
}
|
16
src/test/compile-fail/E0522.rs
Normal file
16
src/test/compile-fail/E0522.rs
Normal file
@ -0,0 +1,16 @@
|
||||
// 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.
|
||||
|
||||
#![feature(lang_items)]
|
||||
|
||||
#[lang = "cookie"]
|
||||
fn cookie() -> ! { //~ E0522
|
||||
loop {}
|
||||
}
|
20
src/test/compile-fail/E0527.rs
Normal file
20
src/test/compile-fail/E0527.rs
Normal file
@ -0,0 +1,20 @@
|
||||
// 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.
|
||||
|
||||
#![feature(slice_patterns)]
|
||||
|
||||
fn main() {
|
||||
let r = &[1, 2, 3, 4];
|
||||
match r {
|
||||
&[a, b] => { //~ ERROR E0527
|
||||
println!("a={}, b={}", a, b);
|
||||
}
|
||||
}
|
||||
}
|
@ -31,5 +31,6 @@ trait Add<RHS=Self> {
|
||||
fn ice<A>(a: A) {
|
||||
let r = loop {};
|
||||
r = r + a;
|
||||
//~^ ERROR E0277
|
||||
//~^ ERROR the trait bound `(): Add<A>` is not satisfied
|
||||
//~| NOTE trait `(): Add<A>` not satisfied
|
||||
}
|
||||
|
@ -92,6 +92,7 @@ fn main()
|
||||
let _ = v as *const [u8]; //~ ERROR cannot cast
|
||||
let _ = fat_v as *const Foo;
|
||||
//~^ ERROR the trait bound `[u8]: std::marker::Sized` is not satisfied
|
||||
//~| NOTE trait `[u8]: std::marker::Sized` not satisfied
|
||||
//~| NOTE `[u8]` does not have a constant size known at compile-time
|
||||
//~| NOTE required for the cast to the object type `Foo`
|
||||
let _ = foo as *const str; //~ ERROR casting
|
||||
@ -106,6 +107,7 @@ fn main()
|
||||
let a : *const str = "hello";
|
||||
let _ = a as *const Foo;
|
||||
//~^ ERROR the trait bound `str: std::marker::Sized` is not satisfied
|
||||
//~| NOTE trait `str: std::marker::Sized` not satisfied
|
||||
//~| NOTE `str` does not have a constant size known at compile-time
|
||||
//~| NOTE required for the cast to the object type `Foo`
|
||||
|
||||
|
@ -12,21 +12,25 @@ use std::fmt::Debug;
|
||||
|
||||
const CONST_0: Debug+Sync = *(&0 as &(Debug+Sync));
|
||||
//~^ ERROR `std::fmt::Debug + Sync + 'static: std::marker::Sized` is not satisfied
|
||||
//~| NOTE `std::fmt::Debug + Sync + 'static: std::marker::Sized` not satisfied
|
||||
//~| NOTE does not have a constant size known at compile-time
|
||||
//~| NOTE constant expressions must have a statically known size
|
||||
|
||||
const CONST_FOO: str = *"foo";
|
||||
//~^ ERROR `str: std::marker::Sized` is not satisfied
|
||||
//~| NOTE `str: std::marker::Sized` not satisfied
|
||||
//~| NOTE does not have a constant size known at compile-time
|
||||
//~| NOTE constant expressions must have a statically known size
|
||||
|
||||
static STATIC_1: Debug+Sync = *(&1 as &(Debug+Sync));
|
||||
//~^ ERROR `std::fmt::Debug + Sync + 'static: std::marker::Sized` is not satisfied
|
||||
//~| NOTE `std::fmt::Debug + Sync + 'static: std::marker::Sized` not satisfied
|
||||
//~| NOTE does not have a constant size known at compile-time
|
||||
//~| NOTE constant expressions must have a statically known size
|
||||
|
||||
static STATIC_BAR: str = *"bar";
|
||||
//~^ ERROR `str: std::marker::Sized` is not satisfied
|
||||
//~| NOTE `str: std::marker::Sized` not satisfied
|
||||
//~| NOTE does not have a constant size known at compile-time
|
||||
//~| NOTE constant expressions must have a statically known size
|
||||
|
||||
|
@ -26,6 +26,7 @@ fn send<T: Send>(_: T) {}
|
||||
fn main() {
|
||||
send(before());
|
||||
//~^ ERROR the trait bound `std::rc::Rc<std::cell::Cell<i32>>: std::marker::Send` is not satisfied
|
||||
//~| NOTE trait `std::rc::Rc<std::cell::Cell<i32>>: std::marker::Send` not satisfied
|
||||
//~| NOTE `std::rc::Rc<std::cell::Cell<i32>>` cannot be sent between threads safely
|
||||
//~| NOTE required because it appears within the type `[closure
|
||||
//~| NOTE required because it appears within the type `impl std::ops::Fn<(i32,)>`
|
||||
@ -33,6 +34,7 @@ fn main() {
|
||||
|
||||
send(after());
|
||||
//~^ ERROR the trait bound `std::rc::Rc<std::cell::Cell<i32>>: std::marker::Send` is not satisfied
|
||||
//~| NOTE trait `std::rc::Rc<std::cell::Cell<i32>>: std::marker::Send` not satisfied
|
||||
//~| NOTE `std::rc::Rc<std::cell::Cell<i32>>` cannot be sent between threads safely
|
||||
//~| NOTE required because it appears within the type `[closure
|
||||
//~| NOTE required because it appears within the type `impl std::ops::Fn<(i32,)>`
|
||||
@ -52,6 +54,7 @@ fn after() -> impl Fn(i32) {
|
||||
fn cycle1() -> impl Clone {
|
||||
send(cycle2().clone());
|
||||
//~^ ERROR the trait bound `std::rc::Rc<std::string::String>: std::marker::Send` is not satisfied
|
||||
//~| NOTE trait `std::rc::Rc<std::string::String>: std::marker::Send` not satisfied
|
||||
//~| NOTE `std::rc::Rc<std::string::String>` cannot be sent between threads safely
|
||||
//~| NOTE required because it appears within the type `impl std::clone::Clone`
|
||||
//~| NOTE required by `send`
|
||||
@ -62,6 +65,7 @@ fn cycle1() -> impl Clone {
|
||||
fn cycle2() -> impl Clone {
|
||||
send(cycle1().clone());
|
||||
//~^ ERROR the trait bound `std::rc::Rc<std::cell::Cell<i32>>: std::marker::Send` is not satisfied
|
||||
//~| NOTE trait `std::rc::Rc<std::cell::Cell<i32>>: std::marker::Send` not satisfied
|
||||
//~| NOTE `std::rc::Rc<std::cell::Cell<i32>>` cannot be sent between threads safely
|
||||
//~| NOTE required because it appears within the type `impl std::clone::Clone`
|
||||
//~| NOTE required by `send`
|
||||
|
@ -9,8 +9,10 @@
|
||||
// except according to those terms.
|
||||
|
||||
#![forbid(deprecated)]
|
||||
//~^ NOTE `forbid` lint level set here
|
||||
//~^ NOTE `forbid` level set here
|
||||
|
||||
#[allow(deprecated)] //~ ERROR allow(deprecated) overruled by outer forbid(deprecated)
|
||||
#[allow(deprecated)]
|
||||
//~^ ERROR allow(deprecated) overruled by outer forbid(deprecated)
|
||||
//~| NOTE overruled by previous forbid
|
||||
fn main() {
|
||||
}
|
||||
|
@ -42,14 +42,17 @@ impl Index<Bar<usize>> for [i32] {
|
||||
fn main() {
|
||||
Index::index(&[] as &[i32], 2u32);
|
||||
//~^ ERROR E0277
|
||||
//~| NOTE not satisfied
|
||||
//~| NOTE trait message
|
||||
//~| NOTE required by
|
||||
Index::index(&[] as &[i32], Foo(2u32));
|
||||
//~^ ERROR E0277
|
||||
//~| NOTE not satisfied
|
||||
//~| NOTE on impl for Foo
|
||||
//~| NOTE required by
|
||||
Index::index(&[] as &[i32], Bar(2u32));
|
||||
//~^ ERROR E0277
|
||||
//~| NOTE not satisfied
|
||||
//~| NOTE on impl for Bar
|
||||
//~| NOTE required by
|
||||
}
|
||||
|
@ -30,6 +30,7 @@ impl Index<usize> for [i32] {
|
||||
#[rustc_error]
|
||||
fn main() {
|
||||
Index::<u32>::index(&[1, 2, 3] as &[i32], 2u32); //~ ERROR E0277
|
||||
//~| NOTE not satisfied
|
||||
//~| NOTE a usize is required
|
||||
//~| NOTE required by
|
||||
}
|
||||
|
@ -35,7 +35,9 @@ pub fn main() {
|
||||
//~^ ERROR
|
||||
//~^^ NOTE a collection of type `std::option::Option<std::vec::Vec<u8>>` cannot be built from an iterator over elements of type `&u8`
|
||||
//~^^^ NOTE required by `collect`
|
||||
//~| NOTE trait `std::option::Option<std::vec::Vec<u8>>: MyFromIterator<&u8>` not satisfied
|
||||
let x: String = foobar(); //~ ERROR
|
||||
//~^ NOTE test error `std::string::String` with `u8` `_` `u32`
|
||||
//~^^ NOTE required by `foobar`
|
||||
//~| NOTE trait `std::string::String: Foo<u8, _, u32>` not satisfied
|
||||
}
|
||||
|
@ -18,7 +18,9 @@ use std::ops::Index;
|
||||
fn main() {
|
||||
let x = &[1, 2, 3] as &[i32];
|
||||
x[1i32]; //~ ERROR E0277
|
||||
//~| NOTE trait `[i32]: std::ops::Index<i32>` not satisfied
|
||||
//~| NOTE slice indices are of type `usize`
|
||||
x[..1i32]; //~ ERROR E0277
|
||||
//~| NOTE trait `[i32]: std::ops::Index<std::ops::RangeTo<i32>>` not satisfied
|
||||
//~| NOTE slice indices are of type `usize`
|
||||
}
|
||||
|
@ -16,11 +16,13 @@ fn check<T: Iterator, U: ?Sized>() {
|
||||
// suggest a where-clause, if needed
|
||||
mem::size_of::<U>();
|
||||
//~^ ERROR `U: std::marker::Sized` is not satisfied
|
||||
//~| NOTE trait `U: std::marker::Sized` not satisfied
|
||||
//~| HELP consider adding a `where U: std::marker::Sized` bound
|
||||
//~| NOTE required by `std::mem::size_of`
|
||||
|
||||
mem::size_of::<Misc<U>>();
|
||||
//~^ ERROR `U: std::marker::Sized` is not satisfied
|
||||
//~| NOTE trait `U: std::marker::Sized` not satisfied
|
||||
//~| HELP consider adding a `where U: std::marker::Sized` bound
|
||||
//~| NOTE required because it appears within the type `Misc<U>`
|
||||
//~| NOTE required by `std::mem::size_of`
|
||||
@ -29,11 +31,13 @@ fn check<T: Iterator, U: ?Sized>() {
|
||||
|
||||
<u64 as From<T>>::from;
|
||||
//~^ ERROR `u64: std::convert::From<T>` is not satisfied
|
||||
//~| NOTE trait `u64: std::convert::From<T>` not satisfied
|
||||
//~| HELP consider adding a `where u64: std::convert::From<T>` bound
|
||||
//~| NOTE required by `std::convert::From::from`
|
||||
|
||||
<u64 as From<<T as Iterator>::Item>>::from;
|
||||
//~^ ERROR `u64: std::convert::From<<T as std::iter::Iterator>::Item>` is not satisfied
|
||||
//~| NOTE trait `u64: std::convert::From<<T as std::iter::Iterator>::Item>` not satisfied
|
||||
//~| HELP consider adding a `where u64:
|
||||
//~| NOTE required by `std::convert::From::from`
|
||||
|
||||
@ -41,17 +45,20 @@ fn check<T: Iterator, U: ?Sized>() {
|
||||
|
||||
<Misc<_> as From<T>>::from;
|
||||
//~^ ERROR `Misc<_>: std::convert::From<T>` is not satisfied
|
||||
//~| NOTE trait `Misc<_>: std::convert::From<T>` not satisfied
|
||||
//~| NOTE required by `std::convert::From::from`
|
||||
|
||||
// ... and also not if the error is not related to the type
|
||||
|
||||
mem::size_of::<[T]>();
|
||||
//~^ ERROR `[T]: std::marker::Sized` is not satisfied
|
||||
//~| NOTE `[T]: std::marker::Sized` not satisfied
|
||||
//~| NOTE `[T]` does not have a constant size
|
||||
//~| NOTE required by `std::mem::size_of`
|
||||
|
||||
mem::size_of::<[&U]>();
|
||||
//~^ ERROR `[&U]: std::marker::Sized` is not satisfied
|
||||
//~| NOTE `[&U]: std::marker::Sized` not satisfied
|
||||
//~| NOTE `[&U]` does not have a constant size
|
||||
//~| NOTE required by `std::mem::size_of`
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user