From: Fariborz Jahanian Date: Mon, 11 Feb 2013 19:30:33 +0000 (+0000) Subject: objective-C modern translator: Fixes a mistranslation X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b0fdab26d17293c6442bcf81573864212119dd5e;p=platform%2Fupstream%2Fllvm.git objective-C modern translator: Fixes a mistranslation of @throw statement by finding location of the ';' correctly. // rdar://13186010 llvm-svn: 174898 --- diff --git a/clang/lib/Rewrite/Frontend/RewriteModernObjC.cpp b/clang/lib/Rewrite/Frontend/RewriteModernObjC.cpp index 34ffd22..f688603 100644 --- a/clang/lib/Rewrite/Frontend/RewriteModernObjC.cpp +++ b/clang/lib/Rewrite/Frontend/RewriteModernObjC.cpp @@ -2093,7 +2093,9 @@ Stmt *RewriteModernObjC::RewriteObjCThrowStmt(ObjCAtThrowStmt *S) { assert((*wBuf == 'w') && "@throw: can't find 'w'"); ReplaceText(startLoc, wBuf-startBuf+1, buf); - const char *semiBuf = strchr(startBuf, ';'); + SourceLocation endLoc = S->getLocEnd(); + const char *endBuf = SM->getCharacterData(endLoc); + const char *semiBuf = strchr(endBuf, ';'); assert((*semiBuf == ';') && "@throw: can't find ';'"); SourceLocation semiLoc = startLoc.getLocWithOffset(semiBuf-startBuf); if (S->getThrowExpr()) diff --git a/clang/test/Rewriter/rewrite-modern-throw.m b/clang/test/Rewriter/rewrite-modern-throw.m index 1912384..1564611 100644 --- a/clang/test/Rewriter/rewrite-modern-throw.m +++ b/clang/test/Rewriter/rewrite-modern-throw.m @@ -65,3 +65,29 @@ int main() } } @end + +// rdar://13186010 +@class NSDictionary, NSException; +@class NSMutableDictionary; + +@interface NSString ++ (id)stringWithFormat:(NSString *)format, ... ; +@end + +@interface NSException ++ (NSException *)exceptionWithName:(NSString *)name reason:(NSString *)reason userInfo:(NSDictionary *)userInfo; +@end +id *_imp__NSInvalidArgumentException; + +@interface NSSetExpression @end + +@implementation NSSetExpression +-(id)expressionValueWithObject:(id)object context:(NSMutableDictionary*)bindings { + id leftSet; + id rightSet; + @throw [NSException exceptionWithName: *_imp__NSInvalidArgumentException reason: [NSString stringWithFormat: @"Can't evaluate set expression; left subexpression not a set (lhs = %@ rhs = %@)", leftSet, rightSet] userInfo: 0]; + + return leftSet ; +} +@end +