Skip to content

Commit eaaaba9

Browse files
authored
Merge pull request #66264 from hborla/5.9-member-attribute-expanded-member
[5.9][Macros] Don't apply member attribute macros to expanded members.
2 parents 3f72cb7 + 326f3ea commit eaaaba9

File tree

3 files changed

+38
-0
lines changed

3 files changed

+38
-0
lines changed

lib/Sema/TypeCheckMacros.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,10 @@ ArrayRef<unsigned> ExpandMemberAttributeMacros::evaluate(Evaluator &evaluator,
496496
if (decl->isImplicit())
497497
return { };
498498

499+
// Member attribute macros do not apply to macro-expanded members.
500+
if (decl->isInMacroExpansionInContext())
501+
return { };
502+
499503
auto *parentDecl = decl->getDeclContext()->getAsDecl();
500504
if (!parentDecl || !isa<IterableDeclContext>(parentDecl))
501505
return { };

test/Macros/Inputs/syntax_macro_definitions.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1488,3 +1488,20 @@ public struct VarValueMacro: DeclarationMacro, PeerMacro {
14881488
]
14891489
}
14901490
}
1491+
1492+
public struct SingleMemberMacro: MemberMacro {
1493+
public static func expansion(
1494+
of node: AttributeSyntax,
1495+
providingMembersOf decl: some DeclGroupSyntax,
1496+
in context: some MacroExpansionContext
1497+
) throws -> [DeclSyntax] {
1498+
let member: DeclSyntax =
1499+
"""
1500+
var expandedMember: Int = 10
1501+
"""
1502+
1503+
return [
1504+
member,
1505+
]
1506+
}
1507+
}

test/Macros/macro_expand_attributes.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,3 +123,20 @@ class C2: P {
123123

124124
var blah: Int { squareOfLength }
125125
}
126+
127+
@attached(member, names: named(expandedMember))
128+
macro AddMember() = #externalMacro(module: "MacroDefinition", type: "SingleMemberMacro")
129+
130+
@AddMember
131+
@wrapAllProperties
132+
struct TestExpansionOrder {
133+
var originalMember: Int = 10
134+
}
135+
136+
var expansionOrder = TestExpansionOrder()
137+
138+
// CHECK-NOT: setting 27
139+
expansionOrder.expandedMember = 27
140+
141+
// CHECK: setting 28
142+
expansionOrder.originalMember = 28

0 commit comments

Comments
 (0)