forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add test for str as extern "C" arg causes compiler panic rust-lang#80125
Fixes rust-lang#80125
- Loading branch information
1 parent
c3bde24
commit 72d2b59
Showing
2 changed files
with
50 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
// test for #80125 | ||
//@ check-pass | ||
type ExternCallback = extern "C" fn(*const u8, u32, str); | ||
//~^ WARN `extern` fn uses type `str`, which is not FFI-safe | ||
|
||
pub struct Struct(ExternCallback); | ||
|
||
#[no_mangle] | ||
pub extern "C" fn register_something(bind: ExternCallback) -> Struct { | ||
//~^ WARN `extern` fn uses type `str`, which is not FFI-safe | ||
//~^^ WARN `extern` fn uses type `Struct`, which is not FFI-safe | ||
Struct(bind) | ||
} | ||
|
||
fn main() {} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
warning: `extern` fn uses type `str`, which is not FFI-safe | ||
--> $DIR/extern-C-str-arg-ice-80125.rs:3:23 | ||
| | ||
LL | type ExternCallback = extern "C" fn(*const u8, u32, str); | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ not FFI-safe | ||
| | ||
= help: consider using `*const u8` and a length instead | ||
= note: string slices have no C equivalent | ||
= note: `#[warn(improper_ctypes_definitions)]` on by default | ||
|
||
warning: `extern` fn uses type `str`, which is not FFI-safe | ||
--> $DIR/extern-C-str-arg-ice-80125.rs:9:44 | ||
| | ||
LL | pub extern "C" fn register_something(bind: ExternCallback) -> Struct { | ||
| ^^^^^^^^^^^^^^ not FFI-safe | ||
| | ||
= help: consider using `*const u8` and a length instead | ||
= note: string slices have no C equivalent | ||
|
||
warning: `extern` fn uses type `Struct`, which is not FFI-safe | ||
--> $DIR/extern-C-str-arg-ice-80125.rs:9:63 | ||
| | ||
LL | pub extern "C" fn register_something(bind: ExternCallback) -> Struct { | ||
| ^^^^^^ not FFI-safe | ||
| | ||
= help: consider adding a `#[repr(C)]` or `#[repr(transparent)]` attribute to this struct | ||
= note: this struct has unspecified layout | ||
note: the type is defined here | ||
--> $DIR/extern-C-str-arg-ice-80125.rs:6:1 | ||
| | ||
LL | pub struct Struct(ExternCallback); | ||
| ^^^^^^^^^^^^^^^^^ | ||
|
||
warning: 3 warnings emitted | ||
|