Skip to content

Commit 964f081

Browse files
authored
Merge pull request #80284 from eeckstein/diagnose-infinite-recursion
DiagnoseInfiniteRecursion: re-implement the pass in swift and fix a bug
2 parents c89cb49 + 8b2d270 commit 964f081

27 files changed

+861
-654
lines changed

SwiftCompilerSources/Sources/AST/Conformance.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,16 @@ public struct Conformance: CustomStringConvertible, NoReflectionChildren {
6060
return bridged.getInheritedConformance().conformance
6161
}
6262

63+
public var rootConformance: Conformance {
64+
if isInherited {
65+
return inheritedConformance.rootConformance
66+
}
67+
if isSpecialized {
68+
return genericConformance
69+
}
70+
return self
71+
}
72+
6373
public var specializedSubstitutions: SubstitutionMap {
6474
assert(isSpecialized)
6575
return SubstitutionMap(bridged: bridged.getSpecializedSubstitutions())

SwiftCompilerSources/Sources/AST/Declarations.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ public class Decl: CustomStringConvertible, Hashable {
2020

2121
public var description: String { String(taking: bridged.getDebugDescription()) }
2222

23+
/// The module in which this declaration resides.
24+
public var parentModule: ModuleDecl { bridged.getModuleContext().getAs(ModuleDecl.self) }
25+
2326
// True if this declaration is imported from C/C++/ObjC.
2427
public var hasClangNode: Bool { bridged.hasClangNode() }
2528

@@ -88,7 +91,9 @@ final public class ParamDecl: VarDecl {}
8891

8992
final public class SubscriptDecl: AbstractStorageDecl {}
9093

91-
public class AbstractFunctionDecl: ValueDecl {}
94+
public class AbstractFunctionDecl: ValueDecl {
95+
public var isOverridden: Bool { bridged.AbstractFunction_isOverridden() }
96+
}
9297

9398
final public class ConstructorDecl: AbstractFunctionDecl {}
9499

SwiftCompilerSources/Sources/AST/GenericSignature.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,8 @@ public struct GenericSignature: CustomStringConvertible, NoReflectionChildren {
2525
public var description: String {
2626
return String(taking: bridged.getDebugDescription())
2727
}
28+
29+
public var genericParameters: TypeArray {
30+
TypeArray(bridged: bridged.getGenericParams())
31+
}
2832
}

SwiftCompilerSources/Sources/AST/SubstitutionMap.swift

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ public struct SubstitutionMap: CustomStringConvertible, NoReflectionChildren {
2424
public init(bridged: BridgedSubstitutionMap) {
2525
self.bridged = bridged
2626
}
27-
27+
2828
public init() {
2929
self.bridged = BridgedSubstitutionMap()
3030
}
31-
31+
3232
public init(genericSignature: GenericSignature, replacementTypes: [Type]) {
3333
let bridgedReplTypes = replacementTypes.map { $0.bridged }
3434
self.bridged = bridgedReplTypes.withBridgedArrayRef {
@@ -73,4 +73,8 @@ public struct SubstitutionMap: CustomStringConvertible, NoReflectionChildren {
7373
assert(replacementTypes.count == 1)
7474
return replacementTypes[0]
7575
}
76+
77+
public static func ==(lhs: SubstitutionMap, rhs: SubstitutionMap) -> Bool {
78+
lhs.bridged.isEqualTo(rhs.bridged)
79+
}
7680
}

SwiftCompilerSources/Sources/AST/Type.swift

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public struct Type: TypeProperties, CustomStringConvertible, NoReflectionChildre
4040
self.bridged = bridgedOrNil
4141
}
4242

43-
init(bridged: BridgedASTType) {
43+
public init(bridged: BridgedASTType) {
4444
self.bridged = bridged
4545
}
4646

@@ -162,6 +162,20 @@ extension TypeProperties {
162162
return false
163163
}
164164

165+
//===--------------------------------------------------------------------===//
166+
// Properties of lowered `SILFunctionType`s
167+
//===--------------------------------------------------------------------===//
168+
169+
public var isLoweredFunction: Bool { rawType.bridged.isLoweredFunction() }
170+
public var isNoEscapeFunction: Bool { rawType.bridged.isNoEscapeFunction() }
171+
public var isCalleeConsumedFunction: Bool { rawType.bridged.isCalleeConsumedFunction() }
172+
public var isThickFunction: Bool { rawType.bridged.isThickFunction() }
173+
public var isAsyncFunction: Bool { rawType.bridged.isAsyncFunction() }
174+
175+
public var invocationGenericSignatureOfFunction: GenericSignature {
176+
GenericSignature(bridged: rawType.bridged.getInvocationGenericSignatureOfFunctionType())
177+
}
178+
165179
//===--------------------------------------------------------------------===//
166180
// Type properties
167181
//===--------------------------------------------------------------------===//

SwiftCompilerSources/Sources/Optimizer/FunctionPasses/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ swift_compiler_sources(Optimizer
1818
DeadStoreElimination.swift
1919
DeinitDevirtualizer.swift
2020
DestroyHoisting.swift
21+
DiagnoseInfiniteRecursion.swift
2122
InitializeStaticGlobals.swift
2223
LetPropertyLowering.swift
2324
LifetimeDependenceDiagnostics.swift

0 commit comments

Comments
 (0)