warning: `clash` redeclared with a different signature
  --> $DIR/clashing-extern-fn.rs:15:13
   |
LL |             fn clash(x: u8);
   |             ---------------- `clash` previously declared here
...
LL |             fn clash(x: u64);
   |             ^^^^^^^^^^^^^^^^^ this signature doesn't match the previous declaration
   |
note: the lint level is defined here
  --> $DIR/clashing-extern-fn.rs:5:9
   |
LL | #![warn(clashing_extern_declarations)]
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   = note: expected `unsafe extern "C" fn(u8)`
              found `unsafe extern "C" fn(u64)`

warning: `extern_link_name` redeclared with a different signature
  --> $DIR/clashing-extern-fn.rs:53:9
   |
LL | /     #[link_name = "extern_link_name"]
LL | |     fn some_new_name(x: i16);
   | |_____________________________- `extern_link_name` previously declared here
...
LL |           fn extern_link_name(x: u32);
   |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this signature doesn't match the previous declaration
   |
   = note: expected `unsafe extern "C" fn(i16)`
              found `unsafe extern "C" fn(u32)`

warning: `some_other_extern_link_name` redeclares `some_other_new_name` with a different signature
  --> $DIR/clashing-extern-fn.rs:56:9
   |
LL |       fn some_other_new_name(x: i16);
   |       ------------------------------- `some_other_new_name` previously declared here
...
LL | /         #[link_name = "some_other_new_name"]
LL | |
LL | |         fn some_other_extern_link_name(x: u32);
   | |_______________________________________________^ this signature doesn't match the previous declaration
   |
   = note: expected `unsafe extern "C" fn(i16)`
              found `unsafe extern "C" fn(u32)`

warning: `other_both_names_different` redeclares `link_name_same` with a different signature
  --> $DIR/clashing-extern-fn.rs:60:9
   |
LL | /     #[link_name = "link_name_same"]
LL | |     fn both_names_different(x: i16);
   | |____________________________________- `link_name_same` previously declared here
...
LL | /         #[link_name = "link_name_same"]
LL | |
LL | |         fn other_both_names_different(x: u32);
   | |______________________________________________^ this signature doesn't match the previous declaration
   |
   = note: expected `unsafe extern "C" fn(i16)`
              found `unsafe extern "C" fn(u32)`

warning: `different_mod` redeclared with a different signature
  --> $DIR/clashing-extern-fn.rs:73:9
   |
LL |         fn different_mod(x: u8);
   |         ------------------------ `different_mod` previously declared here
...
LL |         fn different_mod(x: u64);
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^ this signature doesn't match the previous declaration
   |
   = note: expected `unsafe extern "C" fn(u8)`
              found `unsafe extern "C" fn(u64)`

warning: `variadic_decl` redeclared with a different signature
  --> $DIR/clashing-extern-fn.rs:83:9
   |
LL |     fn variadic_decl(x: u8, ...);
   |     ----------------------------- `variadic_decl` previously declared here
...
LL |         fn variadic_decl(x: u8);
   |         ^^^^^^^^^^^^^^^^^^^^^^^^ this signature doesn't match the previous declaration
   |
   = note: expected `unsafe extern "C" fn(u8, ...)`
              found `unsafe extern "C" fn(u8)`

warning: `weigh_banana` redeclared with a different signature
  --> $DIR/clashing-extern-fn.rs:143:13
   |
LL |             fn weigh_banana(count: *const Banana) -> u64;
   |             --------------------------------------------- `weigh_banana` previously declared here
...
LL |             fn weigh_banana(count: *const Banana) -> u64;
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this signature doesn't match the previous declaration
   |
   = note: expected `unsafe extern "C" fn(*const one::Banana) -> u64`
              found `unsafe extern "C" fn(*const three::Banana) -> u64`

warning: `draw_point` redeclared with a different signature
  --> $DIR/clashing-extern-fn.rs:172:13
   |
LL |             fn draw_point(p: Point);
   |             ------------------------ `draw_point` previously declared here
...
LL |             fn draw_point(p: Point);
   |             ^^^^^^^^^^^^^^^^^^^^^^^^ this signature doesn't match the previous declaration
   |
   = note: expected `unsafe extern "C" fn(sameish_members::a::Point)`
              found `unsafe extern "C" fn(sameish_members::b::Point)`

warning: `origin` redeclared with a different signature
  --> $DIR/clashing-extern-fn.rs:198:13
   |
LL |             fn origin() -> Point3;
   |             ---------------------- `origin` previously declared here
...
LL |             fn origin() -> Point3;
   |             ^^^^^^^^^^^^^^^^^^^^^^ this signature doesn't match the previous declaration
   |
   = note: expected `unsafe extern "C" fn() -> same_sized_members_clash::a::Point3`
              found `unsafe extern "C" fn() -> same_sized_members_clash::b::Point3`

warning: `transparent_incorrect` redeclared with a different signature
  --> $DIR/clashing-extern-fn.rs:221:13
   |
LL |             fn transparent_incorrect() -> T;
   |             -------------------------------- `transparent_incorrect` previously declared here
...
LL |             fn transparent_incorrect() -> isize;
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this signature doesn't match the previous declaration
   |
   = note: expected `unsafe extern "C" fn() -> T`
              found `unsafe extern "C" fn() -> isize`

warning: `missing_return_type` redeclared with a different signature
  --> $DIR/clashing-extern-fn.rs:239:13
   |
LL |             fn missing_return_type() -> usize;
   |             ---------------------------------- `missing_return_type` previously declared here
...
LL |             fn missing_return_type();
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^ this signature doesn't match the previous declaration
   |
   = note: expected `unsafe extern "C" fn() -> usize`
              found `unsafe extern "C" fn()`

warning: `non_zero_usize` redeclared with a different signature
  --> $DIR/clashing-extern-fn.rs:257:13
   |
LL |             fn non_zero_usize() -> core::num::NonZeroUsize;
   |             ----------------------------------------------- `non_zero_usize` previously declared here
...
LL |             fn non_zero_usize() -> usize;
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this signature doesn't match the previous declaration
   |
   = note: expected `unsafe extern "C" fn() -> NonZeroUsize`
              found `unsafe extern "C" fn() -> usize`

warning: `non_null_ptr` redeclared with a different signature
  --> $DIR/clashing-extern-fn.rs:259:13
   |
LL |             fn non_null_ptr() -> core::ptr::NonNull<usize>;
   |             ----------------------------------------------- `non_null_ptr` previously declared here
...
LL |             fn non_null_ptr() -> *const usize;
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this signature doesn't match the previous declaration
   |
   = note: expected `unsafe extern "C" fn() -> NonNull<usize>`
              found `unsafe extern "C" fn() -> *const usize`

warning: `option_non_zero_usize_incorrect` redeclared with a different signature
  --> $DIR/clashing-extern-fn.rs:357:13
   |
LL |             fn option_non_zero_usize_incorrect() -> usize;
   |             ---------------------------------------------- `option_non_zero_usize_incorrect` previously declared here
...
LL |             fn option_non_zero_usize_incorrect() -> isize;
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this signature doesn't match the previous declaration
   |
   = note: expected `unsafe extern "C" fn() -> usize`
              found `unsafe extern "C" fn() -> isize`

warning: `option_non_null_ptr_incorrect` redeclared with a different signature
  --> $DIR/clashing-extern-fn.rs:359:13
   |
LL |             fn option_non_null_ptr_incorrect() -> *const usize;
   |             --------------------------------------------------- `option_non_null_ptr_incorrect` previously declared here
...
LL |             fn option_non_null_ptr_incorrect() -> *const isize;
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this signature doesn't match the previous declaration
   |
   = note: expected `unsafe extern "C" fn() -> *const usize`
              found `unsafe extern "C" fn() -> *const isize`

warning: `hidden_niche_transparent_no_niche` redeclared with a different signature
  --> $DIR/clashing-extern-fn.rs:410:13
   |
LL |             fn hidden_niche_transparent_no_niche() -> usize;
   |             ------------------------------------------------ `hidden_niche_transparent_no_niche` previously declared here
...
LL |             fn hidden_niche_transparent_no_niche() -> Option<TransparentNoNiche>;
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this signature doesn't match the previous declaration
   |
   = note: expected `unsafe extern "C" fn() -> usize`
              found `unsafe extern "C" fn() -> Option<TransparentNoNiche>`

warning: `hidden_niche_unsafe_cell` redeclared with a different signature
  --> $DIR/clashing-extern-fn.rs:414:13
   |
LL |             fn hidden_niche_unsafe_cell() -> usize;
   |             --------------------------------------- `hidden_niche_unsafe_cell` previously declared here
...
LL |             fn hidden_niche_unsafe_cell() -> Option<UnsafeCell<NonZeroUsize>>;
   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this signature doesn't match the previous declaration
   |
   = note: expected `unsafe extern "C" fn() -> usize`
              found `unsafe extern "C" fn() -> Option<UnsafeCell<NonZeroUsize>>`

warning: `extern` block uses type `Option<TransparentNoNiche>`, which is not FFI-safe
  --> $DIR/clashing-extern-fn.rs:410:55
   |
LL |             fn hidden_niche_transparent_no_niche() -> Option<TransparentNoNiche>;
   |                                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^ not FFI-safe
   |
   = note: `#[warn(improper_ctypes)]` on by default
   = help: consider adding a `#[repr(C)]`, `#[repr(transparent)]`, or integer `#[repr(...)]` attribute to this enum
   = note: enum has no representation hint

warning: `extern` block uses type `Option<UnsafeCell<NonZeroUsize>>`, which is not FFI-safe
  --> $DIR/clashing-extern-fn.rs:414:46
   |
LL |             fn hidden_niche_unsafe_cell() -> Option<UnsafeCell<NonZeroUsize>>;
   |                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ not FFI-safe
   |
   = help: consider adding a `#[repr(C)]`, `#[repr(transparent)]`, or integer `#[repr(...)]` attribute to this enum
   = note: enum has no representation hint

warning: 19 warnings emitted

