Author: fjahanian
Date: Wed Jun 11 14:10:46 2014
New Revision: 210690
URL: http://llvm.org/viewvc/llvm-project?rev=210690&view=rev
Log:
Objective-C. More tests for both bridging attributes and
a fix to make it work when CFStructs have no definition.
// rdar://17238954.
Modified:
cfe/trunk/lib/Sema/SemaExprObjC.cpp
cfe/trunk/test/SemaObjC/objc-mixed-bridge-attribute.m
Modified: cfe/trunk/lib/Sema/SemaExprObjC.cpp
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprObjC.cpp?rev=210690&r1=210689&r2=210690&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExprObjC.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExprObjC.cpp Wed Jun 11 14:10:46 2014
@@ -3133,7 +3133,7 @@ static inline T *getObjCBridgeAttr(const
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;
Modified: cfe/trunk/test/SemaObjC/objc-mixed-bridge-attribute.m
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/objc-mixed-bridge-attribute.m?rev=210690&r1=210689&r2=210690&view=diff
==============================================================================
--- cfe/trunk/test/SemaObjC/objc-mixed-bridge-attribute.m (original)
+++ cfe/trunk/test/SemaObjC/objc-mixed-bridge-attribute.m Wed Jun 11 14:10:46
2014
@@ -15,12 +15,37 @@ typedef struct __attribute__((objc_bridg
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;
+}
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits