Ensure SMIR internal
function is safe
#120120
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The
rustc_smir::rustc_internal::internal
function was unsound. It could cause UB in rare cases where the user inadvertently stored the returned object in a location that could outlive the TyCtxt.In order to make it safe, we now take a type context as an argument to the internal function, and we ensure that interned items are lifted using the provided context.
Thus, this change ensures that the compiler can properly enforce that the object does not outlive the type context it was lifted to.
Call-outs
Lift
implementation toLayout
since it is directly interned, but it didn't have aLift
implementation.'tcx
lifetime intotables
. In cases where the code is reachable viastable()
function call, there is no guarantee that tables won't outlive the object being stored.r? @oli-obk