@@ -55,6 +55,9 @@ public macro AttachedPeerMacro()
5555@attached ( extension)
5656public macro AttachedConformanceMacro( )
5757
58+ @attached ( body)
59+ public macro BodyMacro( )
60+
5861@freestanding ( expression)
5962@freestanding ( declaration)
6063@attached ( accessor)
@@ -69,59 +72,68 @@ public macro EverythingMacro()
6972import MacroDefinitions
7073#endif
7174
72- @#^CLASS_ATTR? check= NOMINAL_ATTR^# class C { }
73- @#^EXTRA_FILTER? check= NOMINAL_ATTR^#IB class C2 { }
74- @#^ENUM_ATTR? check= NOMINAL_ATTR^# enum E { }
75- @#^STRUCT_ATTR? check= NOMINAL_ATTR^# struct S { }
76- // NOMINAL_ATTR-NOT: freestanding
77- // NOMINAL_ATTR-NOT: AttachedAccessorMacro
75+ @#^CLASS_ATTR? check= NOMINAL_ATTR;check= NOMINAL_ATTR_NOT^# class C { }
76+ @#^EXTRA_FILTER? check= NOMINAL_ATTR;check= NOMINAL_ATTR_NOT^#IB class C2 { }
77+ @#^ENUM_ATTR? check= NOMINAL_ATTR;check= NOMINAL_ATTR_NOT^# enum E { }
78+ @#^STRUCT_ATTR? check= NOMINAL_ATTR;check= NOMINAL_ATTR_NOT^# struct S{ }
7879// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedMemberMacro[#Member Macro#]; name=AttachedMemberMacro
7980// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedMemberMacroWithArgs({#arg1: Int#})[#Member Macro#]; name=AttachedMemberMacroWithArgs
8081// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedMemberAttributeMacro[#Member Attribute Macro#]; name=AttachedMemberAttributeMacro
8182// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedPeerMacro[#Peer Macro#]; name=AttachedPeerMacro
8283// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedConformanceMacro[#Extension Macro#]; name=AttachedConformanceMacro
8384// NOMINAL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: EverythingMacro[#Expression Macro, Declaration Macro, Accessor Macro, Member Attribute Macro, Member Macro, Peer Macro, Extension Macro#]; name=EverythingMacro
85+ //
86+ // NOMINAL_ATTR_NOT-NOT: freestanding
87+ // NOMINAL_ATTR_NOT-NOT: AttachedAccessorMacro
88+ // NOMINAL_ATTR_NOT-NOT: BodyMacro
8489
85- @#^FUNC_ATTR? check= DECL_ATTR ^# func method( ) { }
90+ @#^FUNC_ATTR? check= FUNC_ATTR;check = FUNC_ATTR_NOT ^# func method( ) { }
8691struct MethodAttrs {
87- @#^INIT_ATTR? check= DECL_ATTR^# init( ) { }
88- @#^DEINIT_ATTR? check= DECL_ATTR^# deinit{ }
89- @#^METHOD_ATTR? check= DECL_ATTR^# func method( ) { }
92+ var x : Int {
93+ @#^ACCESSOR_ATTR? check= FUNC_ATTR;check= FUNC_ATTR_NOT^# get { 0 }
94+ }
95+ @#^INIT_ATTR? check= FUNC_ATTR;check= FUNC_ATTR_NOT^# init( ) { }
96+ @#^DEINIT_ATTR? check= FUNC_ATTR;check= FUNC_ATTR_NOT^# deinit{ }
97+ @#^METHOD_ATTR? check= FUNC_ATTR;check= FUNC_ATTR_NOT^# func method( ) { }
9098}
91- // DECL_ATTR-NOT: freestanding
92- // DECL_ATTR-NOT: AttachedAccessorMacro
93- // DECL_ATTR-NOT: AttachedMemberMacro
94- // DECL_ATTR-NOT: AttachedMemberMacroWithArgs
95- // DECL_ATTR-NOT: AttachedConformanceMacro
96- // DECL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedPeerMacro[#Peer Macro#]; name=AttachedPeerMacro
97- // DECL_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: EverythingMacro[#Expression Macro, Declaration Macro, Accessor Macro, Member Attribute Macro, Member Macro, Peer Macro, Extension Macro#]; name=EverythingMacro
98-
99- @#^GLOBAL_ATTR? check= VAR_ATTR^# var globalVar
99+ // FUNC_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedPeerMacro[#Peer Macro#]; name=AttachedPeerMacro
100+ // FUNC_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: BodyMacro[#Body Macro#]; name=BodyMacro
101+ // FUNC_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: EverythingMacro[#Expression Macro, Declaration Macro, Accessor Macro, Member Attribute Macro, Member Macro, Peer Macro, Extension Macro#]; name=EverythingMacro
102+ //
103+ // FUNC_ATTR_NOT-NOT: freestanding
104+ // FUNC_ATTR_NOT-NOT: AttachedAccessorMacro
105+ // FUNC_ATTR_NOT-NOT: AttachedMemberMacro
106+ // FUNC_ATTR_NOT-NOT: AttachedMemberMacroWithArgs
107+ // FUNC_ATTR_NOT-NOT: AttachedConformanceMacro
108+
109+ @#^GLOBAL_ATTR? check= VAR_ATTR;check= VAR_ATTR_NOT^# var globalVar
100110struct PropAttr {
101- @#^PROP_ATTR? check= VAR_ATTR^# var propVar
111+ @#^PROP_ATTR? check= VAR_ATTR;check = VAR_ATTR_NOT ^# var propVar
102112 func localAttr( ) {
103- @#^LOCAL_ATTR? check= VAR_ATTR^# var localVar
113+ @#^LOCAL_ATTR? check= VAR_ATTR;check = VAR_ATTR_NOT ^# var localVar
104114 }
105115}
106- // VAR_ATTR-NOT: freestanding
107- // VAR_ATTR-NOT: AttachedMemberMacro
108- // VAR_ATTR-NOT: AttachedMemberMacroWithArgs
109- // VAR_ATTR-NOT: AttachedMemberAttributeMacro
110- // VAR_ATTR-NOT: AttachedConformanceMacro
111116// VAR_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedAccessorMacro[#Accessor Macro#]; name=AttachedAccessorMacro
112117// VAR_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedPeerMacro[#Peer Macro#]; name=AttachedPeerMacro
113118// VAR_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: EverythingMacro[#Expression Macro, Declaration Macro, Accessor Macro, Member Attribute Macro, Member Macro, Peer Macro, Extension Macro#]; name=EverythingMacro
119+ //
120+ // VAR_ATTR_NOT-NOT: freestanding
121+ // VAR_ATTR_NOT-NOT: AttachedMemberMacro
122+ // VAR_ATTR_NOT-NOT: AttachedMemberMacroWithArgs
123+ // VAR_ATTR_NOT-NOT: AttachedMemberAttributeMacro
124+ // VAR_ATTR_NOT-NOT: AttachedConformanceMacro
125+ // VAR_ATTR_NOT-NOT: BodyMacro
114126
115127func paramAttr( @#^PARAM_ATTR? check= PARAM_ATTR^#) { }
116128func paramAttr2( @#^PARAM2 _ATTR? check= PARAM_ATTR^# arg: Int) { }
117129// TODO: These should both be PARAM_ATTR
118130func takeNoArgClosure( _: ( Int ) -> Void ) {
119- takeClosure { @#^NO_ARG_CLOSURE_ATTR? check= INDEPENDENT_ATTR^# in
131+ takeClosure { @#^NO_ARG_CLOSURE_ATTR? check= INDEPENDENT_ATTR;check = INDEPENDENT_ATTR_NOT ^# in
120132 print ( " x " )
121133 }
122134}
123135func takeNoArgClosure( _: ( ) -> Void ) {
124- takeClosure { @#^CLOSURE_ATTR? check= INDEPENDENT_ATTR^# in
136+ takeClosure { @#^CLOSURE_ATTR? check= INDEPENDENT_ATTR;check = INDEPENDENT_ATTR_NOT ^# in
125137 print ( " x " )
126138 }
127139}
@@ -132,41 +144,47 @@ func takeNoArgClosure(_: () -> Void) {
132144// PARAM_ATTR-NOT: AttachedMemberAttributeMacro
133145// PARAM_ATTR-NOT: AttachedPeerMacro
134146// PARAM_ATTR-NOT: AttachedConformanceMacro
147+ // PARAM_ATTR-NOT: BodyMacro
135148// PARAM_ATTR-NOT: EverythingMacro
136149
137- ##^TOP_LEVEL_FREESTANDING? check= ALL_FREESTANDING^#
150+ ##^TOP_LEVEL_FREESTANDING? check= ALL_FREESTANDING;check = ALL_FREESTANDING_NOT ^#
138151func nestedFreestanding( ) {
139- ##^TOP_NESTED_FREESTANDING? check= ALL_FREESTANDING^#
152+ ##^TOP_NESTED_FREESTANDING? check= ALL_FREESTANDING;check = ALL_FREESTANDING_NOT ^#
140153}
141- // ALL_FREESTANDING-NOT: Attached
142154// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingDeclMacro[#Declaration Macro#]; name=freestandingDeclMacro
143155// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingCodeItemMacro[#Code Item Macro#]; name=freestandingCodeItemMacro
144156// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingExprIntMacro[#Int#]; name=freestandingExprIntMacro
145157// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingExprStringMacro[#String#]; name=freestandingExprStringMacro
146158// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingExprTMacro({#(value): T#})[#T#]; name=freestandingExprTMacro(:)
147159// ALL_FREESTANDING-DAG: Decl[Macro]/{{.*}}: EverythingMacro[#Expression Macro, Declaration Macro, Accessor Macro, Member Attribute Macro, Member Macro, Peer Macro, Extension Macro#]; name=EverythingMacro
160+ //
161+ // ALL_FREESTANDING_NOT-NOT: Attached
162+ // ALL_FREESTANDING_NOT-NOT: BodyMacro
148163
149164func exprFreestanding( arg: Int ) {
150- _ = arg + ##^EXPR_FREESTANDING^#
165+ _ = arg + ##^EXPR_FREESTANDING? check = EXPR_FREESTANDING;check = EXPR_FREESTANDING_NOT ^#
151166}
152- // EXPR_FREESTANDING-NOT: freestandingDeclMacro
153- // EXPR_FREESTANDING-NOT: freestandingCodeItemMacro
154- // EXPR_FREESTANDING-NOT: Attached
155167// EXPR_FREESTANDING-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: freestandingExprIntMacro[#Int#]; name=freestandingExprIntMacro
156168// EXPR_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingExprStringMacro[#String#]; name=freestandingExprStringMacro
157169// EXPR_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingExprTMacro({#(value): T#})[#T#]; name=freestandingExprTMacro(:)
158170// TODO: This should be invalid in both same module and across modules
159171// EXPR_FREESTANDING-DAG: Decl[Macro]/{{.*}}: EverythingMacro[#Expression Macro, Declaration Macro, Accessor Macro, Member Attribute Macro, Member Macro, Peer Macro, Extension Macro#]; name=EverythingMacro
172+ //
173+ // EXPR_FREESTANDING_NOT-NOT: freestandingDeclMacro
174+ // EXPR_FREESTANDING_NOT-NOT: freestandingCodeItemMacro
175+ // EXPR_FREESTANDING_NOT-NOT: Attached
176+ // EXPR_FREESTANDING_NOT-NOT: BodyMacro
160177
161178struct NestedFreestanding {
162- ##^TYPE_NESTED_FREESTANDING? check= ITEM_FREESTANDING^#
179+ ##^TYPE_NESTED_FREESTANDING? check= ITEM_FREESTANDING;check = ITEM_FREESTANDING_NOT ^#
163180}
164- // ITEM_FREESTANDING-NOT: Attached
165- // ITEM_FREESTANDING-NOT: freestandingExpr
166- // ITEM_FREESTANDING-NOT: freestandingCodeItemMacro
167181// ITEM_FREESTANDING-DAG: Decl[Macro]/{{.*}}: freestandingDeclMacro[#Declaration Macro#]; name=freestandingDeclMacro
168182// ITEM_FREESTANDING-DAG: Decl[Macro]/{{.*}}: EverythingMacro[#Expression Macro, Declaration Macro, Accessor Macro, Member Attribute Macro, Member Macro, Peer Macro, Extension Macro#]; name=EverythingMacro
169-
183+ //
184+ // ITEM_FREESTANDING_NOT-NOT: Attached
185+ // ITEM_FREESTANDING_NOT-NOT: freestandingExpr
186+ // ITEM_FREESTANDING_NOT-NOT: freestandingCodeItemMacro
187+ // ITEM_FREESTANDING_NOT-NOT: BodyMacro
170188
171189@AttachedMemberMacroWithEnumArgs ( . #^ATTACHED_MACRO_ARG^#)
172190struct AttachedMacroArg { }
@@ -181,15 +199,17 @@ struct AttachedMacroSecondArgLabel {}
181199
182200
183201struct LastMember {
184- @#^LAST_MEMBER_ATTR? check= INDEPENDENT_ATTR^#
202+ @#^LAST_MEMBER_ATTR? check= INDEPENDENT_ATTR;check = INDEPENDENT_ATTR_NOT ^#
185203}
186- @#^INDEPENDENT? check= INDEPENDENT_ATTR^#
187- // INDEPENDENT_ATTR-NOT: freestandingExprMacro
188- // INDEPENDENT_ATTR-NOT: freestandingDeclMacro
204+ @#^INDEPENDENT? check= INDEPENDENT_ATTR;check= INDEPENDENT_ATTR_NOT^#
189205// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedAccessorMacro[#Accessor Macro#]; name=AttachedAccessorMacro
190206// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedMemberMacro[#Member Macro#]; name=AttachedMemberMacro
191207// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedMemberMacroWithArgs({#arg1: Int#})[#Member Macro#]; name=AttachedMemberMacroWithArgs
192208// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedMemberAttributeMacro[#Member Attribute Macro#]; name=AttachedMemberAttributeMacro
193209// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedPeerMacro[#Peer Macro#]; name=AttachedPeerMacro
194210// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: AttachedConformanceMacro[#Extension Macro#]; name=AttachedConformanceMacro
211+ // INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: BodyMacro[#Body Macro#]; name=BodyMacro
195212// INDEPENDENT_ATTR-DAG: Decl[Macro]/{{.*}}/TypeRelation[Convertible]: EverythingMacro[#Expression Macro, Declaration Macro, Accessor Macro, Member Attribute Macro, Member Macro, Peer Macro, Extension Macro#]; name=EverythingMacro
213+ //
214+ // INDEPENDENT_ATTR_NOT-NOT: freestandingExprMacro
215+ // INDEPENDENT_ATTR_NOT-NOT: freestandingDeclMacro
0 commit comments