diff options
Diffstat (limited to 'clang/lib/ARCMigrate/TransUnbridgedCasts.cpp')
-rw-r--r-- | clang/lib/ARCMigrate/TransUnbridgedCasts.cpp | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/clang/lib/ARCMigrate/TransUnbridgedCasts.cpp b/clang/lib/ARCMigrate/TransUnbridgedCasts.cpp index 72c0d8e7de3..f8bc5cf932c 100644 --- a/clang/lib/ARCMigrate/TransUnbridgedCasts.cpp +++ b/clang/lib/ARCMigrate/TransUnbridgedCasts.cpp @@ -37,6 +37,7 @@ #include "clang/Analysis/DomainSpecific/CocoaConventions.h" #include "clang/Sema/SemaDiagnostic.h" #include "clang/AST/ParentMap.h" +#include "clang/Lex/Lexer.h" #include "clang/Basic/SourceManager.h" #include "llvm/ADT/SmallString.h" @@ -229,20 +230,26 @@ private: } } else { assert(Kind == OBC_BridgeTransfer || Kind == OBC_BridgeRetained); - StringRef cfBridging; + SmallString<32> BridgeCall; + + Expr *WrapE = E->getSubExpr(); + SourceLocation InsertLoc = WrapE->getLocStart(); + + SourceManager &SM = Pass.Ctx.getSourceManager(); + char PrevChar = *SM.getCharacterData(InsertLoc.getLocWithOffset(-1)); + if (Lexer::isIdentifierBodyChar(PrevChar, Pass.Ctx.getLangOpts())) + BridgeCall += ' '; + if (Kind == OBC_BridgeTransfer) - cfBridging = "CFBridgingRelease"; + BridgeCall += "CFBridgingRelease"; else - cfBridging = "CFBridgingRetain"; + BridgeCall += "CFBridgingRetain"; - Expr *WrapE = E->getSubExpr(); - SourceLocation insertLoc = WrapE->getLocStart(); if (isa<ParenExpr>(WrapE)) { - TA.insert(insertLoc, cfBridging); + TA.insert(InsertLoc, BridgeCall); } else { - std::string withParens = cfBridging; - withParens += '('; - TA.insert(insertLoc, withParens); + BridgeCall += '('; + TA.insert(InsertLoc, BridgeCall); TA.insertAfterToken(WrapE->getLocEnd(), ")"); } } |