Objective-C. More tests for both bridging attributes and

a fix to make it work when CFStructs have no definition.
// rdar://17238954.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@210690 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Fariborz Jahanian 2014-06-11 19:10:46 +00:00
parent 534f692b4d
commit 1e56828b1a
2 changed files with 30 additions and 5 deletions

View File

@ -3133,7 +3133,7 @@ static inline T *getObjCBridgeAttr(const TypedefType *TD) {
if (QT->isPointerType()) {
QT = QT->getPointeeType();
if (const RecordType *RT = QT->getAs<RecordType>())
if (RecordDecl *RD = RT->getDecl())
if (RecordDecl *RD = RT->getDecl()->getMostRecentDecl())
return RD->getAttr<T>();
}
return nullptr;

View File

@ -15,12 +15,37 @@ typedef struct __attribute__((objc_bridge_mutable(NSMutableAttributedString))) _
struct __CFAttributedString {
};
void Test1(CFAttributedStringRef attrStr)
void Test1(CFAttributedStringRef attrStr, CFMutableAttributedStringRef mutable_attrStr)
{
id x = (NSAttributedString *) attrStr; // no warning
id x = (NSAttributedString *) attrStr;
id x1 =(NSAttributedString *) mutable_attrStr;
id x2 = (NSMutableAttributedString *) attrStr;
id x3 = (NSMutableAttributedString *) mutable_attrStr;
}
void Test2(NSAttributedString *attrStr) {
CFAttributedStringRef cfsr = (CFAttributedStringRef) attrStr;
void Test2(NSAttributedString *ns_attrStr, NSMutableAttributedString *ns_mutable_attr_Str) {
CFAttributedStringRef cfsr = (CFAttributedStringRef) ns_attrStr;
CFMutableAttributedStringRef cfsr1 = (CFMutableAttributedStringRef) ns_attrStr;
CFAttributedStringRef cfsr2 = (CFAttributedStringRef) ns_mutable_attr_Str;
CFMutableAttributedStringRef cfsr3 = (CFMutableAttributedStringRef) ns_mutable_attr_Str;
}
// Tests with no definition declaration for struct __NDCFAttributedString.
typedef const struct __attribute__((objc_bridge(NSAttributedString))) __NDCFAttributedString *NDCFAttributedStringRef;
typedef struct __attribute__((objc_bridge_mutable(NSMutableAttributedString))) __NDCFAttributedString *NDCFMutableAttributedStringRef;
void Test3(NDCFAttributedStringRef attrStr, NDCFMutableAttributedStringRef mutable_attrStr)
{
id x = (NSAttributedString *) attrStr;
id x1 =(NSAttributedString *) mutable_attrStr;
id x2 = (NSMutableAttributedString *) attrStr;
id x3 = (NSMutableAttributedString *) mutable_attrStr;
}
void Test4(NSAttributedString *ns_attrStr, NSMutableAttributedString *ns_mutable_attr_Str) {
NDCFAttributedStringRef cfsr = (NDCFAttributedStringRef) ns_attrStr;
NDCFMutableAttributedStringRef cfsr1 = (NDCFMutableAttributedStringRef) ns_attrStr;
NDCFAttributedStringRef cfsr2 = (NDCFAttributedStringRef) ns_mutable_attr_Str;
NDCFMutableAttributedStringRef cfsr3 = (NDCFMutableAttributedStringRef) ns_mutable_attr_Str;
}