aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/clang/Basic/TokenKinds.def1
-rw-r--r--lib/Basic/Targets.cpp1
-rw-r--r--lib/Parse/ParseExpr.cpp3
-rw-r--r--test/SemaObjC/arc-bridged-cast.m5
4 files changed, 8 insertions, 2 deletions
diff --git a/include/clang/Basic/TokenKinds.def b/include/clang/Basic/TokenKinds.def
index dd105a169b..86172b83ff 100644
--- a/include/clang/Basic/TokenKinds.def
+++ b/include/clang/Basic/TokenKinds.def
@@ -426,6 +426,7 @@ KEYWORD(__pixel , KEYALTIVEC)
KEYWORD(__bridge , KEYARC)
KEYWORD(__bridge_transfer , KEYARC)
KEYWORD(__bridge_retained , KEYARC)
+KEYWORD(__bridge_retain , KEYARC)
// Alternate spelling for various tokens. There are GCC extensions in all
// languages, but should not be disabled in strict conformance mode.
diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp
index 7a062fcd62..5fcd0d2af9 100644
--- a/lib/Basic/Targets.cpp
+++ b/lib/Basic/Targets.cpp
@@ -104,6 +104,7 @@ static void getDarwinDefines(MacroBuilder &Builder, const LangOptions &Opts,
Builder.defineMacro("__bridge", "");
Builder.defineMacro("__bridge_transfer", "");
Builder.defineMacro("__bridge_retained", "");
+ Builder.defineMacro("__bridge_retain", "");
}
if (Opts.Static)
diff --git a/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp
index 01bd0ed336..14f3805cd9 100644
--- a/lib/Parse/ParseExpr.cpp
+++ b/lib/Parse/ParseExpr.cpp
@@ -1780,7 +1780,8 @@ Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr,
} else if (ExprType >= CompoundLiteral &&
(Tok.is(tok::kw___bridge) ||
Tok.is(tok::kw___bridge_transfer) ||
- Tok.is(tok::kw___bridge_retained))) {
+ Tok.is(tok::kw___bridge_retained) ||
+ Tok.is(tok::kw___bridge_retain))) { // FIXME: temporary workaround
// Parse an Objective-C ARC ownership cast expression.
ObjCBridgeCastKind Kind;
if (Tok.is(tok::kw___bridge))
diff --git a/test/SemaObjC/arc-bridged-cast.m b/test/SemaObjC/arc-bridged-cast.m
index 227cce2248..d302182476 100644
--- a/test/SemaObjC/arc-bridged-cast.m
+++ b/test/SemaObjC/arc-bridged-cast.m
@@ -27,7 +27,10 @@ void to_cf(id obj) {
CFTypeRef cf1 = (__bridge_retained CFTypeRef)CreateSomething();
CFStringRef cf2 = (__bridge_retained CFStringRef)CreateNSString();
CFTypeRef cf3 = (__bridge CFTypeRef)CreateSomething();
- CFStringRef cf4 = (__bridge CFStringRef)CreateNSString();
+ CFStringRef cf4 = (__bridge CFStringRef)CreateNSString();
+
+ // rdar://problem/9629566 - temporary workaround
+ CFTypeRef cf5 = (__bridge_retain CFTypeRef)CreateSomething();
}
void fixits() {