# \[Pitch\] @inline(always) attribute

**URL:** <https://forums.swift.org/t/pitch-inline-always-attribute/82040>\
**Category:** Pitches\
**Created:** [September 9, 2025, 6:55pm UTC](https://forums.swift.org/t/pitch-inline-always-attribute/82040 "2025-09-09T18:55:52Z")\
**Posts on this page:** 1\
**Showing post:** 22

<div class="post-metadata">

**Author:** ![Douglas\_Gregor](https://sea2.discourse-cdn.com/swift/user_avatar/forums.swift.org/douglas_gregor/32/1362_2.png) [@Douglas\_Gregor](https://forums.swift.org/u/Douglas_Gregor)\
**Post date:** [September 23, 2025, 10:41pm UTC](https://forums.swift.org/t/pitch-inline-always-attribute/82040/22 "2025-09-23T22:41:46Z")

</div>

> [@j-f1](#):
>
> Given that there are good reasons for non-`@inline(always)` functions to have no ABI (back-deployment, ability to make source-compatible ABI-breaking changes later), it feels like the best path forward is standardizing `@_alwaysEmitIntoClient` to support that use case. (My preferred spelling is `@abi(none)`) Then, it would be clear that these are entirely separate axes of configuration.

I agree with this. In the discussion of an [embedded Swift linkage model](https://forums.swift.org/t/embedded-swift-linkage-model/81441), we also discussed needing the opposite of `@_alwaysEmitIntoClient`, which I'm calling `@_neverEmitIntoClient`: it means that a symbol will always be generated for the entity and its body will never be available for inlining, even when the compilation mode defaults to it (e.g., due to cross-module optimization or embedded Swift, for example).

[Edit: I've started a separate thread on [formalizing `@_alwaysEmitIntoClient`](https://forums.swift.org/t/pitch-controlling-function-definition-visibility-in-clients/82372) independently of the `@always(inline)` proposal.]

Doug

---

_[View the full topic](https://forums.swift.org/t/pitch-inline-always-attribute/82040)._
