Add experimental feature @inline(always)

The intent for `@inline(always)` is to act as an optimization control.
The user can rely on inlining to happen or the compiler will emit an error
message.

Because function values can be dynamic (closures, protocol/class lookup)
this guarantee can only be upheld for direct function references.

In cases where the optimizer can resolve dynamic function values the
attribute shall be respected.

rdar://148608854
This commit is contained in:
Arnold Schwaighofer
2025-09-09 10:48:14 -07:00
parent c8f8736f6c
commit 25a071efc8
95 changed files with 1064 additions and 240 deletions

View File

@@ -0,0 +1,22 @@
// RUN: %target-swift-emit-module-interface(%t.swiftinterface) %s -module-name attrs \
// RUN: -enable-experimental-feature InlineAlways \
// RUN: -emit-private-module-interface-path %t.private.swiftinterface
// RUN: %target-swift-typecheck-module-from-interface(%t.swiftinterface) -module-name attrs \
// RUN: -enable-experimental-feature InlineAlways
// RUN: %target-swift-typecheck-module-from-interface(%t.private.swiftinterface) -module-name attrs \
// RUN: -enable-experimental-feature InlineAlways
// RUN: %FileCheck %s --check-prefixes CHECK --input-file %t.swiftinterface
// RUN: %FileCheck %s --check-prefixes CHECK --input-file %t.private.swiftinterface
// REQUIRES: swift_feature_InlineAlways
// CHECK: #if compiler(>=5.3) && $InlineAlways
// CHECK: @inline(always) @inlinable public func inlineAlwaysFunc() {}
// CHECK: #else
// CHECK: @inline(__always) @inlinable public func inlineAlwaysFunc() {}
// CHECK: #endif
@inline(always)
@inlinable
public func inlineAlwaysFunc() {}