Skip to content

Commit

Permalink
Rollup merge of rust-lang#96384 - lcnr:extern-types-similar, r=compil…
Browse files Browse the repository at this point in the history
…er-errors

do not consider two extern types to be similar
  • Loading branch information
compiler-errors authored Apr 25, 2022
2 parents 0a869c3 + 5594db0 commit 0f11c81
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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.
//
Expand Down
22 changes: 22 additions & 0 deletions src/test/ui/extern/extern-type-diag-not-similar.rs
Original file line number Diff line number Diff line change
@@ -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 changes: 16 additions & 0 deletions src/test/ui/extern/extern-type-diag-not-similar.stderr
Original file line number Diff line number Diff line change
@@ -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`.

0 comments on commit 0f11c81

Please sign in to comment.