Skip to content

Commit d71d974

Browse files
authored
Merge pull request #401 from nkcsgexi/71942829-fix
Walk-around a dangling pointer issue
2 parents 9d721df + fe058e6 commit d71d974

File tree

5 files changed

+22
-35
lines changed

5 files changed

+22
-35
lines changed

Sources/SwiftDriver/Incremental Compilation/BuildRecord.swift

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -135,19 +135,17 @@ public extension BuildRecord {
135135
extension BuildRecord {
136136
/// Create a new buildRecord for writing
137137
init(jobs: [Job],
138-
finishedJobResults: [Job: ProcessResult],
138+
finishedJobResults: [JobResult],
139139
skippedInputs: Set<TypedVirtualPath>?,
140140
compilationInputModificationDates: [TypedVirtualPath: Date],
141141
actualSwiftVersion: String,
142142
argsHash: String,
143143
timeBeforeFirstJob: Date
144144
) {
145-
let jobResultsByInput = Dictionary(
146-
uniqueKeysWithValues:
147-
finishedJobResults.flatMap { job, result in
148-
job.primaryInputs.map { ($0, result) }
149-
}
150-
)
145+
let jobResultsByInput = Dictionary(uniqueKeysWithValues:
146+
finishedJobResults.flatMap { entry in
147+
entry.j.primaryInputs.map { ($0, entry.result) }
148+
})
151149
let inputInfosArray = compilationInputModificationDates
152150
.map { input, modDate -> (VirtualPath, InputInfo) in
153151
let status = InputInfo.Status( wasSkipped: skippedInputs?.contains(input),

Sources/SwiftDriver/Incremental Compilation/BuildRecordInfo.swift

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,15 @@ import Foundation
1414
import TSCBasic
1515
import SwiftOptions
1616

17+
struct JobResult {
18+
let j: Job
19+
let result: ProcessResult
20+
init(_ j: Job, _ result: ProcessResult) {
21+
self.j = j
22+
self.result = result
23+
}
24+
}
25+
1726
/// Holds information required to read and write the build record (aka compilation record)
1827
/// This info is always written, but only read for incremental compilation.
1928
class BuildRecordInfo {
@@ -25,7 +34,7 @@ import SwiftOptions
2534
let diagnosticEngine: DiagnosticsEngine
2635
let compilationInputModificationDates: [TypedVirtualPath: Date]
2736

28-
var finishedJobResults = [Job: ProcessResult]()
37+
var finishedJobResults = [JobResult]()
2938

3039
init?(
3140
actualSwiftVersion: String,
@@ -175,8 +184,6 @@ import SwiftOptions
175184

176185
func jobFinished(job: Job, result: ProcessResult) {
177186
// REDUNDANT?
178-
if let _ = finishedJobResults.updateValue(result, forKey: job) {
179-
fatalError("job finished twice?!")
180-
}
187+
finishedJobResults.append(JobResult(job, result))
181188
}
182189
}

Sources/SwiftDriver/Jobs/CompileJob.swift

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ extension Driver {
7777
case .swift, .image, .dSYM, .dependencies, .autolink, .swiftDocumentation, .swiftInterface,
7878
.privateSwiftInterface, .swiftSourceInfoFile, .diagnostics, .objcHeader, .swiftDeps,
7979
.remap, .tbd, .moduleTrace, .yamlOptimizationRecord, .bitstreamOptimizationRecord, .pcm,
80-
.pch, .clangModuleMap, .jsonTargetInfo, .jsonSwiftArtifacts, .jsonClangDependencies, .fileList, nil:
80+
.pch, .clangModuleMap, .jsonTargetInfo, .jsonSwiftArtifacts, .jsonClangDependencies, nil:
8181
return false
8282
}
8383
}
@@ -98,7 +98,6 @@ extension Driver {
9898
useInputFileList = true
9999
commandLine.appendFlag(.filelist)
100100
commandLine.appendPath(allSourcesFileList)
101-
inputs.append(TypedVirtualPath(file: allSourcesFileList, type: .fileList))
102101
} else {
103102
useInputFileList = false
104103
}
@@ -356,7 +355,7 @@ extension FileType {
356355
case .swift, .dSYM, .autolink, .dependencies, .swiftDocumentation, .pcm,
357356
.diagnostics, .objcHeader, .image, .swiftDeps, .moduleTrace, .tbd,
358357
.yamlOptimizationRecord, .bitstreamOptimizationRecord, .swiftInterface,
359-
.privateSwiftInterface, .swiftSourceInfoFile, .clangModuleMap, .jsonSwiftArtifacts, .fileList:
358+
.privateSwiftInterface, .swiftSourceInfoFile, .clangModuleMap, .jsonSwiftArtifacts:
360359
fatalError("Output type can never be a primary output")
361360
}
362361
}

Sources/SwiftDriver/Utilities/FileType.swift

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -130,17 +130,14 @@ public enum FileType: String, Hashable, CaseIterable, Codable {
130130

131131
/// Clang Module Map
132132
case clangModuleMap = "modulemap"
133-
134-
/// file used in -filelist
135-
case fileList
136133
}
137134

138135
extension FileType: CustomStringConvertible {
139136
public var description: String {
140137
switch self {
141138
case .swift, .sil, .sib, .image, .dSYM, .dependencies, .autolink,
142139
.swiftModule, .swiftDocumentation, .swiftInterface, .swiftSourceInfoFile, .assembly,
143-
.remap, .tbd, .pcm, .pch, .clangModuleMap, .fileList:
140+
.remap, .tbd, .pcm, .pch, .clangModuleMap:
144141
return rawValue
145142
case .object:
146143
return "object"
@@ -207,7 +204,7 @@ extension FileType {
207204
/// a Swift or SIL source file.
208205
public var isPartOfSwiftCompilation: Bool {
209206
switch self {
210-
case .swift, .raw_sil, .sil, .raw_sib, .sib, .fileList:
207+
case .swift, .raw_sil, .sil, .raw_sib, .sib:
211208
return true
212209
case .object, .pch, .ast, .llvmIR, .llvmBitcode, .assembly, .swiftModule,
213210
.importedModules, .indexData, .remap, .dSYM, .autolink, .dependencies,
@@ -305,8 +302,6 @@ extension FileType {
305302
return "bitstream-opt-record"
306303
case .diagnostics:
307304
return "diagnostics"
308-
case .fileList:
309-
return "fileList"
310305
}
311306
}
312307
}
@@ -318,7 +313,7 @@ extension FileType {
318313
.objcHeader, .autolink, .importedModules, .tbd, .moduleTrace,
319314
.yamlOptimizationRecord, .swiftInterface, .privateSwiftInterface,
320315
.jsonDependencies, .clangModuleMap, .jsonTargetInfo, .jsonSwiftArtifacts,
321-
.jsonClangDependencies, .fileList:
316+
.jsonClangDependencies:
322317
return true
323318
case .image, .object, .dSYM, .pch, .sib, .raw_sib, .swiftModule,
324319
.swiftDocumentation, .swiftSourceInfoFile, .llvmBitcode, .diagnostics,
@@ -338,7 +333,7 @@ extension FileType {
338333
.swiftSourceInfoFile, .raw_sil, .raw_sib, .diagnostics, .objcHeader, .swiftDeps, .remap,
339334
.importedModules, .tbd, .moduleTrace, .indexData, .yamlOptimizationRecord,
340335
.bitstreamOptimizationRecord, .pcm, .pch, .jsonDependencies, .clangModuleMap,
341-
.jsonTargetInfo, .jsonSwiftArtifacts, .jsonClangDependencies, .fileList:
336+
.jsonTargetInfo, .jsonSwiftArtifacts, .jsonClangDependencies:
342337
return false
343338
}
344339
}

Tests/SwiftDriverTests/SwiftDriverTests.swift

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1601,22 +1601,10 @@ final class SwiftDriverTests: XCTestCase {
16011601
let plannedJobs = try driver1.planBuild().removingAutolinkExtractJobs()
16021602
XCTAssertEqual(plannedJobs.count, 2)
16031603
XCTAssertEqual(plannedJobs[0].kind, .compile)
1604-
XCTAssertTrue(plannedJobs[0].inputs.contains { $0.type == .fileList })
16051604
print(plannedJobs[0].commandLine.joinedArguments)
16061605
XCTAssert(plannedJobs[0].commandLine.contains(.flag("-supplementary-output-file-map")))
16071606
}
16081607

1609-
func testInputFileListAsInput() throws {
1610-
var driver1 = try Driver(args: [
1611-
"swiftc", "-whole-module-optimization", "foo.swift", "bar.swift", "wibble.swift", "-module-name", "Test",
1612-
"-emit-module-interface", "-driver-filelist-threshold=0"
1613-
])
1614-
let plannedJobs = try driver1.planBuild().removingAutolinkExtractJobs()
1615-
XCTAssertEqual(plannedJobs.count, 2)
1616-
XCTAssertEqual(plannedJobs[0].kind, .compile)
1617-
XCTAssertTrue(plannedJobs[0].inputs.contains { $0.type == .fileList })
1618-
}
1619-
16201608
func testMergeModulesOnly() throws {
16211609
do {
16221610
var driver = try Driver(args: ["swiftc", "foo.swift", "bar.swift", "-module-name", "Test", "-emit-module", "-disable-bridging-pch", "-import-objc-header", "TestInputHeader.h", "-emit-dependencies", "-emit-module-source-info-path", "/foo/bar/Test.swiftsourceinfo"])

0 commit comments

Comments
 (0)