Skip to content

Add support for @_noLocks and @_noAllocation Swift attributes #63

@tcldr

Description

@tcldr

Description

For real time programming the @_noLocks and @_noAllocation Swift attributes provide programmers with a convenient way of ensuring the safety of their code in a real time environment. Currently, when using these attributes with Swift Atomics, the following error message is generated.

Called function is not available in this module and can have unpredictable performance

Steps to Reproduce

import Atomics

public struct WrappedInt {
  
  private let wrappedInt = UnsafeAtomic<Int>.create(0)
  
  @_noLocks
  @_noAllocation
  public func value() -> Int {
    // ERROR: Called function is not available in this module and can have unpredictable performance
    wrappedInt.load(ordering: .relaxed)
  }
}

Expected behavior

The @_noLocks and @_noAllocation attributes generate no errors indicating code is free from locks and allocations and may be suitable for execution within a real time environment.

Actual behavior

The @_noLocks and @_noAllocation attributes generate errors indicating the code may contain locks or allocations and may be unsafe for execution within a real time environment.

Environment

Swift 5.8 Dev Snapshot 2022-12-29

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions