Skip to content

Commit

Permalink
Rollup merge of #125043 - RalfJung:ref-type-safety-invariant, r=scottmcm
Browse files Browse the repository at this point in the history
reference type safety invariant docs: clarification

The old text could have been read as saying that you can call a function if these requirements are upheld, which is definitely not true as they are an underapproximation of the actual safety invariant.

I removed the part about functions relaxing the requirements via their documentation... this seems incoherent with saying that it may actually be unsound to ever temporarily violate the requirement. Furthermore, a function *cannot* just relax this for its return value, that would in general be unsound. And the part about "unsafe code in a safe function may assume these invariants are ensured of arguments passed by the caller" also interacts with relaxing things: clearly, if the invariant has been relaxed, unsafe code cannot rely on it any more. There may be a place to give general guidance on what kinds of function contracts can exist, but the reference type is definitely not the right place to write that down.

I also took a clarification from rust-lang/rust#121965 that is orthogonal to the rest of that PR.

Cc ```@joshlf``` ```@scottmcm```
  • Loading branch information
fmease authored May 22, 2024
2 parents 2f5f95d + 9494ef4 commit bbd55c5
Showing 0 changed files with 0 additions and 0 deletions.

0 comments on commit bbd55c5

Please sign in to comment.