1
Fork 0

do not add noalias in return position

This commit is contained in:
Ralf Jung 2023-01-02 15:11:19 +01:00
parent b38a6d373c
commit e7cad62257
2 changed files with 5 additions and 3 deletions

View file

@ -273,9 +273,11 @@ fn adjust_for_rust_scalar<'tcx>(
| PointerKind::UniqueBorrowed
| PointerKind::UniqueBorrowedPinned => false,
PointerKind::UniqueOwned => noalias_for_box,
PointerKind::Frozen => !is_return,
PointerKind::Frozen => true,
};
if no_alias {
// We can never add `noalias` in return position; that LLVM attribute has some very surprising semantics
// (see <https://github.com/rust-lang/unsafe-code-guidelines/issues/385#issuecomment-1368055745>).
if no_alias && !is_return {
attrs.set(ArgAttribute::NoAlias);
}