forked from OSchip/llvm-project
ObjectiveC migrator. Improve on definition, use
and testing of objc_bridgmutable attribute per Aaron Ballman's comments. // rdar://15498044 llvm-svn: 195396
This commit is contained in:
parent
de61cecd1c
commit
2651ac5445
|
@ -548,13 +548,13 @@ def NSBridged : InheritableAttr {
|
|||
def ObjCBridge : InheritableAttr {
|
||||
let Spellings = [GNU<"objc_bridge">];
|
||||
let Subjects = [Record];
|
||||
let Args = [IdentifierArgument<"BridgedType", 1>];
|
||||
let Args = [IdentifierArgument<"BridgedType">];
|
||||
}
|
||||
|
||||
def ObjCBridgeMutable : InheritableAttr {
|
||||
let Spellings = [GNU<"objc_bridge_mutable">];
|
||||
let Subjects = [Record];
|
||||
let Args = [IdentifierArgument<"BridgedType", 1>];
|
||||
let Args = [IdentifierArgument<"BridgedType">];
|
||||
}
|
||||
|
||||
def NSReturnsRetained : InheritableAttr {
|
||||
|
|
|
@ -4348,9 +4348,7 @@ static void handleObjCBridgeAttr(Sema &S, Scope *Sc, Decl *D,
|
|||
return;
|
||||
}
|
||||
|
||||
IdentifierLoc *Parm = 0;
|
||||
if (Attr.getNumArgs() == 1)
|
||||
Parm = Attr.isArgIdent(0) ? Attr.getArgAsIdent(0) : 0;
|
||||
IdentifierLoc * Parm = Attr.isArgIdent(0) ? Attr.getArgAsIdent(0) : 0;
|
||||
|
||||
if (!Parm) {
|
||||
S.Diag(D->getLocStart(), diag::err_objc_attr_not_id) << Attr.getName() << 0;
|
||||
|
@ -4372,9 +4370,7 @@ static void handleObjCBridgeMutableAttr(Sema &S, Scope *Sc, Decl *D,
|
|||
return;
|
||||
}
|
||||
|
||||
IdentifierLoc *Parm = 0;
|
||||
if (Attr.getNumArgs() == 1)
|
||||
Parm = Attr.isArgIdent(0) ? Attr.getArgAsIdent(0) : 0;
|
||||
IdentifierLoc * Parm = Attr.isArgIdent(0) ? Attr.getArgAsIdent(0) : 0;
|
||||
|
||||
if (!Parm) {
|
||||
S.Diag(D->getLocStart(), diag::err_objc_attr_not_id) << Attr.getName() << 0;
|
||||
|
|
|
@ -7,7 +7,7 @@ typedef struct __attribute__ ((objc_bridge(MyError))) __CFMyErrorRef * CFMyError
|
|||
|
||||
typedef struct __attribute__((objc_bridge(12))) __CFMyColor *CFMyColorRef; // expected-error {{parameter of 'objc_bridge' attribute must be a single name of an Objective-C class}}
|
||||
|
||||
typedef struct __attribute__ ((objc_bridge)) __CFArray *CFArrayRef; // expected-error {{parameter of 'objc_bridge' attribute must be a single name of an Objective-C class}}
|
||||
typedef struct __attribute__ ((objc_bridge)) __CFArray *CFArrayRef; // expected-error {{'objc_bridge' attribute takes one argument}}
|
||||
|
||||
typedef void * __attribute__ ((objc_bridge(NSURL))) CFURLRef; // expected-error {{'objc_bridge' attribute only applies to struct or union}}
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ typedef struct __attribute__ ((objc_bridge(MyError))) __CFMyErrorRef * CFMyError
|
|||
|
||||
typedef struct __attribute__((objc_bridge(12))) __CFMyColor *CFMyColorRef; // expected-error {{parameter of 'objc_bridge' attribute must be a single name of an Objective-C class}}
|
||||
|
||||
typedef struct __attribute__ ((objc_bridge)) __CFArray *CFArrayRef; // expected-error {{parameter of 'objc_bridge' attribute must be a single name of an Objective-C class}}
|
||||
typedef struct __attribute__ ((objc_bridge)) __CFArray *CFArrayRef; // expected-error {{'objc_bridge' attribute takes one argument}}
|
||||
|
||||
typedef void * __attribute__ ((objc_bridge(NSURL))) CFURLRef; // expected-error {{'objc_bridge' attribute only applies to struct or union}}
|
||||
|
||||
|
|
|
@ -3,17 +3,29 @@
|
|||
|
||||
typedef struct __attribute__((objc_bridge_mutable(NSMutableDictionary))) __CFDictionary * CFMutableDictionaryRef; // expected-note {{declared here}}
|
||||
|
||||
typedef struct __attribute__((objc_bridge_mutable(12))) __CFDictionaryB1 * CFMutableDictionaryB1Ref; // expected-error {{parameter of 'objc_bridge_mutable' attribute must be a single name of an Objective-C class}}
|
||||
|
||||
typedef struct __attribute__((objc_bridge_mutable(P))) __CFDictionaryB2 * CFMutableDictionaryB2Ref; // expected-note {{declared here}}
|
||||
|
||||
typedef struct __attribute__((objc_bridge_mutable(NSMutableDictionary, Unknown))) __CFDictionaryB3 * CFMutableDictionaryB3Ref; // expected-error {{use of undeclared identifier 'Unknown'}}
|
||||
|
||||
typedef struct __attribute__((objc_bridge_mutable)) __CFDictionaryB4 * CFMutableDictionaryB4Ref; // expected-error {{'objc_bridge_mutable' attribute takes one argument}}
|
||||
|
||||
@interface NSDictionary
|
||||
@end
|
||||
|
||||
@interface NSMutableDictionary : NSDictionary
|
||||
@end
|
||||
|
||||
void Test(NSMutableDictionary *md, NSDictionary *nd, CFMutableDictionaryRef mcf) {
|
||||
@protocol P @end
|
||||
|
||||
void Test(NSMutableDictionary *md, NSDictionary *nd, CFMutableDictionaryRef mcf, CFMutableDictionaryB2Ref bmcf) {
|
||||
|
||||
(void) (CFMutableDictionaryRef)md;
|
||||
(void) (CFMutableDictionaryRef)nd; // expected-warning {{'NSDictionary' cannot bridge to 'CFMutableDictionaryRef' (aka 'struct __CFDictionary *')}}
|
||||
(void) (NSDictionary *)mcf; // expected-warning {{'CFMutableDictionaryRef' (aka 'struct __CFDictionary *') bridges to NSMutableDictionary, not 'NSDictionary'}}
|
||||
(void) (NSMutableDictionary *)mcf; // ok;
|
||||
(void) (NSMutableDictionary *)bmcf; // expected-error {{CF object of type 'CFMutableDictionaryB2Ref' (aka 'struct __CFDictionaryB2 *') is bridged to 'P', which is not an Objective-C class}}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ typedef struct __attribute__ ((objc_bridge(MyError))) __CFMyErrorRef * CFMyError
|
|||
|
||||
typedef struct __attribute__((objc_bridge(12))) __CFMyColor *CFMyColorRef; // expected-error {{parameter of 'objc_bridge' attribute must be a single name of an Objective-C class}}
|
||||
|
||||
typedef struct __attribute__ ((objc_bridge)) __CFArray *CFArrayRef; // expected-error {{parameter of 'objc_bridge' attribute must be a single name of an Objective-C class}}
|
||||
typedef struct __attribute__ ((objc_bridge)) __CFArray *CFArrayRef; // expected-error {{'objc_bridge' attribute takes one argument}}
|
||||
|
||||
typedef void * __attribute__ ((objc_bridge(NSURL))) CFURLRef; // expected-error {{'objc_bridge' attribute only applies to struct, union or class}}
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ typedef struct __attribute__ ((objc_bridge(MyError))) __CFMyErrorRef * CFMyError
|
|||
|
||||
typedef struct __attribute__((objc_bridge(12))) __CFMyColor *CFMyColorRef; // expected-error {{parameter of 'objc_bridge' attribute must be a single name of an Objective-C class}}
|
||||
|
||||
typedef struct __attribute__ ((objc_bridge)) __CFArray *CFArrayRef; // expected-error {{parameter of 'objc_bridge' attribute must be a single name of an Objective-C class}}
|
||||
typedef struct __attribute__ ((objc_bridge)) __CFArray *CFArrayRef; // expected-error {{'objc_bridge' attribute takes one argument}}
|
||||
|
||||
typedef void * __attribute__ ((objc_bridge(NSURL))) CFURLRef; // expected-error {{'objc_bridge' attribute only applies to struct, union or class}}
|
||||
|
||||
|
|
Loading…
Reference in New Issue