It is used to optionally evaluate instructions to reduce overhead.
For this code
fatalError("\(someExpansiveComputation())")
If the function is defined with the normal transfer of parameters, it someExpansiveComputation()will always be called, even in the assembly.
@autoclosure fatalError , someExpansiveComputation()
@noreturn public func fatalError(message:String = default, file: StaticString = #file, line: UInt = #line) {
if debug || errorReportingEnabled {
log(message())
}
abort()
}