Skip to content

Commit dd5d5f9

Browse files
committed
Swift SIL: add Function.hasSemanticsAttribute
1 parent ad9dafc commit dd5d5f9

File tree

3 files changed

+14
-0
lines changed

3 files changed

+14
-0
lines changed

SwiftCompilerSources/Sources/SIL/Function.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,12 @@ final public class Function : CustomStringConvertible, HasShortDescription {
6565
return nil
6666
}
6767

68+
public func hasSemanticsAttribute(_ attr: StaticString) -> Bool {
69+
attr.withUTF8Buffer { (buffer: UnsafeBufferPointer<UInt8>) in
70+
SILFunction_hasSemanticsAttr(bridged, BridgedStringRef(data: buffer.baseAddress!, length: buffer.count)) != 0
71+
}
72+
}
73+
6874
/// True, if the function runs with a swift 5.1 runtime.
6975
/// Note that this is function specific, because inlinable functions are de-serialized
7076
/// in a client module, which might be compiled with a different deployment target.

include/swift/SIL/SILBridging.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,8 @@ SwiftInt SILFunction_getNumSILArguments(BridgedFunction function);
202202
BridgedType SILFunction_getSILArgumentType(BridgedFunction function, SwiftInt idx);
203203
BridgedType SILFunction_getSILResultType(BridgedFunction function);
204204
SwiftInt SILFunction_isSwift51RuntimeAvailable(BridgedFunction function);
205+
SwiftInt SILFunction_hasSemanticsAttr(BridgedFunction function,
206+
BridgedStringRef attrName);
205207

206208
BridgedStringRef SILGlobalVariable_getName(BridgedGlobalVar global);
207209
std::string SILGlobalVariable_debugDescription(BridgedGlobalVar global);

lib/SIL/Utils/SILBridging.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,12 @@ SwiftInt SILFunction_isSwift51RuntimeAvailable(BridgedFunction function) {
218218
ctxt.getSwift51Availability());
219219
}
220220

221+
SwiftInt SILFunction_hasSemanticsAttr(BridgedFunction function,
222+
BridgedStringRef attrName) {
223+
SILFunction *f = castToFunction(function);
224+
return f->hasSemanticsAttr(getStringRef(attrName)) ? 1 : 0;
225+
}
226+
221227
//===----------------------------------------------------------------------===//
222228
// SILBasicBlock
223229
//===----------------------------------------------------------------------===//

0 commit comments

Comments
 (0)