[PATCH] D90891: [clang] ns_error_domain attribute also supports CFString typed variables
Alex Lorenz via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 5 14:37:51 PST 2020
arphaman created this revision.
arphaman added reviewers: erik.pilkington, MForster.
Herald added subscribers: ributzka, jkorous.
Herald added a reviewer: aaron.ballman.
arphaman requested review of this revision.
The change in a5b8757506b07e3091fe243b6c1e004220d3cba3 <https://reviews.llvm.org/rGa5b8757506b07e3091fe243b6c1e004220d3cba3> locked down the `ns_error_domain` attribute to `NSString` only, however we actually support `CFString` as well.
https://reviews.llvm.org/D90891
Files:
clang/include/clang/Basic/AttrDocs.td
clang/include/clang/Basic/DiagnosticSemaKinds.td
clang/lib/Sema/SemaDeclAttr.cpp
clang/test/Sema/ns_error_enum.m
Index: clang/test/Sema/ns_error_enum.m
===================================================================
--- clang/test/Sema/ns_error_enum.m
+++ clang/test/Sema/ns_error_enum.m
@@ -36,9 +36,24 @@
MyTypedefErrSecond,
};
+typedef const struct __CFString * CFStringRef;
+
+extern CFStringRef const MyCFErrorDomain;
+typedef NS_ERROR_ENUM(unsigned char, MyCFErrorEnum, MyCFErrorDomain) {
+ MyCFErrFirst,
+ MyCFErrSecond,
+};
+
+typedef CFStringRef CFErrorDomain;
+extern CFErrorDomain const MyCFTypedefErrorDomain;
+typedef NS_ERROR_ENUM(unsigned char, MyCFTypedefErrorEnum, MyCFTypedefErrorDomain) {
+ MyCFTypedefErrFirst,
+ MyCFTypedefErrSecond,
+};
+
extern char *const WrongErrorDomainType;
enum __attribute__((ns_error_domain(WrongErrorDomainType))) MyWrongErrorDomainType { MyWrongErrorDomain };
-// expected-error at -1{{domain argument 'WrongErrorDomainType' does not point to an NSString constant}}
+// expected-error at -1{{domain argument 'WrongErrorDomainType' does not point to an NSString or CFString constant}}
struct __attribute__((ns_error_domain(MyErrorDomain))) MyStructWithErrorDomain {};
// expected-error at -1{{'ns_error_domain' attribute only applies to enums}}
Index: clang/lib/Sema/SemaDeclAttr.cpp
===================================================================
--- clang/lib/Sema/SemaDeclAttr.cpp
+++ clang/lib/Sema/SemaDeclAttr.cpp
@@ -5422,7 +5422,8 @@
return;
}
- if (!isNSStringType(VD->getType(), S.Context)) {
+ if (!isNSStringType(VD->getType(), S.Context) &&
+ !isCFStringType(VD->getType(), S.Context)) {
S.Diag(Loc, diag::err_nserrordomain_wrong_type) << VD;
return;
}
Index: clang/include/clang/Basic/DiagnosticSemaKinds.td
===================================================================
--- clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -9599,7 +9599,7 @@
def err_nserrordomain_invalid_decl : Error<
"domain argument %select{|%1 }0does not refer to global constant">;
def err_nserrordomain_wrong_type : Error<
- "domain argument %0 does not point to an NSString constant">;
+ "domain argument %0 does not point to an NSString or CFString constant">;
def warn_nsconsumed_attribute_mismatch : Warning<
err_nsconsumed_attribute_mismatch.Text>, InGroup<NSConsumedMismatch>;
Index: clang/include/clang/Basic/AttrDocs.td
===================================================================
--- clang/include/clang/Basic/AttrDocs.td
+++ clang/include/clang/Basic/AttrDocs.td
@@ -3594,9 +3594,10 @@
In Cocoa frameworks in Objective-C, one can group related error codes in enums
and categorize these enums with error domains.
-The ``ns_error_domain`` attribute indicates a global ``NSString`` constant
-representing the error domain that an error code belongs to. For pointer
-uniqueness and code size this is a constant symbol, not a literal.
+The ``ns_error_domain`` attribute indicates a global ``NSString`` or
+``CFString`` constant representing the error domain that an error code belongs
+to. For pointer uniqueness and code size this is a constant symbol, not a
+literal.
The domain and error code need to be used together. The ``ns_error_domain``
attribute links error codes to their domain at the source level.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D90891.303267.patch
Type: text/x-patch
Size: 3273 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201105/fde6acbb/attachment.bin>
More information about the cfe-commits
mailing list