Skip to content

Commit 57d4407

Browse files
Merge pull request #229 from matthewseaman/source-filename
[Module] sourceFileName
2 parents 5e746af + 544b231 commit 57d4407

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

Sources/LLVM/Module.swift

+21-1
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,27 @@ public final class Module: CustomStringConvertible {
142142
LLVMSetModuleIdentifier(llvm, newValue, newValue.utf8.count)
143143
}
144144
}
145-
145+
146+
/// The source filename of this module.
147+
///
148+
/// The source filename appears at the top of an IR module:
149+
///
150+
/// source_filename = "/path/to/source.c"
151+
///
152+
/// Local functions used in profile data prepend the source file name to the local function name.
153+
///
154+
/// If not otherwise set, `name` is used.
155+
public var sourceFileName: String {
156+
get {
157+
var count = 0
158+
guard let fn = LLVMGetSourceFileName(llvm, &count) else { return "" }
159+
return String(cString: fn)
160+
}
161+
set {
162+
LLVMSetSourceFileName(llvm, newValue, newValue.utf8.count)
163+
}
164+
}
165+
146166
/// Retrieves the inline assembly for this module, if any.
147167
public var inlineAssembly: String {
148168
get {

Tests/LLVMTests/ModuleLinkSpec.swift

+6-2
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,14 @@ class ModuleLinkSpec : XCTestCase {
2222
// MODULE-LINK-NEXT: }
2323
module1.dump()
2424

25-
// MODULE-LINK: ; ModuleID = '[[ModuleName2:ModuleLinkModuleTwo]]'
26-
// MODULE-LINK-NEXT: source_filename = "[[ModuleName2]]"
25+
// MODULE-LINK: ; ModuleID = 'ModuleLinkModuleTwo'
26+
// MODULE-LINK-NEXT: source_filename = "/Users/user/Developer/Project/file.ext"
2727
let module2 = Module(name: "ModuleLinkModuleTwo")
2828
XCTAssertEqual(module2.name, "ModuleLinkModuleTwo")
29+
XCTAssertEqual(module2.sourceFileName, "ModuleLinkModuleTwo")
30+
module2.sourceFileName = "/Users/user/Developer/Project/file.ext"
31+
XCTAssertEqual(module2.sourceFileName, "/Users/user/Developer/Project/file.ext")
32+
2933
let builder2 = IRBuilder(module: module2)
3034
// MODULE-LINK: define void @moduleTwo() {
3135
let mod2f = builder2.addFunction("moduleTwo",

0 commit comments

Comments
 (0)