From 290cddcd139d668251821f11426f37481faf6d7f Mon Sep 17 00:00:00 2001 From: Becca Royal-Gordon Date: Fri, 19 Nov 2021 12:10:15 -0800 Subject: [PATCH] Allow __attribute__((swift_attr)) in attribute push pragmas This change allows SwiftAttr to be used with #pragma clang attribute push to add Swift attributes to large regions of header files. We plan to use this to annotate headers with concurrency information. Patch by: Becca Royal-Gordon Differential Revision: https://reviews.llvm.org/D112773 --- clang/include/clang/Basic/Attr.td | 1 + clang/test/AST/attr-swift_attr.m | 10 +++++++++- .../test/Misc/pragma-attribute-supported-attributes-list.test | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index d8f0fcd..39588d9 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -2310,6 +2310,7 @@ def SwiftAttr : InheritableAttr { let Spellings = [GNU<"swift_attr">]; let Args = [StringArgument<"Attribute">]; let Documentation = [SwiftAttrDocs]; + let PragmaAttributeSupport = 1; } def SwiftBridge : InheritableAttr { diff --git a/clang/test/AST/attr-swift_attr.m b/clang/test/AST/attr-swift_attr.m index 3cd51b8..70e3257 100644 --- a/clang/test/AST/attr-swift_attr.m +++ b/clang/test/AST/attr-swift_attr.m @@ -4,5 +4,13 @@ __attribute__((swift_attr("@actor"))) @interface View @end -// CHECK: InterfaceDecl {{.*}} View +// CHECK-LABEL: InterfaceDecl {{.*}} View // CHECK-NEXT: SwiftAttrAttr {{.*}} "@actor" + +#pragma clang attribute push(__attribute__((swift_attr("@sendable"))), apply_to=objc_interface) +@interface Contact +@end +#pragma clang attribute pop + +// CHECK-LABEL: InterfaceDecl {{.*}} Contact +// CHECK-NEXT: SwiftAttrAttr {{.*}} "@sendable" diff --git a/clang/test/Misc/pragma-attribute-supported-attributes-list.test b/clang/test/Misc/pragma-attribute-supported-attributes-list.test index 199934b..b565f7d 100644 --- a/clang/test/Misc/pragma-attribute-supported-attributes-list.test +++ b/clang/test/Misc/pragma-attribute-supported-attributes-list.test @@ -163,6 +163,7 @@ // CHECK-NEXT: SwiftAsyncContext (SubjectMatchRule_variable_is_parameter) // CHECK-NEXT: SwiftAsyncError (SubjectMatchRule_function, SubjectMatchRule_objc_method) // CHECK-NEXT: SwiftAsyncName (SubjectMatchRule_objc_method, SubjectMatchRule_function) +// CHECK-NEXT: SwiftAttr () // CHECK-NEXT: SwiftBridgedTypedef (SubjectMatchRule_type_alias) // CHECK-NEXT: SwiftContext (SubjectMatchRule_variable_is_parameter) // CHECK-NEXT: SwiftError (SubjectMatchRule_function, SubjectMatchRule_objc_method) -- 2.7.4