Skip to content

Commit 4902e69

Browse files
authored
Merge pull request #76331 from allevato/ast-printer-fixes
[ASTPrinter] Fix missing operators in synthesized `==` impls printed by `-print-ast`.
2 parents 54066b2 + aebe2ab commit 4902e69

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

lib/AST/ASTPrinter.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4924,6 +4924,10 @@ void PrintAST::visitBinaryExpr(BinaryExpr *expr) {
49244924
Printer << operatorRef->getDecl()->getBaseName();
49254925
} else if (auto *operatorRef = dyn_cast<DeclRefExpr>(expr->getFn())) {
49264926
Printer << operatorRef->getDecl()->getBaseName();
4927+
} else if (auto *operatorRef =
4928+
dyn_cast<UnresolvedDeclRefExpr>(expr->getFn())) {
4929+
// Synthesized `==` uses this.
4930+
Printer << operatorRef->getName();
49274931
}
49284932
Printer << " ";
49294933
visit(expr->getRHS());

test/decl/enum/derived_hashable_equatable.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,12 @@ enum HasAssociatedValues: Hashable {
5555
// CHECK: @_implements(Equatable, ==(_:_:)) internal static func __derived_enum_equals(_ a: HasAssociatedValues, _ b: HasAssociatedValues) -> Bool {
5656
// CHECK-NEXT: switch (a, b) {
5757
// CHECK-NEXT: case (.a(let l0), .a(let r0)):
58-
// CHECK-NEXT: guard l0 r0 else {
58+
// CHECK-NEXT: guard l0 == r0 else {
5959
// CHECK-NEXT: return false
6060
// CHECK-NEXT: }
6161
// CHECK-NEXT: return true
6262
// CHECK-NEXT: case (.b(let l0), .b(let r0)):
63-
// CHECK-NEXT: guard l0 r0 else {
63+
// CHECK-NEXT: guard l0 == r0 else {
6464
// CHECK-NEXT: return false
6565
// CHECK-NEXT: }
6666
// CHECK-NEXT: return true
@@ -148,7 +148,7 @@ enum HasAssociatedValuesAndUnavailableElement: Hashable {
148148
// CHECK: @_implements(Equatable, ==(_:_:)) internal static func __derived_enum_equals(_ a: HasAssociatedValuesAndUnavailableElement, _ b: HasAssociatedValuesAndUnavailableElement) -> Bool {
149149
// CHECK-NEXT: switch (a, b) {
150150
// CHECK-NEXT: case (.a(let l0), .a(let r0)):
151-
// CHECK-NEXT: guard l0 r0 else {
151+
// CHECK-NEXT: guard l0 == r0 else {
152152
// CHECK-NEXT: return false
153153
// CHECK-NEXT: }
154154
// CHECK-NEXT: return true

0 commit comments

Comments
 (0)