mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 23:04:33 +00:00
do not consider two extern types to be similar
This commit is contained in:
parent
1f631e8e93
commit
5594db0975
@ -1727,6 +1727,7 @@ impl<'a, 'tcx> InferCtxtPrivExt<'a, 'tcx> for InferCtxt<'a, 'tcx> {
|
||||
} else if cat_a == cat_b {
|
||||
match (a.kind(), b.kind()) {
|
||||
(ty::Adt(def_a, _), ty::Adt(def_b, _)) => def_a == def_b,
|
||||
(ty::Foreign(def_a), ty::Foreign(def_b)) => def_a == def_b,
|
||||
// Matching on references results in a lot of unhelpful
|
||||
// suggestions, so let's just not do that for now.
|
||||
//
|
||||
|
22
src/test/ui/extern/extern-type-diag-not-similar.rs
vendored
Normal file
22
src/test/ui/extern/extern-type-diag-not-similar.rs
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
// We previously mentioned other extern types in the error message here.
|
||||
//
|
||||
// Two extern types shouldn't really be considered similar just
|
||||
// because they are both extern types.
|
||||
|
||||
#![feature(extern_types)]
|
||||
extern {
|
||||
type ShouldNotBeMentioned;
|
||||
}
|
||||
|
||||
extern {
|
||||
type Foo;
|
||||
}
|
||||
|
||||
unsafe impl Send for ShouldNotBeMentioned {}
|
||||
|
||||
fn assert_send<T: Send + ?Sized>() {}
|
||||
|
||||
fn main() {
|
||||
assert_send::<Foo>()
|
||||
//~^ ERROR `Foo` cannot be sent between threads safely
|
||||
}
|
16
src/test/ui/extern/extern-type-diag-not-similar.stderr
vendored
Normal file
16
src/test/ui/extern/extern-type-diag-not-similar.stderr
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
error[E0277]: `Foo` cannot be sent between threads safely
|
||||
--> $DIR/extern-type-diag-not-similar.rs:20:19
|
||||
|
|
||||
LL | assert_send::<Foo>()
|
||||
| ^^^ `Foo` cannot be sent between threads safely
|
||||
|
|
||||
= help: the trait `Send` is not implemented for `Foo`
|
||||
note: required by a bound in `assert_send`
|
||||
--> $DIR/extern-type-diag-not-similar.rs:17:19
|
||||
|
|
||||
LL | fn assert_send<T: Send + ?Sized>() {}
|
||||
| ^^^^ required by this bound in `assert_send`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
Loading…
Reference in New Issue
Block a user