mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-25 14:50:26 +00:00
[clang] ns_error_domain attribute also supports CFString typed variables
Differential Revision: https://reviews.llvm.org/D90891
This commit is contained in:
parent
e3b64eb31c
commit
3df3b62018
@ -3594,9 +3594,10 @@ def NSErrorDomainDocs : Documentation {
|
||||
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.
|
||||
|
@ -9597,7 +9597,7 @@ def err_nsreturns_retained_attribute_mismatch : Error<
|
||||
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>;
|
||||
|
@ -5436,7 +5436,8 @@ static void handleNSErrorDomain(Sema &S, Decl *D, const ParsedAttr &AL) {
|
||||
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;
|
||||
}
|
||||
|
@ -36,9 +36,24 @@ typedef NS_ERROR_ENUM(unsigned char, MyTypedefErrorEnum, MyTypedefErrorDomain) {
|
||||
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}}
|
||||
|
Loading…
Reference in New Issue
Block a user