objective-C modern translator: Fixes a mistranslation

of @throw statement by finding location of the ';'
correctly. // rdar://13186010

llvm-svn: 174898
This commit is contained in:
Fariborz Jahanian 2013-02-11 19:30:33 +00:00
parent 6ad180cf35
commit b0fdab26d1
2 changed files with 29 additions and 1 deletions

View File

@ -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())

View File

@ -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