Skip to content

Commit 6c798a2

Browse files
authored
Merge pull request #72027 from DougGregor/top-level-closure-discriminators-in-macros
Ensure that we assign discriminators for closures from top-level macros
2 parents 80c858f + 138b33f commit 6c798a2

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

lib/AST/ASTContext.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2193,12 +2193,20 @@ unsigned ASTContext::getNextMacroDiscriminator(
21932193

21942194
/// Get the next discriminator within the given declaration context.
21952195
unsigned ASTContext::getNextDiscriminator(const DeclContext *dc) {
2196+
// Top-level code declarations don't have their own discriminators.
2197+
if (auto tlcd = dyn_cast<TopLevelCodeDecl>(dc))
2198+
dc = tlcd->getParent();
2199+
21962200
return getImpl().NextDiscriminator[dc];
21972201
}
21982202

21992203
/// Set the maximum assigned discriminator within the given declaration context.
22002204
void ASTContext::setMaxAssignedDiscriminator(
22012205
const DeclContext *dc, unsigned discriminator) {
2206+
// Top-level code declarations don't have their own discriminators.
2207+
if (auto tlcd = dyn_cast<TopLevelCodeDecl>(dc))
2208+
dc = tlcd->getParent();
2209+
22022210
assert(discriminator >= getImpl().NextDiscriminator[dc]);
22032211
getImpl().NextDiscriminator[dc] = discriminator;
22042212
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// REQUIRES: swift_swift_parser, executable_test
2+
3+
// RUN: %empty-directory(%t)
4+
// RUN: %host-build-swift -swift-version 5 -emit-library -o %t/%target-library-name(MacroDefinition) -module-name=MacroDefinition %S/Inputs/syntax_macro_definitions.swift
5+
6+
// RUN: %target-build-swift -swift-version 5 -g -load-plugin-library %t/%target-library-name(MacroDefinition) %s -o %t/main -module-name MacroUser -Xfrontend -emit-dependencies-path -Xfrontend %t/main.d -Xfrontend -emit-reference-dependencies-path -Xfrontend %t/main.swiftdeps
7+
// RUN: %target-codesign %t/main
8+
// RUN: %target-run %t/main | %FileCheck %s
9+
10+
@freestanding(expression) macro stringify<T>(_ value: T) -> (T, String) = #externalMacro(module: "MacroDefinition", type: "StringifyMacro")
11+
12+
// CHECK: 3
13+
// CHECK-NEXT: 7
14+
print(#stringify({ 1 + 2 }()))
15+
print(#stringify({ 3 + 4 }()))

0 commit comments

Comments
 (0)