Skip to content

Commit d258ed7

Browse files
authored
Merge pull request #65221 from DougGregor/reference-cycle-visible-name-lookup-5.9
2 parents 746a83f + 5452031 commit d258ed7

File tree

3 files changed

+41
-21
lines changed

3 files changed

+41
-21
lines changed

lib/AST/Decl.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -372,10 +372,12 @@ OrigDeclAttributes Decl::getOriginalAttrs() const {
372372
}
373373

374374
DeclAttributes Decl::getSemanticAttrs() const {
375-
auto mutableThis = const_cast<Decl *>(this);
376-
(void)evaluateOrDefault(getASTContext().evaluator,
377-
ExpandMemberAttributeMacros{mutableThis},
378-
{ });
375+
if (!getASTContext().evaluator.hasActiveResolveMacroRequest()) {
376+
auto mutableThis = const_cast<Decl *>(this);
377+
(void)evaluateOrDefault(getASTContext().evaluator,
378+
ExpandMemberAttributeMacros{mutableThis},
379+
{ });
380+
}
379381

380382
return getAttrs();
381383
}

lib/Sema/LookupVisibleDecls.cpp

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -255,17 +255,22 @@ static void doGlobalExtensionLookup(Type BaseType,
255255

256256
// Expand member macros.
257257
ASTContext &ctx = nominal->getASTContext();
258-
(void)evaluateOrDefault(
259-
ctx.evaluator,
260-
ExpandSynthesizedMemberMacroRequest{extension},
261-
false);
258+
if (!ctx.evaluator.hasActiveRequest(
259+
ExpandSynthesizedMemberMacroRequest{extension})) {
260+
(void)evaluateOrDefault(
261+
ctx.evaluator,
262+
ExpandSynthesizedMemberMacroRequest{extension},
263+
false);
264+
}
262265

263266
// Expand peer macros.
264267
for (auto *member : extension->getMembers()) {
265-
(void)evaluateOrDefault(
266-
ctx.evaluator,
267-
ExpandPeerMacroRequest{member},
268-
{});
268+
if (!ctx.evaluator.hasActiveRequest(ExpandPeerMacroRequest{member})) {
269+
(void)evaluateOrDefault(
270+
ctx.evaluator,
271+
ExpandPeerMacroRequest{member},
272+
{});
273+
}
269274
}
270275

271276
collectVisibleMemberDecls(CurrDC, LS, BaseType, extension, FoundDecls);
@@ -622,16 +627,21 @@ static void synthesizeMemberDeclsForLookup(NominalTypeDecl *NTD,
622627

623628
// Expand synthesized member macros.
624629
auto &ctx = NTD->getASTContext();
625-
(void)evaluateOrDefault(ctx.evaluator,
626-
ExpandSynthesizedMemberMacroRequest{NTD},
627-
false);
630+
if (!ctx.evaluator.hasActiveRequest(
631+
ExpandSynthesizedMemberMacroRequest{NTD})) {
632+
(void)evaluateOrDefault(ctx.evaluator,
633+
ExpandSynthesizedMemberMacroRequest{NTD},
634+
false);
635+
}
628636

629637
// Expand peer macros.
630638
for (auto *member : NTD->getMembers()) {
631-
(void)evaluateOrDefault(
632-
ctx.evaluator,
633-
ExpandPeerMacroRequest{member},
634-
{});
639+
if (!ctx.evaluator.hasActiveRequest(ExpandPeerMacroRequest{member})) {
640+
(void)evaluateOrDefault(
641+
ctx.evaluator,
642+
ExpandPeerMacroRequest{member},
643+
{});
644+
}
635645
}
636646

637647
synthesizePropertyWrapperVariables(NTD);

test/Macros/macro_expand_peers.swift

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
// RUN: %empty-directory(%t)
44
// RUN: %host-build-swift -swift-version 5 -emit-library -o %t/%target-library-name(MacroDefinition) -parse-as-library -module-name=MacroDefinition %S/Inputs/syntax_macro_definitions.swift -g -no-toolchain-stdlib-rpath
5-
// RUN: %target-typecheck-verify-swift -swift-version 5 -load-plugin-library %t/%target-library-name(MacroDefinition) -parse-as-library -disable-availability-checking
5+
// RUN: %target-typecheck-verify-swift -swift-version 5 -load-plugin-library %t/%target-library-name(MacroDefinition) -parse-as-library -disable-availability-checking -DTEST_DIAGNOSTICS
66

77
// Check with the imported macro library vs. the local declaration of the macro.
88
// RUN: %target-swift-frontend -swift-version 5 -emit-module -o %t/macro_library.swiftmodule %S/Inputs/macro_library.swift -module-name macro_library -load-plugin-library %t/%target-library-name(MacroDefinition)
99

10-
// RUN: %target-typecheck-verify-swift -swift-version 5 -load-plugin-library %t/%target-library-name(MacroDefinition) -parse-as-library -disable-availability-checking -DIMPORT_MACRO_LIBRARY -I %t
10+
// RUN: %target-typecheck-verify-swift -swift-version 5 -load-plugin-library %t/%target-library-name(MacroDefinition) -parse-as-library -disable-availability-checking -DIMPORT_MACRO_LIBRARY -I %t -DTEST_DIAGNOSTICS
1111

1212

1313
// RUN: %target-swift-frontend -swift-version 5 -typecheck -load-plugin-library %t/%target-library-name(MacroDefinition) -parse-as-library %s -disable-availability-checking -dump-macro-expansions > %t/expansions-dump.txt 2>&1
@@ -143,4 +143,12 @@ struct S2 {
143143
func g(a: Int, for b: String, _ value: Double) async -> String {
144144
return b
145145
}
146+
147+
#if TEST_DIAGNOSTICS
148+
// expected-error@+1{{cannot find 'nonexistent' in scope}}
149+
@addCompletionHandlerArbitrarily(nonexistent)
150+
func h(a: Int, for b: String, _ value: Double) async -> String {
151+
return b
152+
}
153+
#endif
146154
}

0 commit comments

Comments
 (0)