This revision was automatically updated to reflect the committed changes. Closed by commit rG3df3b62018c0: [clang] ns_error_domain attribute also supports CFString typed variables (authored by arphaman). Herald added a project: clang.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D90891/new/ 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@-1{{domain argument 'WrongErrorDomainType' does not point to an NSString constant}} +// expected-error@-1{{domain argument 'WrongErrorDomainType' does not point to an NSString or CFString constant}} struct __attribute__((ns_error_domain(MyErrorDomain))) MyStructWithErrorDomain {}; // expected-error@-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 @@ -5436,7 +5436,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 @@ -9597,7 +9597,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.
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@-1{{domain argument 'WrongErrorDomainType' does not point to an NSString constant}} +// expected-error@-1{{domain argument 'WrongErrorDomainType' does not point to an NSString or CFString constant}} struct __attribute__((ns_error_domain(MyErrorDomain))) MyStructWithErrorDomain {}; // expected-error@-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 @@ -5436,7 +5436,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 @@ -9597,7 +9597,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.
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits