Skip to content

Types equal to/wrapping () result in "not FFI-safe" warning #66202

Closed
@Rantanen

Description

@Rantanen
// OK
pub extern "system" fn raw() -> () {}

// warning: `extern` fn uses type `()`, which is not FFI-safe
pub extern "system" fn assoc() -> <() as ToOwned>::Owned {}
//                                ^^^^^^^^^^^^^^^^^^^^^^ not FFI-safe

#[repr(transparent)]
pub struct W<T>(T);

// warning: `extern` fn uses type `()`, which is not FFI-safe
pub extern "system" fn wrap() -> W<()> { W(()) }
//                              ^^^^^^ not FFI-safe
// note: composed only of `PhantomData`

https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=62da3bf343e1358e16a6692a72ca7f33

All of these cases work in Beta. At least the associated type warning is recent regression in Nightly. I suspect #65134

CC @davidtwco

Metadata

Metadata

Assignees

Labels

A-FFIArea: Foreign function interface (FFI)A-lintsArea: Lints (warnings about flaws in source code) such as unused_mut.C-bugCategory: This is a bug.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions