Skip to content

Commit

Permalink
add 'import functions' to the list of situations where ABI compatibil…
Browse files Browse the repository at this point in the history
…ity comes up
  • Loading branch information
RalfJung committed Nov 10, 2023
1 parent 281d8cc commit 044d057
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions library/core/src/primitive_docs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1515,11 +1515,14 @@ mod prim_ref {}
/// alignment, they might be passed in different registers and hence not be ABI-compatible.
///
/// ABI compatibility as a concern only arises in code that alters the type of function pointers,
/// and in code that combines `#[target_feature]` with `extern fn`. Altering the type of
/// function pointers is wildly unsafe (as in, a lot more unsafe than even
/// [`transmute_copy`][mem::transmute_copy]), and should only occur in the most exceptional
/// circumstances. `#[target_feature]` is also used rarely. But assuming such circumstances, what
/// are the rules?
/// code that imports functions via `extern` blocks, and in code that combines `#[target_feature]`
/// with `extern fn`. Altering the type of function pointers is wildly unsafe (as in, a lot more
/// unsafe than even [`transmute_copy`][mem::transmute_copy]), and should only occur in the most
/// exceptional circumstances. Most Rust code just imports functions via `use`. `#[target_feature]`
/// is also used rarely. So, most likely you do not have to worry about ABI compatibility.
///
/// But assuming such circumstances, what are the rules? For this section, we are specifically
/// concerned with the case where both the caller and the callee are defined in Rust.
///
/// For two signatures to be considered *ABI-compatible*, they must use a compatible ABI string,
/// must take the same number of arguments, the individual argument types and the return types must
Expand Down

0 comments on commit 044d057

Please sign in to comment.