summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDeclAttr.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2013-11-14 00:43:05 +0000
committerFariborz Jahanian <fjahanian@apple.com>2013-11-14 00:43:05 +0000
commitae02d1552f1707f6854332fe28e2f2eb65e75c26 (patch)
treeb8ab59ebc3d9340ae75c49b3caff753cd5824e67 /clang/lib/Sema/SemaDeclAttr.cpp
parent7981f5b86c7738939b1912a067dc2a35520096dc (diff)
downloadbcm5719-llvm-ae02d1552f1707f6854332fe28e2f2eb65e75c26.tar.gz
bcm5719-llvm-ae02d1552f1707f6854332fe28e2f2eb65e75c26.zip
ObjectiveC ARC. objc_bridge attribute should be applied to
toll-free bridging cf types only. // rdar//15454846 wip. llvm-svn: 194640
Diffstat (limited to 'clang/lib/Sema/SemaDeclAttr.cpp')
-rw-r--r--clang/lib/Sema/SemaDeclAttr.cpp7
1 files changed, 3 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index 46a85c59b52..30ddd4d51d6 100644
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -207,10 +207,9 @@ static inline bool isCFStringType(QualType T, ASTContext &Ctx) {
return RD->getIdentifier() == &Ctx.Idents.get("__CFString");
}
-static inline bool isCFRefType(TypedefNameDecl *TD, ASTContext &Ctx) {
+static inline bool isTollFreeBridgeCFRefType(TypedefNameDecl *TD, ASTContext &Ctx) {
StringRef TDName = TD->getIdentifier()->getName();
- return ((TDName.startswith("CF") || TDName.startswith("CG")) &&
- (TDName.rfind("Ref") != StringRef::npos));
+ return (TDName.startswith("CF") && TDName.endswith("Ref"));
}
static unsigned getNumAttributeArgs(const AttributeList &Attr) {
@@ -4414,7 +4413,7 @@ static void handleObjCBridgeAttr(Sema &S, Scope *Sc, Decl *D,
return;
}
// Check for T being a CFType goes here.
- if (!isCFRefType(TD, S.Context)) {
+ if (!isTollFreeBridgeCFRefType(TD, S.Context)) {
S.Diag(TD->getLocStart(), diag::err_objc_bridge_not_cftype);
return;
}
OpenPOWER on IntegriCloud