diff options
author | Jordan Rose <jordan_rose@apple.com> | 2012-06-07 01:10:31 +0000 |
---|---|---|
committer | Jordan Rose <jordan_rose@apple.com> | 2012-06-07 01:10:31 +0000 |
commit | 288c421b3d9a9c84b310088ce54c11c050775b9f (patch) | |
tree | 22f81731b5b482ce8024786e62d937056908feab /clang/lib/Sema/SemaExprObjC.cpp | |
parent | 161d5bb6f7c958738a9809efe408fb74f7adcafe (diff) | |
download | bcm5719-llvm-288c421b3d9a9c84b310088ce54c11c050775b9f.tar.gz bcm5719-llvm-288c421b3d9a9c84b310088ce54c11c050775b9f.zip |
Insert a space if necessary when suggesting CFBridgingRetain/Release.
This was a problem for people who write 'return(result);'
Also fix ARCMT's corresponding code, though there's no test case for this
because implicit casts like this are rejected by the migrator for being
ambiguous, and explicit casts have no problem.
<rdar://problem/11577346>
llvm-svn: 158130
Diffstat (limited to 'clang/lib/Sema/SemaExprObjC.cpp')
-rw-r--r-- | clang/lib/Sema/SemaExprObjC.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp index 1b0ba580841..ed1a112a7eb 100644 --- a/clang/lib/Sema/SemaExprObjC.cpp +++ b/clang/lib/Sema/SemaExprObjC.cpp @@ -2820,14 +2820,23 @@ static void addFixitForObjCARCConversion(Sema &S, castedE = CCE->getSubExpr(); castedE = castedE->IgnoreImpCasts(); SourceRange range = castedE->getSourceRange(); + + SmallString<32> BridgeCall; + + SourceManager &SM = S.getSourceManager(); + char PrevChar = *SM.getCharacterData(range.getBegin().getLocWithOffset(-1)); + if (Lexer::isIdentifierBodyChar(PrevChar, S.getLangOpts())) + BridgeCall += ' '; + + BridgeCall += CFBridgeName; + if (isa<ParenExpr>(castedE)) { DiagB.AddFixItHint(FixItHint::CreateInsertion(range.getBegin(), - CFBridgeName)); + BridgeCall)); } else { - std::string namePlusParen = CFBridgeName; - namePlusParen += "("; + BridgeCall += '('; DiagB.AddFixItHint(FixItHint::CreateInsertion(range.getBegin(), - namePlusParen)); + BridgeCall)); DiagB.AddFixItHint(FixItHint::CreateInsertion( S.PP.getLocForEndOfToken(range.getEnd()), ")")); |